MaCh3 2.2.1
Reference Guide
Loading...
Searching...
No Matches
BinnedSplineHandler.h
Go to the documentation of this file.
1#pragma once
2
3//MaCh3 includes
6
8// ROOT includes
9#include "TH3F.h"
11
19 public:
24 virtual ~BinnedSplineHandler();
25
29 void Evaluate();
30
32 void AddSample(const std::string& SampleName,
33 const std::vector<std::string>& OscChanFileNames,
34 const std::vector<std::string>& SplineVarNames);
36 void TransferToMonolith();
38 void cleanUpMemory();
39
42 virtual void FillSampleArray(std::string SampleName, std::vector<std::string> OscChanFileNames);
45 std::vector< std::vector<int> > StripDuplicatedModes(const std::vector< std::vector<int> >& InputVector);
47 std::vector< std::vector<int> > GetEventSplines(const std::string& SampleName, int iOscChan, int EventMode, double Var1Val, double Var2Val, double Var3Val);
48
50 std::vector<TAxis*> FindSplineBinning(const std::string& FileName, const std::string& SampleName);
51
52 int CountNumberOfLoadedSplines(bool NonFlat=false, int Verbosity=0);
53 std::string getDimLabel(const int BinningOpt, const unsigned int Axis) const;
55 int getSampleIndex(const std::string& SampleName) const;
57 bool isValidSplineIndex(const std::string& SampleName, int iSyst, int iOscChan, int iMode, int iVar1, int iVar2, int iVar3);
58
59 void BuildSampleIndexingArray(const std::string& SampleName);
60 void PrepForReweight();
61 void getSplineCoeff_SepMany(int splineindex, M3::float_t *& xArray, M3::float_t *&manyArray);
62 void PrintBinning(TAxis* Axis) const;
64 void PrintSampleDetails(const std::string& SampleName) const;
65 void PrintArrayDetails(const std::string& SampleName) const;
66
68 const M3::float_t* retPointer(const int sample, const int oscchan, const int syst, const int mode,
69 const int var1bin, const int var2bin, const int var3bin) const{
70 int index = indexvec[sample][oscchan][syst][mode][var1bin][var2bin][var3bin];
71 return &weightvec_Monolith[index];
72 }
73
74 protected:
76 void CalcSplineWeights() override;
78 void ModifyWeights() override {return;};
81
82 //And now the actual member variables
83 std::vector<std::string> SampleNames;
84 std::vector<int> Dimensions;
85 std::vector<std::vector<std::string>> DimensionLabels;
86 std::vector<int> nSplineParams;
87 std::vector<int> nOscChans;
88
89 std::vector< std::vector< std::vector<TAxis*> > > SplineBinning;
90 std::vector< std::vector<std::string> > SplineFileParPrefixNames;
94 std::vector< std::vector< std::vector<int> > > SplineModeVecs;
98 std::vector< std::vector<int> > GlobalSystIndex;
101 std::vector< std::vector<SplineInterpolation> > SplineInterpolationTypes;
102
104 std::vector<std::string> UniqueSystNames;
106 std::vector<int> UniqueSystIndices;
107
109 std::vector< std::vector< std::vector< std::vector< std::vector< std::vector< std::vector< int > > > > > > > indexvec;
110 std::vector<int > coeffindexvec;
112 std::vector<int> uniquecoeffindices;
113
115 std::vector< TSpline3_red* > splinevec_Monolith;
116
120
127
129 std::vector<M3::float_t> weightvec_Monolith;
131 std::vector<int> uniquesplinevec_Monolith;
132
136 virtual std::vector<std::string> GetTokensFromSplineName(std::string FullSplineName) = 0;
137};
#define _MaCh3_Safe_Include_Start_
KS: Avoiding warning checking for headers.
Definition: Core.h:106
#define _MaCh3_Safe_Include_End_
KS: Restore warning checking after including external headers.
Definition: Core.h:117
Bin-by-bin class calculating response for spline parameters.
void getSplineCoeff_SepMany(int splineindex, M3::float_t *&xArray, M3::float_t *&manyArray)
std::string getDimLabel(const int BinningOpt, const unsigned int Axis) const
void Evaluate()
CW: This Eval should be used when using two separate x,{y,a,b,c,d} arrays to store the weights; proba...
bool * isflatarray
Need to keep track of which splines are flat and which aren't.
const M3::float_t * retPointer(const int sample, const int oscchan, const int syst, const int mode, const int var1bin, const int var2bin, const int var3bin) const
get pointer to spline weight based on bin variables
int CountNumberOfLoadedSplines(bool NonFlat=false, int Verbosity=0)
std::vector< std::vector< std::vector< std::vector< std::vector< std::vector< std::vector< int > > > > > > > indexvec
Variables related to determined which modes have splines and which piggy-back of other modes.
std::vector< std::vector< std::string > > SplineFileParPrefixNames
void CalcSplineWeights() override
CPU based code which eval weight for each spline.
std::vector< std::vector< int > > GetEventSplines(const std::string &SampleName, int iOscChan, int EventMode, double Var1Val, double Var2Val, double Var3Val)
Return the splines which affect a given event.
std::vector< int > coeffindexvec
void cleanUpMemory()
Remove setup variables not needed for spline evaluations.
void PrintBinning(TAxis *Axis) const
ParameterHandlerGeneric * xsec
Pointer to covariance from which we get information about spline params.
virtual std::vector< std::string > GetTokensFromSplineName(std::string FullSplineName)=0
std::vector< TAxis * > FindSplineBinning(const std::string &FileName, const std::string &SampleName)
Grab histograms with spline binning.
std::vector< int > nSplineParams
void ModifyWeights() override
Calc total event weight, not used by Bin-by-bin splines.
std::vector< std::vector< std::vector< int > > > SplineModeVecs
std::vector< int > nOscChans
M3::float_t * xcoeff_arr
x coefficients for each spline
std::vector< std::string > UniqueSystNames
name of each spline parameter
int getSampleIndex(const std::string &SampleName) const
Get index of sample based on name.
void AddSample(const std::string &SampleName, const std::vector< std::string > &OscChanFileNames, const std::vector< std::string > &SplineVarNames)
add oscillation channel to spline monolith
std::vector< std::vector< SplineInterpolation > > SplineInterpolationTypes
spline interpolation types for each sample. These vectors are from a call to GetSplineInterpolationFr...
std::vector< int > Dimensions
std::vector< int > uniquesplinevec_Monolith
Maps single spline object with single parameter.
void PrintArrayDetails(const std::string &SampleName) const
std::vector< std::vector< int > > StripDuplicatedModes(const std::vector< std::vector< int > > &InputVector)
Check if there are any repeated modes. This is used to reduce the number of modes in case many intera...
std::vector< M3::float_t > weightvec_Monolith
Stores weight from spline evaluation for each single spline.
void BuildSampleIndexingArray(const std::string &SampleName)
std::vector< std::vector< std::string > > DimensionLabels
std::vector< std::vector< std::vector< TAxis * > > > SplineBinning
virtual void FillSampleArray(std::string SampleName, std::vector< std::string > OscChanFileNames)
Loads and processes splines from ROOT files for a given sample.
std::vector< TSpline3_red * > splinevec_Monolith
holds each spline object before stripping into coefficient monolith
std::vector< int > uniquecoeffindices
Unique coefficient indices.
MaCh3Modes * Modes
pointer to MaCh3 Mode from which we get spline suffix
std::vector< std::vector< int > > GlobalSystIndex
This holds the global spline index and is used to grab the current parameter value to evaluate spline...
void PrintSampleDetails(const std::string &SampleName) const
Print info like Sample ID of spline params etc.
virtual ~BinnedSplineHandler()
Destructor.
std::vector< std::string > SampleNames
void TransferToMonolith()
flatten multidimensional spline array into proper monolith
std::vector< int > UniqueSystIndices
Global index of each spline param, it allows us to match spline ordering with global.
bool isValidSplineIndex(const std::string &SampleName, int iSyst, int iOscChan, int iMode, int iVar1, int iVar2, int iVar3)
Ensure we have spline for a given bin.
M3::float_t * manycoeff_arr
ybcd coefficients for each spline
KS: Class describing MaCh3 modes used in the analysis, it is being initialised from config.
Definition: MaCh3Modes.h:41
Class responsible for handling of systematic error parameters with different types defined in the con...
Base class for calculating weight from spline.
Definition: SplineBase.h:25
double float_t
Definition: Core.h:28