Skip to content

NuSpaceSim/nupyprop

Repository files navigation

nuPyProp

Propagate neutrinos through the earth.

A python package and command line utility, including fortran for performance with openMP.

Documentation (WIP): https://nupyprop.readthedocs.io/en/latest/

Note: While the documentation is currently WIP, users and developers should consult the nuPyProp tutorial folder called tutorial in the current repository, for visualizing output from the code and creating user-defined models.

Citation: Please cite "Neutrino propagation in the Earth and emerging charged leptons with nuPyProp", Diksha Garg et al JCAP01(2023)041. DOI: 10.1088/1475-7516/2023/01/041 (Paper link), published in Journal of Cosmology and Astroparticle Physics.

Acknowledgments: This work is supported by NASA grants 80NSSC19K0626 at the University of Maryland,Baltimore County, 80NSSC19K0460 at the Colorado School of Mines, 80NSSC19K0484 at theUniversity of Iowa, and 80NSSC19K0485 at the University of Utah, 80NSSC18K0464 at LehmanCollege, and under proposal 17-APRA17-0066 at NASA/GSFC and JPL.

Installation

with pip

python3 -m pip install nupyprop

with conda

We recommend installing nupyprop into a conda environment like so. In this example the name of the environment is “nupyprop”

conda create -n nupyprop -c conda-forge -c nuspacesim nupyprop
conda activate nupyprop

Usage

nupyprop --help

Example for running tau propagation for 107 GeV neutrinos at 10 degrees with 107 neutrinos injected with stochastic energy loss & with all other parameters as defaults:

nupyprop -e 7 -a 10 -t stochastic -s 1e7

Run parameters are defined in run.py. Different switches are described as follows:

  1. -e or --energy: incoming neutrino energy in log_10(GeV). Works for single energy or multiple energies. For multiple energies, separate energies with commas eg. 6,7,8,9,10,11. Default energies are 106,106.25,106.5,…1011 GeV.
  2. -a or --angle: slant Earth angles in degrees. Works for single angle or multiple angles. For multiple angles, separate angles with commas eg. 1,3,5,7,10. Default angles are 1->42 degrees, in steps of 1 degree.
  3. -i or --idepth: depth of ice/water in km. Default value is 4 km.
  4. -cl or --charged_lepton: flavor of charged lepton used to propagate. Can be either muon or tau. Default is tau.
  5. -n or --nu_type: type of neutrino matter. Can be either neutrino or anti-neutrino. Default is neutrino.
  6. -t or --energy_loss: energy loss type for lepton - can be stochastic or continuous. Default is stochastic.
  7. -x or --xc_model: neutrino/anti-neutrino cross-section model used. Can be from the pre-defined set of models (see xc-table) or custom. Default is ct18nlo.
  8. -p or --pn_model: photonuclear interaction energy loss model used. Can be from the pre-defined set of models (see pn-table) or custom. Default is allm.
  9. -el or --energy_lepton: option to print exiting charged lepton's final energy in output file. Default is no
  10. -f or --fac_nu: rescaling factor for BSM cross-sections. Default is 1.
  11. -s or --stats: statistics or no. of injected neutrinos. Default is 1e7 neutrinos.
  12. -htc or --htc_mode: High throughput computing mode. If set to yes, the code will be optimized to run in high throughput computing mode. Default is no.

Note: This program uses OpenMP for propagating the huge number of neutrinos injected. For this purpose, the code will use all the threads available in your processor by default. To control the number of threads used for running the code, use export OMP_NUM_THREADS=x, where x is the number of threads you want the code to run with.

Viewing output results: output_*.h5 will contain the results of the code after it has finished running. In the terminal, run vitables (optional dependency) and open the output_*.h5 file to view the output results.

output_*.h5 naming convention is as follows: output_A_B_Ckm_D_E_F_G, where

A = Neutrino type: nu is for neutrino & anu is for anti-neutrino.
B = Charged lepton type: tau is for tau leptons & muon is for muons.
C = idepth: depth of water layer (in km).
D = Neutrino (or anti-neutrino) cross-section model.
E = Charged lepton photonuclear energy loss model.
F = Energy loss type: can be stochastic or continuous.
G = Statistics (ie. no. of neutrinos/anti-neutrinos injected).

Model Tables

Neutrino/Anti-Neutrino Cross-Section Model Reference
Abramowicz, Levin, Levy, Maor (ALLM) hep-ph/9712415, Phys. Rev. D 96, 043003
Block, Durand, Ha, McKay (BDHM) Phys. Rev. D 89, 094027, Phys. Rev. D 96, 043003
CTEQ18-NLO Phys. Rev. D 103, 014013, Phys. Rev. D 81, 114012
Connolly, Thorne, Waters (CTW) Phys. Rev. D 83, 113009
nCTEQ15 Phys. Rev. D 93, 085037, Phys. Rev. D 81, 114012
User Defined See nuPyProp tutorial repository
Charged Lepton Photonuclear Energy Loss Model Reference
Abramowicz, Levin, Levy, Maor (ALLM) hep-ph/9712415, Phys. Rev. D 63, 094020
Bezrukov-Bugaev (BB) Yad. Fiz. 33, 1195, Phys. Rev. D 63, 094020
Block, Durand, Ha, McKay (BDHM) Phys. Rev. D 89, 094027, Phys. Rev. D 63, 094020
Capella, Kaidalov, Merino, Tran (CKMT) Eur. Phys. J. C 10, 153 Phys. Rev. D 63, 094020
User Defined See nuPyProp tutorial repository

Code Execution Timing Tables

Charged Lepton Energy Loss Type E|nu| [GeV] Angles N|nu|;;in Time (hrs)
τ Stochastic 107 1-35 108 1.07*, 0.26***
τ Continuous 107 1-35 108 0.88*
τ Stochastic 108 1-35 108 6.18*, 1.53***
τ Continuous 108 1-35 108 5.51*
τ Stochastic 109 1-35 108 27.96*, 5.08***
τ Continuous 109 1-35 108 19.11*
τ Stochastic 1010 1-35 108 49.80*, 12.43***
τ Continuous 1010 1-35 108 35.59*
τ Stochastic 1011 1-35 108 12.73***
τ Continuous 1011 1-35 108
Charged Lepton Energy Loss Type E|nu| [GeV] Angles N|nu|;;in Time (hrs)
μ Stochastic 106 1,2,3,5,7,10,12,15,17,20,25,30,35 108
μ Continuous 106 1,2,3,5,7,10,12,15,17,20,25,30,35 108 0.95*
μ Stochastic 107 1,2,3,5,7,10,12,15,17,20,25,30,35 108
μ Continuous 107 1,2,3,5,7,10,12,15,17,20,25,30,35 108 3.19*
μ Stochastic 108 1,2,3,5,7,10,12,15,17,20,25,30,35 108
μ Continuous 108 1,2,3,5,7,10,12,15,17,20,25,30,35 108 5.17*
μ Stochastic 109 1,2,3,5,7,10,12,15,17,20,25,30,35 108 111.77**
μ Continuous 109 1,2,3,5,7,10,12,15,17,20,25,30,35 108 7.42*
μ Stochastic 1010 1,2,3,5,7,10,12,15,17,20,25,30,35 108 98.17*
μ Continuous 1010 1,2,3,5,7,10,12,15,17,20,25,30,35 108 9.76*
μ Stochastic 1011 1,2,3,5,7,10,12,15,17,20,25,30,35 108
μ Continuous 1011 1,2,3,5,7,10,12,15,17,20,25,30,35 108

* - Intel Core i7-8750H; 6 cores & 12 threads. ** - Intel Core i5-10210; 4 cores & 8 threads. *** - UIowa Argon cluster; 56 cores.

For debugging/development: The correct order to look at the code is in the following order:

  1. data.py: contains functions for reading/writing from/to hdf5 files.
  2. geometry.py: contains the Earth geometry modules (including PREM) for use with python/fortran.
  3. models.py: contains neutrino cross-section & charged lepton energy loss model templates.
  4. propagate.f90: heart of the code; contains fortran modules to interpolate between geometry variables, cross-sections, energy loss parameters & propagate neutrinos and charged leptons through the Earth.
  5. main.py: forms the main skeleton of the code; propagates the neutrinos and charged leptons, and calculates the p_exit and collects outgoing lepton energies.
  6. run.py: contains all the run parameters and variables needed for all the other .py files.

Developing the code on Ubuntu

These notes should help developers of this code build and install the package locally using a pep518 compliant build system (pip).

  1. Install the non-pypi required dependencies as described for users above.
  2. Install a fortran compiler. ex: sudo apt-get install gfortran
  3. git clone the source code: git clone [email protected]:NuSpaceSim/nupyprop.git
  4. cd nupyprop
  5. build and install the package in ‘editable’ mode python3 -m pip install -e .

Developing the code on MacOS

These notes should help developers of this code build and install the package locally using a pep518 compliant build system (pip). Currently we do not support the default system python3 on MacOS which is out of date and missing critical functionality. Use the homebrew python instead, or a virtualenv, or a conda environment.

  1. Install the non-pypi required dependencies as described for users above.
  2. Install a fortran compiler. ex: brew install gcc
  3. git clone the source code: git clone [email protected]:NuSpaceSim/nupyprop.git
  4. cd nupyprop
  5. build and install the package in ‘editable’ mode python3 -m pip install -e .