![]() |
NuOscillator
|
Oscillation calculation engine (CUDAProb3, ProbGPU, Prob3++, etc.) implementation agnostic base class. More...
#include <OscProbCalcerBase.h>
Public Member Functions | |
| virtual | ~OscProbCalcerBase () |
| Destructor. | |
| void | SetEnergyArray (std::vector< FLOAT_T > EnergyArray) |
| Define the Energy which will be used when calculating the oscillation probabilities. | |
| void | SetCosineZArray (std::vector< FLOAT_T > CosineZArray) |
| Define the CosineZ which will be used when calculating the oscillation probabilities. | |
| const FLOAT_T * | ReturnPointerToWeight (int InitNuFlav, int FinalNuFlav, FLOAT_T Energy, FLOAT_T CosineZ=DUMMYVAL) |
| Return pointer to the weight array for a specific Energy and CosineZ. | |
| void | Reweight () |
| General function used to call the oscillation probability calculation. | |
| void | DefineParameter (const std::string &ParName, FLOAT_T *ParValue) |
| Function to register an oscillation parameter name and pointer to a value that will be used when calculating the oscillation probabilities. | |
| void | Reweight (const std::vector< FLOAT_T > &OscParams_) |
| Legacy implementation function of Reweight() | |
| void | Setup () |
| General function used to setup all variables used within the reweighting. | |
| bool | SanityCheck () |
| Ensures that the specific implementation has been correctly initialised. | |
| void | PrintWeights () |
| Print the calculated oscillation probabilities. | |
| void | PrintKnownOscillationChannels () |
| Print the oscillation channels which a particular instance has been configured with. | |
| bool | HasOscillationChannel (int GeneratedFlavour, int DetectedFlavour) |
| Check whether a particular oscillation channel has been configured in a particular instance of OscProbCalcerBase::OscProbCalcerBase() | |
| int | ReturnNOscParams () |
| Return the number of oscillation parameters the specific implementation expects. | |
| std::vector< NuOscillator::OscillationChannel > | ReturnOscChannels () |
| Return the oscillation channels the specific implementation expects. | |
| std::vector< int > | ReturnNeutrinoTypes () |
| Return the neutrino types the specific implementation expects. | |
| std::vector< FLOAT_T > | ReturnOscParamsCurr () |
| Return the oscillation parameters which were used for the last calculation. | |
| int | ReturnNEnergyPoints () |
| Return the number of Energy points which are being used by the specific instance of OscProbCalcerBase::OscProbCalcerBase() | |
| int | ReturnNCosineZPoints () |
| Return the number of CosineZ points which are being used by the specific instance of OscProbCalcerBase::OscProbCalcerBase() | |
| std::vector< FLOAT_T > | ReturnEnergyArray () |
| Return the vector of Energy points which are being used by the specific instance of OscProbCalcerBase::OscProbCalcerBase() | |
| std::vector< FLOAT_T > | ReturnCosineZArray () |
| Return the vector of CosineZ points which are being used by the specific instance of OscProbCalcerBase::OscProbCalcerBase() | |
| std::string | ReturnImplementationName () |
| Return the specific implementation name. | |
| bool | ReturnCosineZIgnored () |
| Return a boolean which describes whether the specific implementation cares about CosineZ. | |
| int | ReturnNWeights () |
| Return the number of oscillation probabilities that are being calculated. | |
| std::vector< FLOAT_T > | ReturnWeightArray () |
| Return the vector of oscillation probabilites which have been calculated. | |
| std::vector< NuOscillator::OscillationProbability > | ReturnProbabilities () |
| Return vector of oscillation probabilities with associated neutrin type, oscillation channel, Energy and CosineZ. | |
| bool | ReturnHasSetEnergyArray () |
| Return whether the instance of OscProbCalcerBase() has already been assigned the Energy binning. | |
| bool | ReturnHasSetCosineZArray () |
| Return whether the instance of OscProbCalcerBase() has already been assigned the CosineZ binning. | |
| int | ReturnNuTypeFromFlavour (int NuFlav) |
| Return the index in fNeutrinoTypes for a particular neutrino flavour (neutrino or antineutrino) | |
| void | PrintOscParamsCurr () |
| Print current oscillation parameters. | |
Protected Member Functions | |
| OscProbCalcerBase (YAML::Node InputConfig_) | |
| Default constructor. | |
| OscProbCalcerBase (std::string ConfigName_) | |
| Wrapper Construct. | |
| void | IgnoreCosineZBinning (bool Ignore) |
| Some implementations don't care about the CosineZ values, so this is a method to set fCosineZArraySet to true in those cases. | |
| bool | AreOscParamsChanged () |
| Check whether the oscillation parameters have changed since their previous value. | |
| void | SetCurrOscParams () |
| Save the oscillation parameters which have been requested. | |
| void | ResetCurrOscParams () |
| (Re-)Initialise the saved oscillation parameters in fOscParamsCurr | |
| void | InitialiseNeutrinoTypesArray (int Size) |
| Initialise the fNeutrinoTypes mapping array to a particular size with dummy values. | |
| void | InitialiseOscillationChannelMapping () |
| Read the [OscProbCalcerSetup][Implementation][OscChannelMapping] YAML node and configure fOscillationChannels. | |
| void | CheckNuFlavourMapping () |
| Check that the NuType/NuFlav mapping is set correctly based on the inputs from the particular implementation. | |
| void | IntialiseWeightArray () |
| Initialise the array in which the oscillation probabilities will be stored with dummy values. | |
| void | SanitiseProbabilities () |
| Ensure that the oscillation probabilities are within [0.,1.] range, if not throw error. | |
| int | ReturnCosineZIndexFromValue (FLOAT_T CosineZVal) |
| Return the index in fCosineZArray for a particular value of CosineZ. If it's not found, throws an error. | |
| int | ReturnEnergyIndexFromValue (FLOAT_T EnergyVal) |
| Return the index in fEnergyArray for a particular value of Energy. If it's not found, throws an error. | |
| int | ReturnOscChannelIndexFromFlavours (int InitNuFlav, int FinalNuFlav) |
| Loop through fOscillationChannels and determine which index corresponds to the requested flavours. | |
| void | SetExpectedParameterNames (const std::vector< std::string > &ExpectedOscParNames_) |
| Define the list of parameter names that a particular instance of OscProbCalcer expects. | |
| void | PrintExpectedParameterNames () |
| Print the expected parameter names. | |
| FLOAT_T | GetOscillationParameter (int Index) |
| Return the value of the oscillation parameter associated with the index. | |
| void | CheckOscillationParametersDefined () |
| Check that all the expected oscillation parameters have been assigned a value. | |
| virtual void | CalculateProbabilities ()=0 |
| Calculate some oscillation probabilities for a particular oscillation parameter set. | |
| virtual void | SetupPropagator ()=0 |
| Setup any implementation specific variables/functions. | |
| virtual int | ReturnWeightArrayIndex (int NuTypeIndex, int OscChanIndex, int EnergyIndex, int CosineZIndex=-1)=0 |
| Return the index in the weight array for a specific combination of neutrino oscillation channel, energy and cosine zenith. | |
| virtual long | DefineWeightArraySize ()=0 |
| Define the size of fWeightArray. | |
Protected Attributes | |
| int | fNNeutrinoTypes |
| The number of neutrino types (neutrino and antineutrino) | |
| std::vector< int > | fNeutrinoTypes |
| The mapping of neutrino types to uniquely defined integers (i.e. index) | |
| int | fNOscillationChannels |
| The number of oscillation channels which have been configured. | |
| std::vector< NuOscillator::OscillationChannel > | fOscillationChannels |
| The mapping of oscillation channels which have been requested from the YAML config. | |
| int | fNEnergyPoints |
| The number of Energy points which are being evaluated by the oscillation probability engine. | |
| int | fNCosineZPoints |
| The number of CosineZ points which are being evaluated by the oscillation probability engine. | |
| std::vector< FLOAT_T > | fEnergyArray |
| The vector of Energy values being evaluated by the oscillation probability engine. | |
| std::vector< FLOAT_T > | fCosineZArray |
| The vector of CosineZ values being evaluated by the oscillation probability engine. | |
| int | fNWeights |
| The number of oscillation probabilities being calculated. | |
| std::vector< FLOAT_T > | fWeightArray |
| Vector which stores the oscillation probabilities. | |
| int | fVerbose |
| Define the verbosity of the console output. | |
| std::string | fImplementationName |
| Define the implementation name - Can be used for recasting later (similar to TObject::InheritsFrom() etc.) | |
| bool | fCosineZIgnored |
| Flag to define whether the CosineZ binning has been ignored in the specific implementation. | |
| YAML::Node | Config |
| YAML Config object used to get runtime specific variables. | |
Private Attributes | |
| bool | fEnergyArraySet |
| Boolean declaring whether the Energy array has been set. | |
| bool | fCosineZArraySet |
| Boolean declaring whether the CosineZ array has been set. | |
| bool | fPropagatorSet |
| Boolean declaring whether the specific propagator SetupPropagator() function has been called. | |
| bool | fWeightArrayInit |
| Boolean declaring whether fWeightArray has been initialised correctly. | |
| bool | fNuMappingSet |
| Boolean declaring whether fNeutrinoTypes and fOscillationChannels have been initialised correctly. | |
| FLOAT_T | PrecisionLimit |
| Precision limit which allows a slight unphysical probability to pass the SanitiseProbabilities check. | |
| int | fNOscParams |
| Store the oscillation parameter set used to calculate the previous and current probabilities. | |
| std::vector< FLOAT_T > | fOscParamsCurr |
| Vector which stores the saved oscillation probabilities. | |
| std::vector< FLOAT_T * > | fOscParams |
| Vector of pointers to oscillation parameter values. | |
| std::vector< std::string > | fExpectedOscillationParameterNames |
| Vector of expected oscillation parameter names. | |
| std::vector< bool > | fOscillationParametersSetCheck |
| Check to determine which of the expected oscillation parameters have been registered. | |
| bool | fUseLegacyMode |
| Check to determine if LegacyMode has been requested. | |
| bool | fUseLegacyMode_OscParsSet |
| Check to determine in Reweight(std::vector<FLOAT_T> OscParams) has been called. | |
| bool | fNoSanity |
| Boolean declaring whether the SanitiseProbabilities function should be called in the Reweight function. This should only be used for performance sensitive applications as when this is false, oscillation probabilities could be returned which are <0, >1, or nan. | |
Oscillation calculation engine (CUDAProb3, ProbGPU, Prob3++, etc.) implementation agnostic base class.
|
virtual |
Destructor.
|
protected |
Default constructor.
It is protected to prevent initialisation of base class
| Config_ | YAML::Node used to define the object |
|
inlineprotected |
Wrapper Construct.
If only a file path of a config has been specified, create a YAML::Node and then continue with the default constructor
| ConfigName_ | Name of YAML config used to set runtime variables |
|
protected |
Check whether the oscillation parameters have changed since their previous value.
We can save a fairly expensive calculation by checking whether the oscillation parameters have been updated since the last call to CalculateProbabilities() , for the price of a couple of if statements. Whilst in normal MCMC running, this will almost always return true, for sigma variations of systematics, this will almost always return false
|
protectedpure virtual |
Calculate some oscillation probabilities for a particular oscillation parameter set.
Calculator engine specific implementation to calculate the oscillation probabilties for the given oscillation parameters. This function both calculates and stores the oscillation probabilities in fWeightArray.
| OscParams | The parameter set to calculate oscillation probabilities at |
Implemented in OscProbCalcerCHIC, OscProbCalcerCUDAProb3, OscProbCalcerCUDAProb3Linear, OscProbCalcerGLoBESLinear, OscProbCalcerNuFASTEarth, OscProbCalcerNuFASTLinear, OscProbCalcerNuSQUIDSLinear, OscProbCalcerOscLibLinear, OscProbCalcerOscProb, OscProbCalcerProb3pp, and OscProbCalcerProbGPULinear.
|
protected |
Check that the NuType/NuFlav mapping is set correctly based on the inputs from the particular implementation.
Ensures that the mapping variables (fNeutrinoTypes, fOscillationChannels) are the expected size and filled with reasonable values
|
protected |
Check that all the expected oscillation parameters have been assigned a value.
| void OscProbCalcerBase::DefineParameter | ( | const std::string & | ParName, |
| FLOAT_T * | ParValue ) |
Function to register an oscillation parameter name and pointer to a value that will be used when calculating the oscillation probabilities.
| ParName | Parameter name that will be checked against expected parameters |
| ParValue | Pointer to value of parameter |
|
protectedpure virtual |
Define the size of fWeightArray.
This is implementation specific because some propagators calculate all oscillation channels together, whilst others calculate only a single oscillation channel.
Implemented in OscProbCalcerCHIC, OscProbCalcerCUDAProb3, OscProbCalcerCUDAProb3Linear, OscProbCalcerGLoBESLinear, OscProbCalcerNuFASTEarth, OscProbCalcerNuFASTLinear, OscProbCalcerNuSQUIDSLinear, OscProbCalcerOscLibLinear, OscProbCalcerOscProb, OscProbCalcerProb3pp, and OscProbCalcerProbGPULinear.
|
protected |
Return the value of the oscillation parameter associated with the index.
| Index | Index of parameter to return value for |
| bool OscProbCalcerBase::HasOscillationChannel | ( | int | GeneratedFlavour, |
| int | DetectedFlavour ) |
Check whether a particular oscillation channel has been configured in a particular instance of OscProbCalcerBase::OscProbCalcerBase()
| GeneratedFlavour | Generated flavour of the questioned oscillation channel |
| DetectedFlavour | Detected flavour of the questioned oscillation channel |
|
protected |
Some implementations don't care about the CosineZ values, so this is a method to set fCosineZArraySet to true in those cases.
If the specific implementation does not include atmospheric implementations, then fCosineZArraySet should be set to true such that the Sanity check passes. Also sets fCosineZIgnored to be true if it should be ignored.
| Ignore | A boolean which declares whether the CosineZ dimension should be ignored. |
|
protected |
Initialise the fNeutrinoTypes mapping array to a particular size with dummy values.
| Size | Size of array to initialise |
|
protected |
Read the [OscProbCalcerSetup][Implementation][OscChannelMapping] YAML node and configure fOscillationChannels.
|
protected |
Initialise the array in which the oscillation probabilities will be stored with dummy values.
|
inlineprotected |
Print the expected parameter names.
| void OscProbCalcerBase::PrintKnownOscillationChannels | ( | ) |
Print the oscillation channels which a particular instance has been configured with.
| void OscProbCalcerBase::PrintOscParamsCurr | ( | ) |
Print current oscillation parameters.
Prints the current oscillation parameters which have been used in the calculation
| void OscProbCalcerBase::PrintWeights | ( | ) |
Print the calculated oscillation probabilities.
|
protected |
(Re-)Initialise the saved oscillation parameters in fOscParamsCurr
|
inline |
Return the vector of CosineZ points which are being used by the specific instance of OscProbCalcerBase::OscProbCalcerBase()
|
inline |
Return a boolean which describes whether the specific implementation cares about CosineZ.
|
protected |
Return the index in fCosineZArray for a particular value of CosineZ. If it's not found, throws an error.
Determine the index in fCosineZArray for a particular value of CosineZ
| CosineZVal | Value to search for |
|
inline |
Return the vector of Energy points which are being used by the specific instance of OscProbCalcerBase::OscProbCalcerBase()
|
protected |
Return the index in fEnergyArray for a particular value of Energy. If it's not found, throws an error.
Determine the index in fEnergyArray for a particular value of Energy
| EnergyVal | Value to search for |
|
inline |
Return whether the instance of OscProbCalcerBase() has already been assigned the CosineZ binning.
|
inline |
Return whether the instance of OscProbCalcerBase() has already been assigned the Energy binning.
|
inline |
Return the specific implementation name.
|
inline |
Return the number of CosineZ points which are being used by the specific instance of OscProbCalcerBase::OscProbCalcerBase()
|
inline |
Return the number of Energy points which are being used by the specific instance of OscProbCalcerBase::OscProbCalcerBase()
|
inline |
Return the neutrino types the specific implementation expects.
|
inline |
Return the number of oscillation parameters the specific implementation expects.
| int OscProbCalcerBase::ReturnNuTypeFromFlavour | ( | int | NuFlav | ) |
Return the index in fNeutrinoTypes for a particular neutrino flavour (neutrino or antineutrino)
Neutrino flavour mapping is defined in fNeutrinoTypes, so for a particular events flavour, the index in the mapping is returned to aide in fWeightArray mapping
| NuFlav | Initial neutrino type (neutrino or antineutrino) |
|
inline |
Return the number of oscillation probabilities that are being calculated.
|
protected |
Loop through fOscillationChannels and determine which index corresponds to the requested flavours.
| InitNuFlav | Generated neutrino flavour to search for |
| FinalNuFlav | Detected neutrino flavour to search for |
|
inline |
Return the oscillation channels the specific implementation expects.
|
inline |
Return the oscillation parameters which were used for the last calculation.
| const FLOAT_T * OscProbCalcerBase::ReturnPointerToWeight | ( | int | InitNuFlav, |
| int | FinalNuFlav, | ||
| FLOAT_T | Energy, | ||
| FLOAT_T | CosineZ = DUMMYVAL ) |
Return pointer to the weight array for a specific Energy and CosineZ.
The specific calculation engine will calculate an oscillation probability for a particular initial and final neutrino flavour, neutrino Energy and CosineZ and stores it in fWeightArray. This function returns a pointer to the correct index in fWeightArray for the given inputs
| InitNuFlav | Initial neutrino flavour of the neutrino |
| FinalNuFlav | Final neutrino flavour of the neutrino |
| Energy | True energy of the neutrino |
| CosineZ | True direction of the neutrino in CosineZ |
| std::vector< NuOscillator::OscillationProbability > OscProbCalcerBase::ReturnProbabilities | ( | ) |
Return vector of oscillation probabilities with associated neutrin type, oscillation channel, Energy and CosineZ.
This uses the OscillationProbability struct
|
inline |
Return the vector of oscillation probabilites which have been calculated.
|
protectedpure virtual |
Return the index in the weight array for a specific combination of neutrino oscillation channel, energy and cosine zenith.
Depending upon the specific implementation, there maybe different ways to calculate the oscillation probabilites (i.e. all oscillation channels at once or seperately). This function allows a mapping between the neutrino flavour to calculate for (along with Energy and CosineZ) to the index in fWeightArray.
| NuTypeIndex | The index in fNeutrinoTypes (neutrino/antinuetrino) to return the pointer for |
| OscChanIndex | The index in fOscillationChannels to return the pointer for |
| EnergyIndex | The index in fEnergyArray to return the pointer for |
| CosineZIndex | The index in fCosineZArray to return the pointer for |
Implemented in OscProbCalcerCHIC, OscProbCalcerCUDAProb3, OscProbCalcerCUDAProb3Linear, OscProbCalcerGLoBESLinear, OscProbCalcerNuFASTEarth, OscProbCalcerNuFASTLinear, OscProbCalcerNuSQUIDSLinear, OscProbCalcerOscLibLinear, OscProbCalcerOscProb, OscProbCalcerProb3pp, and OscProbCalcerProbGPULinear.
| void OscProbCalcerBase::Reweight | ( | ) |
General function used to call the oscillation probability calculation.
This function performs both the implementation specific CalculateProbabilities() function, along with checking whether the oscillation parameters have been updated since the last call. It also calls SanitiseProbabilities().
| void OscProbCalcerBase::Reweight | ( | const std::vector< FLOAT_T > & | OscParams_ | ) |
Legacy implementation function of Reweight()
| OscParams_ | Input oscillation parameters |
|
protected |
Ensure that the oscillation probabilities are within [0.,1.] range, if not throw error.
| bool OscProbCalcerBase::SanityCheck | ( | ) |
Ensures that the specific implementation has been correctly initialised.
Checks that the Energy and CosineZ arrays have been passed to the OscProbCalcerBase::OscProbCalcerBase() object, the neutrino flavour mapping, weight array and propagator has also been initialised
| void OscProbCalcerBase::SetCosineZArray | ( | std::vector< FLOAT_T > | CosineZArray | ) |
Define the CosineZ which will be used when calculating the oscillation probabilities.
| CosineZArray | The CosineZ array which will be used by the calculation engine |
|
protected |
Save the oscillation parameters which have been requested.
Save the oscillation parameters which have been used in the probability calculation to fOscParamsCurr
| void OscProbCalcerBase::SetEnergyArray | ( | std::vector< FLOAT_T > | EnergyArray | ) |
Define the Energy which will be used when calculating the oscillation probabilities.
| EnergyArray | The Energy array which will be used by the calculation engine |
|
inlineprotected |
Define the list of parameter names that a particular instance of OscProbCalcer expects.
| ExpectedOscParNames_ | List of parameter names |
| void OscProbCalcerBase::Setup | ( | ) |
General function used to setup all variables used within the reweighting.
Ensures that the Energy and CosineZ arrays have been set correctly, along with initialising the saved oscillation parameters and weight array (via. ResetCurrOscParams() and IntialiseWeightArray() ). Then sets the propagator specific implementation SetupPropagator()
|
protectedpure virtual |
Setup any implementation specific variables/functions.
Calculator engine specific implementation to setup any variables needed to calculate the oscillation probabilities
Implemented in OscProbCalcerCHIC, OscProbCalcerCUDAProb3, OscProbCalcerCUDAProb3Linear, OscProbCalcerGLoBESLinear, OscProbCalcerNuFASTEarth, OscProbCalcerNuFASTLinear, OscProbCalcerNuSQUIDSLinear, OscProbCalcerOscLibLinear, OscProbCalcerOscProb, OscProbCalcerProb3pp, and OscProbCalcerProbGPULinear.
|
protected |
YAML Config object used to get runtime specific variables.
|
protected |
The vector of CosineZ values being evaluated by the oscillation probability engine.
|
private |
Boolean declaring whether the CosineZ array has been set.
|
protected |
Flag to define whether the CosineZ binning has been ignored in the specific implementation.
|
protected |
The vector of Energy values being evaluated by the oscillation probability engine.
|
private |
Boolean declaring whether the Energy array has been set.
|
private |
Vector of expected oscillation parameter names.
|
protected |
Define the implementation name - Can be used for recasting later (similar to TObject::InheritsFrom() etc.)
|
protected |
The number of CosineZ points which are being evaluated by the oscillation probability engine.
|
protected |
The number of Energy points which are being evaluated by the oscillation probability engine.
|
protected |
The mapping of neutrino types to uniquely defined integers (i.e. index)
|
protected |
The number of neutrino types (neutrino and antineutrino)
|
private |
Boolean declaring whether the SanitiseProbabilities function should be called in the Reweight function. This should only be used for performance sensitive applications as when this is false, oscillation probabilities could be returned which are <0, >1, or nan.
|
protected |
The number of oscillation channels which have been configured.
|
private |
Store the oscillation parameter set used to calculate the previous and current probabilities.
|
private |
Boolean declaring whether fNeutrinoTypes and fOscillationChannels have been initialised correctly.
|
protected |
The number of oscillation probabilities being calculated.
|
protected |
The mapping of oscillation channels which have been requested from the YAML config.
|
private |
Check to determine which of the expected oscillation parameters have been registered.
|
private |
Vector of pointers to oscillation parameter values.
|
private |
Vector which stores the saved oscillation probabilities.
|
private |
Boolean declaring whether the specific propagator SetupPropagator() function has been called.
|
private |
Check to determine if LegacyMode has been requested.
|
private |
Check to determine in Reweight(std::vector<FLOAT_T> OscParams) has been called.
|
protected |
Define the verbosity of the console output.
|
protected |
Vector which stores the oscillation probabilities.
|
private |
Boolean declaring whether fWeightArray has been initialised correctly.
|
private |
Precision limit which allows a slight unphysical probability to pass the SanitiseProbabilities check.