Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | Related Pages

NeutrinoFlux Service for IceTray

Authors:
Teresa Montaruli email: tmontaruli@icecube.wisc.edu
Christine Lewis email: christine.lewis@icecube.wisc.edu

Juan Carlos Diaz-Velez email: juancarlos@icecube.wisc.edu

Introduction

Contained in this project is the NeutrinoFlux service used for evaluating the fluxes of neutrinos of any flavour. At the moment, this class can provide the user with the calculation of differential and integral fluxes of conventional atmospheric neutrinos (according to the models of Honda2006 (NEW!!), Bartol2004, HKKM2004 and FLUKA2005) and prompt atmospheric neutrinos (according to the models of Naumov RQPM/QGSM, Martin2003 and Costa2001). Tau neutrino prompt fluxes according to Martin2003 have been introduced in Nov 2007. However, it can be used for every kind of fluxes! In fact, other tables are implemented for astrophysical point-like source and diffuse fluxes.

The NeutrinoFlux class is meant to be used as a service in IceTray but one should be able to use it as a stand-alone class (e.g. for use in ROOT).

The class NeutrinoFlux reads tables of parameters we extracted from fits of atmospheric neutrino flux tables. The part below 700 GeV (this energy slightly depends on the angle) we have used the original tables from MC calculations (References in Teresa's page) and for higher energies we use physics motivated functions (read T. Gaisser textbook!) where we have derived the parameters by fitting the MC tables between 700 GeV and 10 TeV. Normally the MCs run out of statistics above 1 TeV so an physics motivated function is more stable and allows to disentangle the contributions of parents decaying (mainly kaons and some pions).
We use IceTray convention nue = 66 anue = 67 numu = 68 anumu = 69 (for prompt nutau use 133 and 134 for anutau).

For atmospheric neutrinos the module returns values of the flux at any energy (> 10 GeV) and cos(theta) between -1,1 (symmetry is assumed at these energy between up and down atmospheric neutrino fluxes). For prompt neutrinos numu, anumu, nue and anue are assumed to beequal, nutau and anutau are different and equal between themselves, but only one model from charm and beauty decays is considered. The units of the diffuse fluxes are dN/dEdcos(theta) in GeV^-1 cm^-2 s^-1 sr^-1 and of point-like source fluxes are GeV^-1 cm^-2 s^-1.

Notice the change in how to invoke the constructor in Nov 2007. Now you need to specify not only the model name in the string but also the kind of neutrino (numu for both Numu and NumuBar, Nue for both Nue and NueBar and NuTau for both NuTau and NutauBar) for atmospheric conventional and prompt neutrinos.

Usage

in IceTray

See the documentation of

I3NuGenWeightingModule and OneWeight

Stand-alone

To compile as stand-alone use the Makefile.standalone file:
  make -f Makefile.standalone

Using the library in ROOT:

   // Cint example
   gSystem->Load("libneutrinoflux.so");

ConventionalNeutrinoFlux convneutrinoflux(modelname_nutype);
//instantiate a new conventional neutrinoflux with modelname and add the neutrino type (_numu, _nue, _nutau) // After defining an object using the constructor specified in 1-a, use: double conv = convneutrinoflux.getFlux(neutType, E_neut, costheta);
// to return differential conventional neutrino fluxes in GeV^-1 cm^-2 s^-1 sr^-1 // neutType can be 66 (nue), 67 (anue), 68 (numu) or 69 (anumu) (IceTray convention) // E_neut can vary from 0. to whatever double value (physical dimension: GeV) // costheta can vary between -1. and 1. double convint = convneutrinoflux.getFluxIntegral(neutType, double E_neut);
// to return integrated conv. fluxes over the lower hemisphere (GeV^-1 cm^-2 s^-1) PromptNeutrinoFlux promptneutrinoflux(modelname);
double prompt = promptneutrinoflux.getFlux(neutType, E_neut, costheta);
// to return differential prompt neutrino fluxes in GeV^-1 cm^-2 s^-1 sr^-1 // The same specification for the input variables of case a) are valid double promptint = promptneutrinoflux.getFluxIntegral(neutType, E_neut);
// to return integrated prompt fluxes over the lower hemisphere (GeV^-1 cm^-2 s^-1) AtmosphericNeutrinoFlux atmoneutrinoflux(conv_model,prompt_model);
double atmo = atmoneutrinoflux.getFlux(neutType, E_neut, costheta);
// to return the complete differential spectrum including prompt and conventional // neutrinos in GeV^-1 cm^-2 s^-1 sr^-1 double atmoint = atmoneutrinoflux.getFluxIntegral(neutType, E_neut);
// to return the complete integrated spectrum including prompt and conventional // neutrinos in GeV^-1 cm^-2 s^-1 sr^-1 AstroNeutrinoFlux astroneutrinoflux(conv_model,prompt_model);
// After defining an object using the constructor specified in 1-b, use: double astro = astroneutrinoflux.getFlux(neutType, E_neut, costheta);
// to return diffuse (in GeV^-1 cm^-2 s^-1 sr^-1) or point-like (in // GeV^-1 cm^-2 s^-1) fluxes according if you read a table of diffuse // or point-like astrophysical flux // E can vary between 1. and 1.e12 GeV

HOW TO ADD NEW TABLES for atmospheric neutrino fluxes:

Specification:
        ------------------------------------------------------
|Parameters Error on the parameters (not used yet)|
| par[0] pare[0] |
| ........ ................ |
| par[14] pare[14] |
------------------------------------------------------


Updated on Nov 21