NuShock is a flexible framework to study the phenomenology of models with heavy neutrinos. Given some description of the physics processes (cross-sections or decay rates), the neutrino flux, and the detector geometry, it is possible to study the sensitivity to a specific process of a neutrino experiment. Tools for background estimations are also available.
Set the variables:
$CUBAto point to the installation path for cuba$LHAPDFto point to the installation path for LHAPDF$ROOTSYSto point to the installation path for ROOT (this already part of the installation process)
If ROOT is properly set, root-config should be in the user's $PATH and so the Makefile can find the includes and libraries on its own.
Remember to update your $LD_LIBRARY_PATH.
Simply doing
make
is enough.
This will create binaries in the bin folder.
The main functions are to be placed in the app/ folder and the exectuables are moved to the bin/ folder after compilation.
These are, at the moment
Most of the classes, like flux or detector, use description files contained in the config/ subfolder.
The detector configuration, for example config/detectro.card describes the DUNE near detector, composed of two parts: a LArTPC and a FGT.
Sizes and dimensions are desribed in the file, whereas the tracking resolutions are in config/resolution.card.
At the end there is a list of efficiency files, used to estimate sensitivty including background.
More description inside the configuration file itself.
At the moment the detector class expects a detector made of two parts: a LArTPC in front of a TPC, but this problem can be overcome by defining a null secondary detector. The geometry are boxes, so this should be maybe changed. In the Tracker class, correct material properties should be defined, like interaction length etc. At the moment olny liquid argon, gaseous argon, iron and lead are defined. Material description is important for energy loss in material: the length of the track defines the resolution to use, if it is a contained track or not. In the case of DUNE ND, a track is contained if 80% of the total length are inside. This can be changed with the Containment entry in the config file.
The flux configuration files expects paths to ROOT files containing TH1D with the fluxes. As an extra, modifier files for tau flux, created from direct simulation of HNL production from Ds decays.
The flux package has a matrioska-like structure.
The lowest level class is Flux which copies to memory TH1D from flux configuration file.
Above that the Driver class takes care of scaling the light-nu fluxes to HNL fluxes.
The better way to use the Driver class is with the Engine class, which binds flux, detector and neutrino (HNL) type
together to evaluate the flux AT the ND site and therefore evaluation of number of events is easy.
The number of events formula is split in two parts: flux+energy integration and probability+efficiency.
The latter is done in the Detector class (see below).
The flux and integration over energy E is handled by Engine which calls the Detector at each energy to
estimate the probability+efficiency of an HNL of given energy E to decay inside the ND.
This is the most important package, in which all decay widths and distributions are compute.
It is based on a base class, Amplitude, which has definition of the Feynman amplitudes, M2,
of all decay and production modes taken in consideration.
The Amplitude class is never called alone, but it is accesed by derived classes:
DecayRatesfor computing decay rates and branching ratiosProductionfor computing production scale factorsPhaseSpaceto be used for simulation of decays and production
The derived classes are best implemented in the Neutrino class, which in turn is derived from
the Particle class (tools.h package).
A neutrino object can be constructed on the stack as it doesn't require much memory and has methods that returns
decay widths, branching ratios, scale factors, phase space generation, etc.
When constructing a neutrion object, options can be passed to specify helicity and fermionic nature.
The options are
Neutrino::Leftfor a left-helicity particleNeutrino::Rightfor a right-helicity particleNeutrino::Unpolarisedfor an unpolarised particle, so information on helicity is integratedNeutrino::Diracfor a Dirac HNLNeutrino::Majoranafor a Majorana HNLNeutrino::Antiparticlefor an anti HNL; it makes sense only if HNL is Dirac
It the Antiparticle option is not specified, then the HNL is a particle by default.
In order to call a specific prodution or decay mode, a unique string is passed that identifies the channel of interest.
These strings are for decay channels:
nnnfor 3-body decay into 3 light neutrinosnGAMMAfor radiative decay into a neutrino and a gamma (deprecated now)nEEfor 3-body decay into nu e enEMfor 3-body decay into nu e munMMfor 3-body decay into nu mu munETfor 3-body decay into nu e taunMTfor 3-body decay into nu mu taunPI0for 2-body decay into nu pion0EPIfor 2-body decay into e pionMPIfor 2-body decay into mu pionTPIfor 2-body decay into tau pionEKAfor 2-body decay into e kaonMKAfor 2-body decay into mu kaonnRHO0for 2-body decay into nu rho0ERHOfor 2-body decay into e rhoMRHOfor 2-body decay into mu rhoEKAxfor 2-body decay into e kaon*MKAxfor 2-body decay into mu kaon*nOMEGAfor 2-body decay into nu omeganETAfor 2-body decay into nu etanETAifor 2-body decay into nu eta'nPHIfor 2-body decay into nu phiECHARMfor 2-body decay into e D (charm meson)ExpALLfor decay with good discovery sensitivity (nEE, nEM, nMM, nPI0, EPI, MPI)
These strings are for production channels:
MuonEfor 3-body production from muon via Ue mixingMuonMfor 3-body production from muon via Um mixingTauEEfor 3-body production from tau to electron via Ue mixingTauETfor 3-body production from tau to electron via Ut mixingTauMMfor 3-body production from tau to muon via Um mixingTauMTfor 3-body production from tau to muon via Ut mixingTauPIfor 2-body production from tau to pionTau2PIfor 3-body production from tau to 2 pions (only phase space!)PionEfor 2-body production from pion to electronPionMfor 2-body production from pion to muonKaonEfor 2-body production from kaon to electronKaonMfor 2-body production from kaon to muonCharmEfor 2-body production from D (charm) to electronCharmMfor 2-body production from D (charm) to muonCharmTfor 2-body production from D (charm) to tauKaon0Efor 3-body production from kaon0 to pion electronKaon0Mfor 3-body production from kaon0 to pion muonKaonCEfor 3-body production from kaon to pion0 electronKaonCMfor 3-body production from kaon to pion0 muon
The Detector class loads geometry from configuration file.
There are also a Tracker and Efficiency class, derived from Detector, to deal with background generation/smearing
and detector efficiency computation.
The executables for production scale and decay branch can be run as
./bin/DecayBranch -o outputfile1 -c nEM -E 1.0 -M 0.5
./bin/ProductionScale -o outputfile2 -c Kaon0E -E 1.0 -M 0.5
The output files will contain two columns: the first ones being mass of HNL and the second ones the branching ratio of the decay of HNL into nEM and production scale factor for Kaon0E with mixing ratio 2:1:0.
Another example
./bin/Sensitivity -d config/ND_Full_2 -f config/FluxConfig -c EPI -E -o output
./bin/Sensitivity -d config/ND_Full_2 -f config/FluxConfig -c MPI -M -o output
which compute the experimental sensitivity to the channels EPI and MPI for zero background expectation.
The lines are computed using bisection search method implemented in the Exclusion class from the analysis package.