4#include "Oscillator/OscillatorFactory.h"
5#include "Constants/OscillatorConstants.h"
10 std::vector<const double*> OscParams_,
const int SubChannels) {
14 auto OscillFactory = std::make_unique<OscillatorFactory>();
24 [](
const std::string& message) {
MACH3LOG_INFO(
"{}", message); },
25 [
this, &OscillFactory, &NuOscillatorConfigFile]() {
26 this->
NuOscProbCalcers[0] = std::unique_ptr<OscillatorBase>(OscillFactory->CreateOscillator(NuOscillatorConfigFile));
30 MACH3LOG_ERROR(
"Attempted to use equal binning per oscillation channel, but not binning has been set in the NuOscillator::Oscillator object");
36 for (
int iSample = 0; iSample < SubChannels; iSample++) {
37 MACH3LOG_INFO(
"Setting up NuOscillator::Oscillator object in OscillationChannel: {}/{}", iSample, SubChannels);
40 [](
const std::string& message) {
MACH3LOG_INFO(
"{}", message); },
41 [
this, iSample, &OscillFactory, &NuOscillatorConfigFile]() {
43 OscillFactory->CreateOscillator(NuOscillatorConfigFile));
58 std::vector<M3::float_t> OscVec(
OscParams.size());
59 for (
size_t iPar = 0; iPar <
OscParams.size(); ++iPar) {
60 #pragma GCC diagnostic push
61 #pragma GCC diagnostic ignored "-Wuseless-cast"
63 #pragma GCC diagnostic pop
84 if(TrueCosZenith != -999) {
85 return NuOscProbCalcers[Index]->ReturnWeightPointer(InitFlav ,FinalFlav, TrueEnu, TrueCosZenith);
87 return NuOscProbCalcers[Index]->ReturnWeightPointer(InitFlav ,FinalFlav, TrueEnu);
97 if(CosineZArray.size() != 0)
NuOscProbCalcers[Channel]->SetCosineZArrayInCalcer(CosineZArray);
#define _MaCh3_Safe_Include_Start_
KS: Avoiding warning checking for headers.
#define _MaCh3_Safe_Include_End_
KS: Restore warning checking after including external headers.
void LoggerPrint(const std::string &LibName, LogFunc logFunction, Func &&func, Args &&... args)
KS: This is bit convoluted but this is to allow redirecting cout and errors from external library int...
Custom exception class for MaCh3 errors.
void Evaluate()
DB Evaluate oscillation weights for each defined event/bin.
virtual ~OscillationHandler()
Destructor.
OscillationHandler(const std::string &ConfigFile, bool EqualBinningPerChannel, std::vector< const double * > OscParams_, const int SubChannels)
Constructor.
const M3::float_t * GetNuOscillatorPointers(int Channel, int InitFlav, int FinalFlav, FLOAT_T TrueEnu, FLOAT_T TrueCosZenith=-999)
Get pointer to oscillation weight.
std::vector< std::unique_ptr< OscillatorBase > > NuOscProbCalcers
DB Variables required for oscillation.
void SetOscillatorBinning(const int Channel, const std::vector< M3::float_t > &EnergyArray, const std::vector< M3::float_t > &CosineZArray)
Setup binning, arrays correspond to events and their energy bins.
std::vector< const double * > OscParams
pointer to osc params, since not all params affect every sample, we perform some operations before ha...
bool EqualBinningPerOscChannel
flag used to define whether all oscillation channels have a probability calculated using the same bin...