1#ifndef __OSCILLATOR_CONSTANTS__
2#define __OSCILLATOR_CONSTANTS__
70 std::vector<FLOAT_T> OscParams_Basic = {3.07e-1,5.28e-1,2.18e-2,7.53e-5,2.509e-3,-1.601};
71 return OscParams_Basic;
80 std::vector<FLOAT_T> OscParams_Atm = {3.07e-1,5.28e-1,2.18e-2,7.53e-5,2.509e-3,-1.601,25.0};
90 std::vector<FLOAT_T> OscParams_Beam_woYe = {3.07e-1,5.28e-1,2.18e-2,7.53e-5,2.509e-3,-1.601,250.0,2.6};
91 return OscParams_Beam_woYe;
100 std::vector<FLOAT_T> OscParams_Beam_wYe = {3.07e-1,5.28e-1,2.18e-2,7.53e-5,2.509e-3,-1.601,250.0,2.6,0.5};
101 return OscParams_Beam_wYe;
110 std::vector<FLOAT_T> OscParams_Beam_wYe_wDeco = {3.07e-1,5.28e-1,2.18e-2,7.53e-5,2.509e-3,-1.601,250.0,2.6,0.5,9.48e-18,2.0,1.0};
111 return OscParams_Beam_wYe_wDeco;
120 std::vector<FLOAT_T> OscParams_Beam_wYe_wLIV = {3.07e-1,5.28e-1,2.18e-2,7.53e-5,2.509e-3,-1.601,250.0,2.6,0.5,1.0e-23,0.0,1.0e-23,0.0,0.0};
121 return OscParams_Beam_wYe_wLIV;
131 std::vector<FLOAT_T> OscParams_Beam_wYe_wNSI = {3.07e-1,5.28e-1,2.18e-2,7.53e-5,2.509e-3,-1.601,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,250,2.6,0.5};
132 return OscParams_Beam_wYe_wNSI;
141 std::vector<std::string> ConfigNames;
144 ConfigNames.push_back(
"./NuOscillatorConfigs/Binned_CUDAProb3.yaml");
147#if UseCUDAProb3Linear == 1
148 ConfigNames.push_back(
"./NuOscillatorConfigs/Binned_CUDAProb3Linear.yaml");
151#if UseProbGPULinear == 1
152 ConfigNames.push_back(
"./NuOscillatorConfigs/Binned_ProbGPULinear.yaml");
155#if UseProb3ppLinear == 1
156 ConfigNames.push_back(
"./NuOscillatorConfigs/Binned_Prob3ppLinear.yaml");
159#if UseNuFASTLinear == 1
160 ConfigNames.push_back(
"./NuOscillatorConfigs/Binned_NuFASTLinear.yaml");
163#if UseNuSQUIDSLinear == 1
164 ConfigNames.push_back(
"./NuOscillatorConfigs/Binned_NuSQUIDSLinear.yaml");
168 ConfigNames.push_back(
"./NuOscillatorConfigs/Binned_OscProb.yaml");
180 if (NuFlav ==
"Electron" || NuFlav ==
"electron") {
182 }
else if (NuFlav ==
"Muon" || NuFlav ==
"muon") {
184 }
else if (NuFlav ==
"Tau" || NuFlav ==
"tau") {
186 }
else if (NuFlav ==
"Sterile1" || NuFlav ==
"sterile1") {
188 }
else if (NuFlav ==
"Sterile2" || NuFlav ==
"sterile2") {
190 }
else if (NuFlav ==
"Sterile3" || NuFlav ==
"sterile3") {
193 std::cerr <<
"Could not convert input string:" << NuFlav <<
" to known enum value in NeutrinoFlavours" << std::endl;
194 throw std::runtime_error(
"Invalid setup");
222 std::cerr <<
"Recieved unknown NeutrinoFlavour:" << NuFlav <<
" which is inconsistent with those in enum 'NeutrinoFlavours'" << std::endl;
223 throw std::runtime_error(
"Invalid setup");
236 if (Verbosity ==
"NONE") {
238 }
else if (Verbosity ==
"INFO") {
240 }
else if (Verbosity ==
"VERBOSE") {
243 std::cerr <<
"Invalid verbosity provided:" << Verbosity << std::endl;
244 throw std::runtime_error(
"Invalid setup");
258 std::string GeneratedFlavour =
"";
259 std::string DetectedFlavour =
"";
261 size_t Delimiter = InputString.find(
":");
262 if (Delimiter != std::string::npos) {
263 GeneratedFlavour = InputString.substr(0,Delimiter);
264 DetectedFlavour = InputString.substr(Delimiter+1,InputString.size());
266 std::cerr <<
"Expected a string formatted as: 'GeneratedNeutrinoFlavour:DetectedNeutrinoFlavour'" << std::endl;
267 std::cerr <<
"Received:" << InputString << std::endl;
284 std::cerr <<
"Requested log spacing distribution with 0 divisions" << std::endl;
285 throw std::runtime_error(
"Invalid setup");
288 std::vector<FLOAT_T> logpoints(nDiv+1, 0.0);
296 Emin_log = log10(Emin);
297 Emax_log = log10(Emax);
301 FLOAT_T EE = Emin_log+step_log;
303 for (
int i=1; i<nDiv; i++) {
304 logpoints[i] = pow(10.,EE);
308 logpoints[nDiv]=Emax;
323 std::cerr <<
"Requested linear spacing distribution with 0 divisions" << std::endl;
324 throw std::runtime_error(
"Invalid setup");
327 std::vector<FLOAT_T> linpoints(nDiv+1, 0.0);
333 for (
int i=0; i<nDiv; i++) {
334 if (fabs(EE)<1e-6) {EE = 0.;}
340 linpoints[nDiv] = Emax;
354 std::vector<FLOAT_T> BinEdges;
356 TFile* File =
new TFile(TFileName.c_str());
357 if (!File || File->IsZombie()) {
358 std::cerr <<
"Could not find file:" << TFileName << std::endl;
359 throw std::runtime_error(
"Invalid input file.");
362 TH1* Histogram = (TH1*)File->Get(HistogramName.c_str());
364 std::cerr <<
"Could not find Histogram:" << HistogramName <<
" in File:" << TFileName << std::endl;
365 throw std::runtime_error(
"Invalid input file.");
368 BinEdges.resize(Histogram->GetNbinsX()+1);
369 for (
int iBin=0;iBin<=Histogram->GetNbinsX();iBin++) {
370 BinEdges[iBin] = Histogram->GetBinLowEdge(iBin+1);
377 std::cout <<
"Bin edges successfully read from File:" << TFileName <<
" , Histogram:" << HistogramName <<
" :=" << std::endl;
378 for (
size_t i=0;i<BinEdges.size();i++) {
379 std::cout << BinEdges[i] <<
", ";
381 std::cout << std::endl;
394 int nBins = BinEdges.size()-1;
395 std::vector<FLOAT_T> BinCenters = std::vector<FLOAT_T>(nBins);
397 for (
int iBin=0;iBin<nBins;iBin++) {
398 BinCenters[iBin] = (BinEdges[iBin]+BinEdges[iBin+1])/2.0;
std::vector< FLOAT_T > ReadBinEdgesFromFile(std::string TFileName, std::string HistogramName, int Verbose=NuOscillator::Verbosity::NONE)
Read bin edges from input template histogram.
Definition OscillatorConstants.h:353
int NeutrinoFlavour_StrToInt(const std::string &NuFlav)
Convert a neutrino flavour string to integer.
Definition OscillatorConstants.h:179
std::vector< FLOAT_T > ReturnBinCentersFromBinEdges(std::vector< FLOAT_T > BinEdges)
Return the bin centers given the bin edges of a template histogram.
Definition OscillatorConstants.h:393
std::vector< FLOAT_T > ReturnOscParams_Atm()
Returns the oscillation parameters for atmospheric neutrinos, with production height.
Definition OscillatorConstants.h:79
std::vector< FLOAT_T > ReturnOscParams_Beam_wYe_wDeco()
Returns the oscillation parameters for beam neutrinos, with baseline and density. With electron densi...
Definition OscillatorConstants.h:109
std::vector< FLOAT_T > linspace(FLOAT_T Emin, FLOAT_T Emax, int nDiv)
Generate vector of linearly spaced points.
Definition OscillatorConstants.h:321
std::vector< FLOAT_T > ReturnOscParams_Beam_wYe()
Returns the oscillation parameters for beam neutrinos, with baseline and density. With electron densi...
Definition OscillatorConstants.h:99
std::vector< FLOAT_T > ReturnOscParams_Beam_woYe()
Returns the oscillation parameters for beam neutrinos, with baseline and density. Without electron de...
Definition OscillatorConstants.h:89
NuOscillator::OscillationChannel ReturnOscillationChannel(const std::string &InputString)
Take an input string formatted as 'GeneratedNeutrinoFlavour:DetectedNeutrinoFlavour' and return an Nu...
Definition OscillatorConstants.h:257
std::string NeutrinoFlavour_IntToStr(const int NuFlav)
Convert a neutrino flavour integer to string.
Definition OscillatorConstants.h:207
std::vector< FLOAT_T > logspace(FLOAT_T Emin, FLOAT_T Emax, int nDiv)
Generate vector of logarithmically spaced points.
Definition OscillatorConstants.h:282
std::vector< std::string > ReturnKnownConfigs()
Return vector of all config names for each oscillation engine which has been enabled.
Definition OscillatorConstants.h:140
float FLOAT_T
Definition OscillatorConstants.h:14
std::vector< FLOAT_T > ReturnOscParams_Beam_wYe_wNSI()
Returns the oscillation parameters for beam neutrinos, with baseline and density. With electron densi...
Definition OscillatorConstants.h:129
std::vector< FLOAT_T > ReturnOscParams_Basic()
Returns the basic oscillation parameters.
Definition OscillatorConstants.h:69
std::vector< FLOAT_T > ReturnOscParams_Beam_wYe_wLIV()
Returns the oscillation parameters for beam neutrinos, with baseline and density. With electron densi...
Definition OscillatorConstants.h:119
int Verbosity_StrToInt(const std::string &Verbosity)
Return the Verbosity enum value correpsonding to a particular string.
Definition OscillatorConstants.h:235
Definition OscillatorConstants.h:26
Verbosity
Different verbosity levels for console output.
Definition OscillatorConstants.h:30
@ NONE
Definition OscillatorConstants.h:30
@ INFO
Definition OscillatorConstants.h:30
@ VERBOSE
Definition OscillatorConstants.h:30
@ kNuFlavour_Generated
Definition OscillatorConstants.h:42
@ kNuFlavour_Detected
Definition OscillatorConstants.h:42
@ nNuFlavours
Definition OscillatorConstants.h:42
NeutrinoFlavours
Different neutrino flavours currently supported within the analysis.
Definition OscillatorConstants.h:37
@ kSterile2
Definition OscillatorConstants.h:37
@ kMuon
Definition OscillatorConstants.h:37
@ kSterile3
Definition OscillatorConstants.h:37
@ kElectron
Definition OscillatorConstants.h:37
@ kSterile1
Definition OscillatorConstants.h:37
@ kTau
Definition OscillatorConstants.h:37
@ nNeutrinoFlavours
Definition OscillatorConstants.h:37
Structure which defines the oscillation channel generated and detected neutrino flavours.
Definition OscillatorConstants.h:47
int DetectedFlavour
Definition OscillatorConstants.h:49
int GeneratedFlavour
Definition OscillatorConstants.h:48
Structure to contain all information about the neutrino type, oscillation channel,...
Definition OscillatorConstants.h:55
int NuType
Definition OscillatorConstants.h:56
OscillationChannel OscChan
Definition OscillatorConstants.h:57
FLOAT_T CosineZ
Definition OscillatorConstants.h:59
FLOAT_T Probability
Definition OscillatorConstants.h:60
FLOAT_T Energy
Definition OscillatorConstants.h:58