MaCh3  2.8.0
Reference Guide
SplineBase.h
Go to the documentation of this file.
1 #pragma once
2 
3 // C++ includes
4 #include <cstdlib>
5 #include <iomanip>
6 
7 // MaCh3 includes
9 #include "Splines/SplineCommon.h"
10 
12 // ROOT include
13 #include "TFile.h"
14 #include "TH1F.h"
15 #include "TKey.h"
16 #include "TString.h"
17 #include "TIterator.h"
18 #include "TStopwatch.h"
19 #include "TCanvas.h"
20 #include "TStyle.h"
21 #include "TTree.h"
23 
24 //KS: Joy of forward declaration https://gieseanw.wordpress.com/2018/02/25/the-joys-of-forward-declarations-results-from-the-real-world/
25 class SplineMonolithGPU;
26 
30 class SplineBase {
31  public:
33  SplineBase(const bool Use_GPU = true);
35  virtual ~SplineBase();
36 
38  virtual void Evaluate() = 0;
39 
41  virtual std::string GetName() const {return "SplineBase";};
42 
44  short int GetNParams() const {return nParams;};
45 
47  virtual void PrepareSplineFile(std::string FileName) = 0;
50  virtual void LoadSplineFile(std::string FileName) = 0;
51 
53  void SynchroniseMemTransfer() const;
54 
55  protected:
57  void FindSplineSegment();
86  virtual void CalcSplineWeights() = 0;
87 
90  void PrepareFastSplineInfoDir(std::unique_ptr<TFile>& SplineFile) const;
91 
94  void LoadFastSplineInfoDir(std::unique_ptr<TFile>& SplineFile);
95 
100  void GetTF1Coeff(TF1_red* &spl, int &nPoints, float *&coeffs) const;
102  void SetupSegments();
103 
106  std::vector<FastSplineInfo> SplineInfoArray;
109  short int *SplineSegments;
111  float *ParamValues;
113  short int nParams;
115  short int _max_knots;
117  unsigned int NSplines_valid;
118 
121 
123  bool useGPU;
124  private:
130  void CheckSegmentValidity(const M3::int_t i,
131  const M3::int_t segment,
132  const M3::float_t xvar,
133  const std::vector<M3::float_t>& xPts) const;
134 };
#define _MaCh3_Safe_Include_Start_
KS: Avoiding warning checking for headers.
Definition: Core.h:126
#define _MaCh3_Safe_Include_End_
Contains definitions for spline coefficients and structure used in both CPU and GPU code.
Contains structures and helper functions for handling spline representations of systematic parameters...
Base class for calculating weight from spline.
Definition: SplineBase.h:30
SplineMonolithGPU * gpu_monolith
KS: Store info about Spline monolith, this allow to obtain better step time. As all necessary informa...
Definition: SplineBase.h:120
virtual ~SplineBase()
Destructor.
Definition: SplineBase.cpp:30
void CheckSegmentValidity(const M3::int_t i, const M3::int_t segment, const M3::float_t xvar, const std::vector< M3::float_t > &xPts) const
Validates that the spline segment is correct for the given variation.
Definition: SplineBase.cpp:35
void GetTF1Coeff(TF1_red *&spl, int &nPoints, float *&coeffs) const
CW: Gets the polynomial coefficients for TF1.
Definition: SplineBase.cpp:129
void SynchroniseMemTransfer() const
KS: After calculations are done on GPU we copy memory to CPU. This operation is asynchronous meaning ...
Definition: SplineBase.cpp:231
unsigned int NSplines_valid
Number of valid splines.
Definition: SplineBase.h:117
virtual void CalcSplineWeights()=0
CPU based code which eval weight for each spline.
short int nParams
Number of parameters that have splines.
Definition: SplineBase.h:113
virtual std::string GetName() const
Get class name.
Definition: SplineBase.h:41
short int _max_knots
Max knots for production.
Definition: SplineBase.h:115
void FindSplineSegment()
CW:Code used in step by step reweighting, Find Spline Segment for each param.
Definition: SplineBase.cpp:58
virtual void Evaluate()=0
CW: This Eval should be used when using two separate x,{y,a,b,c,d} arrays to store the weights; proba...
short int * SplineSegments
Definition: SplineBase.h:109
std::vector< FastSplineInfo > SplineInfoArray
Definition: SplineBase.h:106
float * ParamValues
Store parameter values they are not in FastSplineInfo as in case of GPU we need to copy paste it to G...
Definition: SplineBase.h:111
bool useGPU
Whether to use GPU or not.
Definition: SplineBase.h:123
virtual void PrepareSplineFile(std::string FileName)=0
KS: Prepare spline file that can be used for fast loading.
virtual void LoadSplineFile(std::string FileName)=0
KS: Load preprocessed spline file.
void LoadFastSplineInfoDir(std::unique_ptr< TFile > &SplineFile)
KS: Load preprocessed FastSplineInfo.
Definition: SplineBase.cpp:181
SplineBase(const bool Use_GPU=true)
Constructor.
Definition: SplineBase.cpp:11
void PrepareFastSplineInfoDir(std::unique_ptr< TFile > &SplineFile) const
KS: Prepare Fast Spline Info within SplineFile.
Definition: SplineBase.cpp:153
short int GetNParams() const
Get number of spline parameters.
Definition: SplineBase.h:44
void SetupSegments()
Since we find segment before actual reweight and sometimes we want to copy it to GPU we have differen...
Definition: SplineBase.cpp:208
Class responsible for calculating spline weight on GPU.
CW: A reduced TF1 class only. Only saves parameters for each TF1 and how many parameters each paramet...
double float_t
Definition: Core.h:37
int int_t
Definition: Core.h:38