Introduction | Installation | Documentation | Terminology | License | Contributors | Others' work
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, including the DeepCore and the proposed PINGU low-energy in-fill arrays. However, any such experiment—or any experiment at all—can make use of PISA for analyzing expected and actual results.
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). 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
git clone [email protected]:icecube/pisa.git
cd pisa
pip install -e .
For detailed installation instructions and common issues see Installation
Producing some oscillograms
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
template_maker = Pipeline("settings/pipeline/osc_example.cfg")
Run the pipleine with nominal settings
template_maker.run()
Get the oscillation probabilities
outputs = template_maker.data.get_mapset('prob_mu')
Plot some results
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);