NuOscillator v1.4.3
Loading...
Searching...
No Matches
OscillatorConstants.h
Go to the documentation of this file.
1#ifndef __OSCILLATOR_CONSTANTS__
2#define __OSCILLATOR_CONSTANTS__
3
4#define DUMMYVAL -999
5
6#include <math.h>
7
8#include "TFile.h"
9#include "TH1.h"
10
11#if UseDoubles==1
12using FLOAT_T = double;
13#else
14using FLOAT_T = float;
15#endif
16
17#include <string>
18#include <iostream>
19#include <vector>
20
64
69inline std::vector<FLOAT_T> ReturnOscParams_Basic() {
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;
72}
73
79inline std::vector<FLOAT_T> ReturnOscParams_Atm() {
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};
81 return OscParams_Atm;
82}
83
89inline std::vector<FLOAT_T> ReturnOscParams_Beam_woYe() {
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;
92}
93
99inline std::vector<FLOAT_T> ReturnOscParams_Beam_wYe() {
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;
102}
103
109inline std::vector<FLOAT_T> ReturnOscParams_Beam_wYe_wDeco() {
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}; //9.48e-18
111 return OscParams_Beam_wYe_wDeco;
112}
113
119inline std::vector<FLOAT_T> ReturnOscParams_Beam_wYe_wLIV() {
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;
122}
123
129inline std::vector<FLOAT_T> ReturnOscParams_Beam_wYe_wNSI() {
130 //6 PMNS params, 6 Epsilons, 3 Deltas, 3 Coupling strengths, baseline, density, A/Z
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;
133}
134
140inline std::vector<std::string> ReturnKnownConfigs() {
141 std::vector<std::string> ConfigNames;
142
143#if UseCUDAProb3 == 1
144 ConfigNames.push_back("./NuOscillatorConfigs/Binned_CUDAProb3.yaml");
145#endif
146
147#if UseCUDAProb3Linear == 1
148 ConfigNames.push_back("./NuOscillatorConfigs/Binned_CUDAProb3Linear.yaml");
149#endif
150
151#if UseProbGPULinear == 1
152 ConfigNames.push_back("./NuOscillatorConfigs/Binned_ProbGPULinear.yaml");
153#endif
154
155#if UseProb3ppLinear == 1
156 ConfigNames.push_back("./NuOscillatorConfigs/Binned_Prob3ppLinear.yaml");
157#endif
158
159#if UseNuFASTLinear == 1
160 ConfigNames.push_back("./NuOscillatorConfigs/Binned_NuFASTLinear.yaml");
161#endif
162
163#if UseNuFASTEarth == 1
164 ConfigNames.push_back("./NuOscillatorConfigs/Binned_NuFASTEarth.yaml");
165#endif
166
167#if UseNuSQUIDSLinear == 1
168 ConfigNames.push_back("./NuOscillatorConfigs/Binned_NuSQUIDSLinear.yaml");
169#endif
170
171#if UseOscProb == 1
172 ConfigNames.push_back("./NuOscillatorConfigs/Binned_OscProb.yaml");
173#endif
174
175#if UseGLoBESLinear == 1
176 ConfigNames.push_back("./NuOscillatorConfigs/Binned_GLoBESLinear.yaml");
177#endif
178
179#if UseCHICLinear == 1
180 ConfigNames.push_back("./NuOscillatorConfigs/Binned_CHICLinear.yaml");
181#endif
182
183 if(ConfigNames.empty()){
184 std::cerr << "I haven't added single config, this could mean you added new engine but forgot about me" << std::endl;
185 throw std::runtime_error("No known configs");
186 }
187 return ConfigNames;
188}
189
195inline int NeutrinoFlavour_StrToInt(const std::string& NuFlav) {
196 if (NuFlav == "Electron" || NuFlav == "electron") {
198 } else if (NuFlav == "Muon" || NuFlav == "muon") {
199 return NuOscillator::kMuon;
200 } else if (NuFlav == "Tau" || NuFlav == "tau") {
201 return NuOscillator::kTau;
202 } else if (NuFlav == "Sterile1" || NuFlav == "sterile1") {
204 } else if (NuFlav == "Sterile2" || NuFlav == "sterile2") {
206 } else if (NuFlav == "Sterile3" || NuFlav == "sterile3") {
208 } else {
209 std::cerr << "Could not convert input string:" << NuFlav << " to known enum value in NeutrinoFlavours" << std::endl;
210 throw std::runtime_error("Invalid setup");
211 }
212
213 return -1;
214}
215
223inline std::string NeutrinoFlavour_IntToStr(const int NuFlav) {
224 switch (NuFlav) {
226 return "Electron";
228 return "Muon";
230 return "Tau";
232 return "Sterile1";
234 return "Sterile2";
236 return "Sterile3";
237 default:
238 std::cerr << "Recieved unknown NeutrinoFlavour:" << NuFlav << " which is inconsistent with those in enum 'NeutrinoFlavours'" << std::endl;
239 throw std::runtime_error("Invalid setup");
240 }
241 return "";
242}
243
251inline int Verbosity_StrToInt(const std::string& Verbosity) {
252 if (Verbosity == "NONE") {
253 return NuOscillator::NONE;
254 } else if (Verbosity == "INFO") {
255 return NuOscillator::INFO;
256 } else if (Verbosity == "VERBOSE") {
258 } else {
259 std::cerr << "Invalid verbosity provided:" << Verbosity << std::endl;
260 throw std::runtime_error("Invalid setup");
261 }
262
263 return -1;
264}
265
273inline NuOscillator::OscillationChannel ReturnOscillationChannel(const std::string& InputString) {
274 std::string GeneratedFlavour = "";
275 std::string DetectedFlavour = "";
276
277 size_t Delimiter = InputString.find(":");
278 if (Delimiter != std::string::npos) {
279 GeneratedFlavour = InputString.substr(0,Delimiter);
280 DetectedFlavour = InputString.substr(Delimiter+1,InputString.size());
281 } else {
282 std::cerr << "Expected a string formatted as: 'GeneratedNeutrinoFlavour:DetectedNeutrinoFlavour'" << std::endl;
283 std::cerr << "Received:" << InputString << std::endl;
284 }
285
286 NuOscillator::OscillationChannel OscChannel = {NeutrinoFlavour_StrToInt(GeneratedFlavour),NeutrinoFlavour_StrToInt(DetectedFlavour)};
287 return OscChannel;
288}
289
298inline std::vector<FLOAT_T> logspace(FLOAT_T Emin, FLOAT_T Emax, int nDiv) {
299 if (nDiv==0) {
300 std::cerr << "Requested log spacing distribution with 0 divisions" << std::endl;
301 throw std::runtime_error("Invalid setup");
302 }
303
304 std::vector<FLOAT_T> logpoints(nDiv+1, 0.0);
305 logpoints[0]=Emin;
306
307 if (Emin == 0.) {
308 Emin = 0.01;
309 }
310
311 FLOAT_T Emin_log,Emax_log;
312 Emin_log = log10(Emin);
313 Emax_log = log10(Emax);
314
315 FLOAT_T step_log = (Emax_log - Emin_log)/FLOAT_T(nDiv);
316
317 FLOAT_T EE = Emin_log+step_log;
318
319 for (int i=1; i<nDiv; i++) {
320 logpoints[i] = pow(10.,EE);
321 EE += step_log;
322 }
323
324 logpoints[nDiv]=Emax;
325
326 return logpoints;
327}
328
337inline std::vector<FLOAT_T> linspace(FLOAT_T Emin, FLOAT_T Emax, int nDiv) {
338 if (nDiv==0) {
339 std::cerr << "Requested linear spacing distribution with 0 divisions" << std::endl;
340 throw std::runtime_error("Invalid setup");
341 }
342
343 std::vector<FLOAT_T> linpoints(nDiv+1, 0.0);
344
345 FLOAT_T step_lin = (Emax - Emin)/FLOAT_T(nDiv);
346
347 FLOAT_T EE = Emin;
348
349 for (int i=0; i<nDiv; i++) {
350 if (fabs(EE)<1e-6) {EE = 0.;}
351
352 linpoints[i] = EE;
353 EE += step_lin;
354 }
355
356 linpoints[nDiv] = Emax;
357
358 return linpoints;
359}
360
369inline std::vector<FLOAT_T> ReadBinEdgesFromFile(const std::string& TFileName, const std::string& HistogramName,
370 const int Verbose=NuOscillator::Verbosity::NONE) {
371 std::vector<FLOAT_T> BinEdges;
372
373 TFile* File = new TFile(TFileName.c_str());
374 if (!File || File->IsZombie()) {
375 std::cerr << "Could not find file:" << TFileName << std::endl;
376 throw std::runtime_error("Invalid input file.");
377 }
378
379 TH1* Histogram = (TH1*)File->Get(HistogramName.c_str());
380 if (!Histogram) {
381 std::cerr << "Could not find Histogram:" << HistogramName << " in File:" << TFileName << std::endl;
382 throw std::runtime_error("Invalid input file.");
383 }
384
385 BinEdges.resize(Histogram->GetNbinsX()+1);
386 for (int iBin=0;iBin<=Histogram->GetNbinsX();iBin++) {
387 BinEdges[iBin] = Histogram->GetBinLowEdge(iBin+1);
388 }
389
390 File->Close();
391 delete File;
392
393 if (Verbose >= NuOscillator::INFO) {
394 std::cout << "Bin edges successfully read from File:" << TFileName << " , Histogram:" << HistogramName << " :=" << std::endl;
395 for (size_t i=0;i<BinEdges.size();i++) {
396 std::cout << BinEdges[i] << ", ";
397 }
398 std::cout << std::endl;
399 }
400
401 return BinEdges;
402}
403
410inline std::vector<FLOAT_T> ReturnBinCentersFromBinEdges(const std::vector<FLOAT_T>& BinEdges) {
411 int nBins = BinEdges.size()-1;
412 std::vector<FLOAT_T> BinCenters = std::vector<FLOAT_T>(nBins);
413
414 for (int iBin=0;iBin<nBins;iBin++) {
415 BinCenters[iBin] = (BinEdges[iBin]+BinEdges[iBin+1])/2.0;
416 }
417
418 return BinCenters;
419}
420
421#endif
int NeutrinoFlavour_StrToInt(const std::string &NuFlav)
Convert a neutrino flavour string to integer.
Definition OscillatorConstants.h:195
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:337
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
std::vector< FLOAT_T > ReturnBinCentersFromBinEdges(const std::vector< FLOAT_T > &BinEdges)
Return the bin centers given the bin edges of a template histogram.
Definition OscillatorConstants.h:410
NuOscillator::OscillationChannel ReturnOscillationChannel(const std::string &InputString)
Take an input string formatted as 'GeneratedNeutrinoFlavour:DetectedNeutrinoFlavour' and return an Nu...
Definition OscillatorConstants.h:273
std::string NeutrinoFlavour_IntToStr(const int NuFlav)
Convert a neutrino flavour integer to string.
Definition OscillatorConstants.h:223
std::vector< FLOAT_T > logspace(FLOAT_T Emin, FLOAT_T Emax, int nDiv)
Generate vector of logarithmically spaced points.
Definition OscillatorConstants.h:298
std::vector< FLOAT_T > ReadBinEdgesFromFile(const std::string &TFileName, const std::string &HistogramName, const int Verbose=NuOscillator::Verbosity::NONE)
Read bin edges from input template histogram.
Definition OscillatorConstants.h:369
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:251
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