MaCh3  2.8.0
Reference Guide
BinnedSplineHandler.h
Go to the documentation of this file.
1 #pragma once
2 
3 //MaCh3 includes
4 #include "Splines/SplineBase.h"
5 #include "Manager/MaCh3Modes.h"
6 
12  public:
14  BinnedSplineHandler(ParameterHandlerGeneric *ParamHandler, MaCh3Modes *Modes_, const bool Use_GPU = true);
16  virtual ~BinnedSplineHandler();
17 
19  void Evaluate() final;
20 
22  void AddSample(const std::string& SampleName,
23  const std::string& SampleTitle,
24  const std::vector<std::string>& OscChanFileNames,
25  const std::vector<std::string>& SplineVarNames);
27  void TransferToMonolith();
29  void CleanUpMemory();
30 
33  virtual void FillSampleArray(const std::string& SampleTitle, const std::vector<std::string>& OscChanFileNames);
35  std::vector<SplineIndex> GetEventSplines(const std::string& SampleTitle, int iOscChan, int EventMode, const std::vector<double>& VarVals);
37  int CountNumberOfLoadedSplines(bool NonFlat=false, int Verbosity=0) const;
38 
40  const M3::float_t* RetPointer(const SplineIndex& Variables) const;
42  void PrepareSplineFile(std::string FileName) final;
44  void LoadSplineFile(std::string FileName) final;
45 
46  protected:
48  void CalcSplineWeights() final;
50  void PrepForReweight();
52  void BuildSampleIndexingArray(const std::string& SampleTitle);
54  std::vector<TAxis*> FindSplineBinning(const std::string& FileName, const std::string& SampleTitle);
55 
57  void PrintBinning(TAxis* Axis) const;
59  void PrintSampleDetails(const std::string& SampleTitle) const;
61  void PrintArrayDetails(const std::string& SampleTitle) const;
64  int GetSampleIndex(const std::string& SampleTitle) const;
66  bool isValidSplineIndex(const std::string& SampleTitle, int iSyst, int iOscChan, int iMode, const std::vector<int>& iVar) const;
70  std::vector< std::vector<int> > StripDuplicatedModes(const std::vector< std::vector<int> >& InputVector) const;
72  void GetSplineCoeff_SepMany(int splineindex, M3::float_t *& xArray, M3::float_t *&manyArray);
73 
76 
77  //And now the actual member variables
78  std::vector<std::string> SampleNames;
79  std::vector<std::string> SampleTitles;
80  std::vector<int> Dimensions;
81  std::vector<std::vector<std::string>> DimensionLabels;
82  std::vector<int> nSplineParams;
83  std::vector<int> nOscChans;
85  std::vector< std::vector< std::vector<TAxis*> > > SplineBinning;
87  std::vector< std::vector<std::string> > SplineFileParPrefixNames;
91  std::vector< std::vector< std::vector<int> > > SplineModeVecs;
95  std::vector< std::vector<int> > GlobalSystIndex;
98  std::vector< std::vector<SplineInterpolation> > SplineInterpolationTypes;
99 
101  std::vector<std::string> UniqueSystNames;
103  std::vector<int> UniqueSystIndices;
104 
106  std::vector<SplineIndex> IndexVect;
108  std::map<std::tuple<int, int, int, int, std::vector<int>>, int> IndexVectMap;
110  std::vector<unsigned int> nKnots_arr;
111 
113  std::vector< TSpline3_red* > splinevec_Monolith;
114 
115  unsigned int MonolithIndex;
117 
119  std::vector<int> monolith_index;
124 
126  std::vector<M3::float_t> cpu_spline_weights;
128  std::vector<short int> paramNo_arr;
129 
135  virtual std::vector<std::string> GetTokensFromSplineName(const std::string& FullSplineName) = 0;
136 
137  private:
139  void MoveToGPU();
141  void InvestigateMissingSplines() const;
144  void LoadSettingsDir(std::unique_ptr<TFile>& SplineFile);
147  void LoadMonolithDir(std::unique_ptr<TFile>& SplineFile);
150  void LoadIndexDir(std::unique_ptr<TFile>& SplineFile);
151 
154  void PrepareSettingsDir(std::unique_ptr<TFile>& SplineFile) const;
157  void PrepareMonolithDir(std::unique_ptr<TFile>& SplineFile) const;
160  void PrepareIndexDir(std::unique_ptr<TFile>& SplineFile) const;
163  void PrepareOtherInfoDir(std::unique_ptr<TFile>& SplineFile) const;
164 };
Bin-by-bin class calculating response for spline parameters.
bool isValidSplineIndex(const std::string &SampleTitle, int iSyst, int iOscChan, int iMode, const std::vector< int > &iVar) const
Ensure we have spline for a given bin.
virtual void FillSampleArray(const std::string &SampleTitle, const std::vector< std::string > &OscChanFileNames)
Loads and processes splines from ROOT files for a given sample.
std::vector< short int > paramNo_arr
CW: CPU array with the number of points per spline (not per spline point!)
void LoadIndexDir(std::unique_ptr< TFile > &SplineFile)
KS: Load preprocessed Index.
ParameterHandlerGeneric * ParHandler
Pointer to covariance from which we get information about spline params.
void CalcSplineWeights() final
CPU based code which eval weight for each spline.
std::vector< std::vector< std::string > > SplineFileParPrefixNames
[Sample][Syst]
void LoadSettingsDir(std::unique_ptr< TFile > &SplineFile)
KS: Load preprocessed Settings.
void PrintBinning(TAxis *Axis) const
Print spline binning.
void MoveToGPU()
CW: The shared initialiser from constructors of TResponseFunction_red.
void PrepareSplineFile(std::string FileName) final
KS: Prepare spline file that can be used for fast loading.
void CleanUpMemory()
Remove setup variables not needed for spline evaluations.
std::vector< SplineIndex > GetEventSplines(const std::string &SampleTitle, int iOscChan, int EventMode, const std::vector< double > &VarVals)
Return the splines which affect a given event.
void PrepForReweight()
Initialise flat structure.
void InvestigateMissingSplines() const
This function will find missing splines in file.
std::vector< int > nSplineParams
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 > SampleTitles
void PrintSampleDetails(const std::string &SampleTitle) const
Print info like Sample ID of spline params etc.
std::vector< std::string > UniqueSystNames
name of each spline parameter
std::vector< M3::float_t > cpu_spline_weights
Stores weight from spline evaluation for each single spline.
std::vector< std::vector< SplineInterpolation > > SplineInterpolationTypes
spline interpolation types for each sample. These vectors are from a call to GetSplineInterpolationFr...
std::vector< SplineIndex > IndexVect
Variables related to determined which modes have splines and which piggy-back of other modes.
void GetSplineCoeff_SepMany(int splineindex, M3::float_t *&xArray, M3::float_t *&manyArray)
Rather work with spline coefficients in the splines, let's copy ND and use coefficient arrays.
void Evaluate() final
CW: This Eval should be used when using two separate x,{y,a,b,c,d} arrays to store the weights; proba...
std::vector< int > Dimensions
void PrepareIndexDir(std::unique_ptr< TFile > &SplineFile) const
KS: Prepare Index Info within SplineFile.
void BuildSampleIndexingArray(const std::string &SampleTitle)
Only need 1 indexing array everything else interfaces with this to get binning properties.
int CountNumberOfLoadedSplines(bool NonFlat=false, int Verbosity=0) const
Count how many splines we have.
std::vector< int > monolith_index
keep track which splines are flat (-1) otherwise map with flattened splines
std::vector< unsigned int > nKnots_arr
KS: CPU Number of knots per spline.
void AddSample(const std::string &SampleName, const std::string &SampleTitle, const std::vector< std::string > &OscChanFileNames, const std::vector< std::string > &SplineVarNames)
add oscillation channel to spline monolith
std::vector< TAxis * > FindSplineBinning(const std::string &FileName, const std::string &SampleTitle)
Grab histograms with spline binning.
std::vector< std::vector< std::string > > DimensionLabels
std::vector< std::vector< int > > StripDuplicatedModes(const std::vector< std::vector< int > > &InputVector) const
Creates an array to be filled with monolith indexes for each sample (allows for indexing between 7D b...
void LoadSplineFile(std::string FileName) final
KS: Load preprocessed spline file.
void PrepareMonolithDir(std::unique_ptr< TFile > &SplineFile) const
KS: Prepare Monolith Info within SplineFile.
void LoadMonolithDir(std::unique_ptr< TFile > &SplineFile)
KS: Load preprocessed Monolith.
std::vector< std::vector< std::vector< TAxis * > > > SplineBinning
Holds TAxis for [sample][channel][dimension].
std::vector< TSpline3_red * > splinevec_Monolith
holds each spline object before stripping into coefficient monolith
void PrepareOtherInfoDir(std::unique_ptr< TFile > &SplineFile) const
KS: Prepare Other Info within SplineFile.
void PrepareSettingsDir(std::unique_ptr< TFile > &SplineFile) const
KS: Prepare Settings Info within SplineFile.
const M3::float_t * RetPointer(const SplineIndex &Variables) const
get pointer to spline weight based on bin variables
MaCh3Modes * Modes
pointer to MaCh3 Mode from which we get spline suffix
void PrintArrayDetails(const std::string &SampleTitle) const
Print info like Sample ID of spline params etc.
std::map< std::tuple< int, int, int, int, std::vector< int > >, int > IndexVectMap
Map between spline origin/properties (iSample, iOscChan, iSyst, iMode, iVar1, iVar2,...
std::vector< std::vector< int > > GlobalSystIndex
This holds the global spline index and is used to grab the current parameter value to evaluate spline...
BinnedSplineHandler(ParameterHandlerGeneric *ParamHandler, MaCh3Modes *Modes_, const bool Use_GPU=true)
Constructor.
virtual ~BinnedSplineHandler()
Destructor.
virtual std::vector< std::string > GetTokensFromSplineName(const std::string &FullSplineName)=0
Extract metadata tokens encoded in a spline name. allows experiment to have different formats of spli...
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.
int GetSampleIndex(const std::string &SampleTitle) const
Get index of sample based on name.
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:142
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:30
double float_t
Definition: Core.h:37
Flat representation of a spline index entry.
Definition: SplineCommon.h:33