JHUGen MELA  v2.4.1
Matrix element calculations as used in JHUGen. MELA is an important tool that was used for the Higgs boson discovery and for precise measurements of its structure and interactions. Please see the website https://spin.pha.jhu.edu/ and papers cited there for more details, and kindly cite those papers when using this code.
MELANCSpline_2D_fast.cc
Go to the documentation of this file.
1 #include "MELANCSpline_2D_fast.h"
2 #include <cmath>
3 #include "TMath.h"
4 #include "Riostream.h"
5 #include "RooAbsReal.h"
6 
7 using namespace TMath;
8 using namespace RooFit;
9 using namespace std;
10 using namespace TNumericUtil;
11 
12 
14 
17  rangeYmin(1), rangeYmax(-1),
18  bcBeginX(MELANCSplineCore::bcNaturalSpline), bcEndX(MELANCSplineCore::bcNaturalSpline),
19  bcBeginY(MELANCSplineCore::bcNaturalSpline), bcEndY(MELANCSplineCore::bcNaturalSpline),
20  theYVar("theYVar", "theYVar", this)
21 {}
22 
24  const char* name,
25  const char* title
26  ) :
27  MELANCSplineCore(name, title),
28  rangeYmin(1), rangeYmax(-1),
29  bcBeginX(MELANCSplineCore::bcNaturalSpline), bcEndX(MELANCSplineCore::bcNaturalSpline),
30  bcBeginY(MELANCSplineCore::bcNaturalSpline), bcEndY(MELANCSplineCore::bcNaturalSpline),
31  theYVar("theYVar", "theYVar", this)
32 {}
33 
35  const char* name,
36  const char* title,
37  RooAbsReal& inXVar,
38  RooAbsReal& inYVar,
39  const std::vector<T>& inXList,
40  const std::vector<T>& inYList,
41  const std::vector<std::vector<T>>& inFcnList,
46  Bool_t inUseFloor,
47  T inFloorEval,
48  T inFloorInt
49  ) :
50  MELANCSplineCore(name, title, inXVar, inXList, inUseFloor, inFloorEval, inFloorInt),
51  rangeYmin(1), rangeYmax(-1),
52  bcBeginX(bcBeginX_), bcEndX(bcEndX_),
53  bcBeginY(bcBeginY_), bcEndY(bcEndY_),
54  theYVar("theYVar", "theYVar", this, inYVar),
55  YList(inYList),
56  FcnList(inFcnList)
57 {
58  if (npointsX()>1 && npointsY()>1){
59  // Prepare A and kappa arrays for x and y coordinates
60  int npoints;
61  Double_t det;
62 
63  vector<vector<MELANCSplineCore::T>> xA; getKappas(kappaX, 0); getAArray(kappaX, xA, bcBeginX, bcEndX);
64  npoints=kappaX.size();
65  TMatrix_t xAtrans(npoints, npoints);
66  for (int i=0; i<npoints; i++){ for (int j=0; j<npoints; j++){ xAtrans[i][j]=xA.at(i).at(j); } }
67  det=0;
68  TMatrix_t xAinv = xAtrans.Invert(&det);
69  if (det==0.){
70  coutE(InputArguments) << "MELANCSpline_2D_fast::interpolateFcn: Matrix xA could not be inverted. Something is wrong with the x coordinates of points!" << endl;
71  assert(0);
72  }
73 
74  vector<vector<MELANCSplineCore::T>> yA; getKappas(kappaY, 1); getAArray(kappaY, yA, bcBeginY, bcEndY);
75  npoints=kappaY.size();
76  TMatrix_t yAtrans(npoints, npoints);
77  for (int i=0; i<npoints; i++){ for (int j=0; j<npoints; j++){ yAtrans[i][j]=yA.at(i).at(j); } }
78  det=0;
79  TMatrix_t yAinv = yAtrans.Invert(&det);
80  if (det==0.){
81  coutE(InputArguments) << "MELANCSpline_2D_fast::interpolateFcn: Matrix yA could not be inverted. Something is wrong with the y coordinates of points!" << endl;
82  assert(0);
83  }
84 
85  // Get the grid of coefficients
86  vector<vector<vector<MELANCSplineCore::T>>> coefsAlongY; // [Ax(y),Bx(y),Cx(y),Dx(y)][xbin][ybin]
87  int npoldim=0;
88  int nxbins=0;
89  for (unsigned int j=0; j<npointsY(); j++){
90  vector<vector<MELANCSplineCore::T>> xcoefsAtYj = getCoefficientsPerY(kappaX, xAinv, j, bcBeginX, bcEndX, -1); // [ix][Ax,Bx,Cx,Dx] at each y_j
91  if (j==0){
92  nxbins=xcoefsAtYj.size();
93  npoldim=xcoefsAtYj.at(0).size();
94  for (int ipow=0; ipow<npoldim; ipow++){
95  vector<vector<MELANCSplineCore::T>> dum_xycoefarray;
96  for (int ix=0; ix<nxbins; ix++){
97  vector<MELANCSplineCore::T> dum_ycoefarray;
98  dum_xycoefarray.push_back(dum_ycoefarray);
99  }
100  coefsAlongY.push_back(dum_xycoefarray);
101  }
102  }
103  if (nxbins!=(int)xcoefsAtYj.size() || npoldim!=(int)xcoefsAtYj.at(0).size()){
104  coutE(InputArguments) << "MELANCSpline_2D_fast::interpolateFcn: nxbins!=(int)xcoefsAtYj.size() || npoldim!=(int)xcoefsAtYj.at(0).size()!" << endl;
105  assert(0);
106  }
107  for (int ix=0; ix<nxbins; ix++){
108  for (int ipow=0; ipow<npoldim; ipow++) coefsAlongY.at(ipow).at(ix).push_back(xcoefsAtYj.at(ix).at(ipow));
109  }
110  }
111 
112  for (int ix=0; ix<nxbins; ix++){
113  // Get the x coefficients interpolated across y
114  vector<vector<vector<MELANCSplineCore::T>>> xCoefs;
115  for (int ic=0; ic<npoldim; ic++){
116  vector<vector<MELANCSplineCore::T>> yCoefs = getCoefficientsAlongDirection(kappaY, yAinv, coefsAlongY.at(ic).at(ix), bcBeginY, bcEndY, -1); // [iy][A,B,C,D]
117  xCoefs.push_back(yCoefs);
118  }
119  coefficients.push_back(xCoefs);
120  }
121  }
122  else assert(0);
123 
124  RooArgSet leafset;
125  getLeafDependents(theXVar, leafset);
126  getLeafDependents(theYVar, leafset);
127  addLeafDependents(leafset);
128 
129  emptyFcnList();
130 }
131 
133  const MELANCSpline_2D_fast& other,
134  const char* name
135  ) :
136  MELANCSplineCore(other, name),
137  rangeYmin(other.rangeYmin), rangeYmax(other.rangeYmax),
138  bcBeginX(other.bcBeginX), bcEndX(other.bcEndX),
139  bcBeginY(other.bcBeginY), bcEndY(other.bcEndY),
140  theYVar("theYVar", this, other.theYVar),
141  YList(other.YList),
142  FcnList(other.FcnList),
143  kappaX(other.kappaX),
144  kappaY(other.kappaY),
145  coefficients(other.coefficients)
146 {}
147 
148 
149 MELANCSplineCore::T MELANCSpline_2D_fast::interpolateFcn(Int_t code, const char* rangeName)const{
151 
152  if (verbosity==MELANCSplineCore::kVerbose){ cout << "MELANCSpline_2D_fast(" << GetName() << ")::interpolateFcn begin with code: " << code << endl; }
153 
154  // Get bins
155  Int_t xbin=-1, xbinmin=-1, xbinmax=-1, ybin=-1, ybinmin=-1, ybinmax=-1;
156  MELANCSplineCore::T tx=0, txmin=0, txmax=0, ty=0, tymin=0, tymax=0;
157  if (code==0 || code%2!=0){ // Case to just compute the value at x
158  if (!testRangeValidity(theXVar, 0)) return 0;
159  xbin = getWhichBin(theXVar, 0);
160  tx = getTVar(kappaX, theXVar, xbin, 0);
161  }
162  else{ // Case to integrate along x
163  MELANCSplineCore::T coordmin = theXVar.min(rangeName); cropValueForRange(coordmin, 0);
164  MELANCSplineCore::T coordmax = theXVar.max(rangeName); cropValueForRange(coordmax, 0);
165  xbinmin = getWhichBin(coordmin, 0);
166  txmin = getTVar(kappaX, coordmin, xbinmin, 0);
167  xbinmax = getWhichBin(coordmax, 0);
168  txmax = getTVar(kappaX, coordmax, xbinmax, 0);
169  }
170  if (code==0 || code%3!=0){ // Case to just compute the value at y
171  if (!testRangeValidity(theYVar, 1)) return 0;
172  ybin = getWhichBin(theYVar, 1);
173  ty = getTVar(kappaY, theYVar, ybin, 1);
174  }
175  else{ // Case to integrate along y
176  MELANCSplineCore::T coordmin = theYVar.min(rangeName); cropValueForRange(coordmin, 1);
177  MELANCSplineCore::T coordmax = theYVar.max(rangeName); cropValueForRange(coordmax, 1);
178  ybinmin = getWhichBin(coordmin, 1);
179  tymin = getTVar(kappaY, coordmin, ybinmin, 1);
180  ybinmax = getWhichBin(coordmax, 1);
181  tymax = getTVar(kappaY, coordmax, ybinmax, 1);
182  }
183 
184  for (int ix=0; ix<(int)coefficients.size(); ix++){
185  if (
186  (xbin>=0 && ix!=xbin)
187  ||
188  (xbinmin>=0 && xbinmax>=xbinmin && !(xbinmin<=ix && ix<=xbinmax))
189  ) continue;
190 
191  MELANCSplineCore::T txlow=0, txhigh=1;
192  if (code>0 && code%2==0){
193  if (ix==xbinmin) txlow=txmin;
194  if (ix==xbinmax) txhigh=txmax;
195  }
196  else txhigh=tx;
197 
199  if (code==0 || code%2!=0) cout << "Evaluating tx=" << txhigh << " in bin " << ix << endl;
200  else cout << "Evaluating tx[" << txlow << ", " << txhigh << "] in bin " << ix << endl;
201  }
202 
203  // Get the x coefficients interpolated across y
204  vector<MELANCSplineCore::T> xCoefs;
205  for (int ic=0; ic<(int)coefficients.at(ix).size(); ic++){
206  const vector<vector<MELANCSplineCore::T>>& yCoefs = coefficients.at(ix).at(ic);
207 
208  if (verbosity==MELANCSplineCore::kVerbose) cout << "\tCoefficient " << ic << ":\n";
209 
211  for (int iy=0; iy<(int)yCoefs.size(); iy++){
212  if (
213  (ybin>=0 && iy!=ybin)
214  ||
215  (ybinmin>=0 && ybinmax>=ybinmin && !(ybinmin<=iy && iy<=ybinmax))
216  ) continue;
217 
218  MELANCSplineCore::T tylow=0, tyhigh=1;
219  if (code>0 && code%3==0){
220  if (iy==ybinmin) tylow=tymin;
221  if (iy==ybinmax) tyhigh=tymax;
222  }
223  else tyhigh=ty;
224 
226  if (code==0 || code%3!=0) cout << "\tEvaluating ty=" << tyhigh << " in bin " << iy << endl;
227  else cout << "\tEvaluating ty[" << tylow << ", " << tyhigh << "] in bin " << iy << endl;
228  }
229 
230  theCoef += evalSplineSegment(yCoefs.at(iy), kappaY.at(iy), tyhigh, tylow, (code>0 && code%3==0));
231  }
232 
233  //if (code==0) cout << "\tCoefficient is " << theCoef << endl;
234 
235  xCoefs.push_back(theCoef);
236  }
237 
238  // Evaluate value of spline at x with coefficients evaluated at y
239  res += evalSplineSegment(xCoefs, kappaX.at(ix), txhigh, txlow, (code>0 && code%2==0));
240  }
241 
242  return res;
243 }
244 
245 void MELANCSpline_2D_fast::getKappas(vector<MELANCSplineCore::T>& kappas, const Int_t whichDirection){
246  kappas.clear();
248 
249  Int_t npoints;
250  vector<MELANCSplineCore::T> const* coord;
251  if (whichDirection==0){
252  npoints=npointsX();
253  coord=&XList;
254  }
255  else{
256  npoints=npointsY();
257  coord=&YList;
258  }
259 
260  for (Int_t j=0; j<npoints-1; j++){
261  MELANCSplineCore::T val_j = coord->at(j);
262  MELANCSplineCore::T val_jpo = coord->at(j+1);
263  MELANCSplineCore::T val_diff = (val_jpo-val_j);
264  if (fabs(val_diff)>MELANCSplineCore::T(0)) kappa = 1./val_diff;
265  else kappa = 0;
266  kappas.push_back(kappa);
267  }
268  kappas.push_back(kappa); // Push the same kappa_(N-1)=kappa_(N-2) at the end point
269 }
270 Int_t MELANCSpline_2D_fast::getWhichBin(const MELANCSplineCore::T& val, const Int_t whichDirection)const{
271  Int_t bin=-1;
272  MELANCSplineCore::T valj, valjpo;
273  Int_t npoints;
274  vector<MELANCSplineCore::T> const* coord;
275  if (whichDirection==0){
276  coord=&XList;
277  npoints=npointsX();
278  }
279  else{
280  coord=&YList;
281  npoints=npointsY();
282  }
283 
284  if (npoints<=1) bin=0;
285  else{
286  valjpo = coord->at(0);
287  for (Int_t j=0; j<npoints-1; j++){
288  valj = coord->at(j);
289  valjpo = coord->at(j+1);
290  if (val<valjpo && val>=valj){ bin=j; break; }
291  }
292  if (bin==-1 && val>=valjpo) bin=npoints-2;
293  else if (bin==-1) bin=0;
294  }
295 
296  return bin;
297 }
298 MELANCSplineCore::T MELANCSpline_2D_fast::getTVar(const vector<MELANCSplineCore::T>& kappas, const MELANCSplineCore::T& val, const Int_t& bin, const Int_t whichDirection)const{
299  const MELANCSplineCore::T& K=kappas.at(bin);
300  vector<MELANCSplineCore::T> const* coord;
301  if (whichDirection==0) coord=&XList;
302  else coord=&YList;
303  return (val-coord->at(bin))*K;
304 }
305 
306 vector<vector<MELANCSplineCore::T>> MELANCSpline_2D_fast::getCoefficientsPerY(const std::vector<MELANCSplineCore::T>& kappaX, const TMatrix_t& xAinv, const Int_t& ybin, MELANCSplineCore::BoundaryCondition const& bcBegin, MELANCSplineCore::BoundaryCondition const& bcEnd, const Int_t xbin)const{
307  vector<MELANCSplineCore::T> fcnList;
308  for (unsigned int bin=0; bin<npointsX(); bin++){ fcnList.push_back(FcnList.at(ybin).at(bin)); }
309  vector<vector<MELANCSplineCore::T>> coefs = getCoefficientsAlongDirection(kappaX, xAinv, fcnList, bcBegin, bcEnd, xbin);
310  return coefs;
311 }
312 
314  Double_t value = interpolateFcn(0);
315  if (useFloor && value<floorEval){
316  if (verbosity>=MELANCSplineCore::kError) coutE(Eval) << "MELANCSpline_2D_fast ERROR::MELANCSpline_2D_fast(" << GetName() << ") evaluation returned " << value << " at (x, y) = (" << theXVar << ", " << theYVar << ")" << endl;
317  value = floorEval;
318  }
319  if (verbosity==MELANCSplineCore::kVerbose){ cout << "MELANCSpline_2D_fast(" << GetName() << ")::evaluate = " << value << " at (x, y) = (" << theXVar << ", " << theYVar << ")" << endl; }
320  return value;
321 }
322 Int_t MELANCSpline_2D_fast::getAnalyticalIntegral(RooArgSet& allVars, RooArgSet& analVars, const char* /*rangeName*/) const{
323  if (_forceNumInt) return 0;
324 
325  Int_t code=1;
326 
327  RooArgSet Xdeps, Ydeps;
328  RooRealVar* rrv_x = dynamic_cast<RooRealVar*>(theXVar.absArg());
329  RooRealVar* rrv_y = dynamic_cast<RooRealVar*>(theYVar.absArg());
330  if (rrv_x==0) theXVar.absArg()->leafNodeServerList(&Xdeps, 0, true);
331  if (rrv_y==0) theYVar.absArg()->leafNodeServerList(&Ydeps, 0, true);
332 
333  if (rrv_x!=0){
334  if (Ydeps.find(*rrv_x)==0 || rrv_y!=0){
335  if (matchArgs(allVars, analVars, theXVar)) code*=2;
336  }
337  }
338  if (rrv_y!=0){
339  if (Xdeps.find(*rrv_y)==0 || rrv_x!=0){
340  if (matchArgs(allVars, analVars, theYVar)) code*=3;
341  }
342  }
343 
344  if (code==1) code=0;
345  return code;
346 }
347 Double_t MELANCSpline_2D_fast::analyticalIntegral(Int_t code, const char* rangeName) const{
348  Double_t value = interpolateFcn(code, rangeName);
349  if (useFloor && value<floorInt){
350  if (verbosity>=MELANCSplineCore::kError) coutE(Integration) << "MELANCSpline_2D_fast ERROR::MELANCSpline_2D_fast(" << GetName() << ") integration returned " << value << " for code = " << code << endl;
351  value = floorInt;
352  }
353  if (verbosity==MELANCSplineCore::kVerbose){ cout << "MELANCSpline_2D_fast(" << GetName() << ")::analyticalIntegral = " << value << " for code = " << code << endl; }
354  return value;
355 }
356 
357 Bool_t MELANCSpline_2D_fast::testRangeValidity(const T& val, const Int_t whichDirection) const{
358  const T* range[2];
359  if (whichDirection==0){
360  range[0] = &rangeXmin;
361  range[1] = &rangeXmax;
362  }
363  else{
364  range[0] = &rangeYmin;
365  range[1] = &rangeYmax;
366  }
367  return (*(range[0])>*(range[1]) || (val>=*(range[0]) && val<=*(range[1])));
368 }
369 void MELANCSpline_2D_fast::setRangeValidity(const T valmin, const T valmax, const Int_t whichDirection){
370  T* range[2];
371  if (whichDirection==0){
372  range[0] = &rangeXmin;
373  range[1] = &rangeXmax;
374  }
375  else{
376  range[0] = &rangeYmin;
377  range[1] = &rangeYmax;
378  }
379  *(range[0])=valmin;
380  *(range[1])=valmax;
381 }
382 void MELANCSpline_2D_fast::cropValueForRange(T& val, const Int_t whichDirection)const{
383  if (testRangeValidity(val, whichDirection)) return;
384  const T* range[2];
385  if (whichDirection==0){
386  range[0] = &rangeXmin;
387  range[1] = &rangeXmax;
388  }
389  else{
390  range[0] = &rangeYmin;
391  range[1] = &rangeYmax;
392  }
393  if (val<*(range[0])) val = *(range[0]);
394  if (val>*(range[1])) val = *(range[1]);
395 }
MELANCSplineCore::kVerbose
@ kVerbose
Definition: MELANCSplineCore.h:25
value
pymela::gHIGGS_KAPPA value("gHIGGS_KAPPA_TILDE", pymela::gHIGGS_KAPPA_TILDE) .value("SIZE_HQQ"
MELANCSplineCore::T
Float_t T
Definition: MELANCSplineCore.h:18
MELANCSpline_2D_fast::kappaY
std::vector< T > kappaY
Definition: MELANCSpline_2D_fast.h:27
MELANCSpline_2D_fast::theYVar
RooRealProxy theYVar
Definition: MELANCSpline_2D_fast.h:21
MELANCSpline_2D_fast::rangeYmin
T rangeYmin
Definition: MELANCSpline_2D_fast.h:13
MELANCSpline_2D_fast::coefficients
std::vector< std::vector< std::vector< std::vector< T > > > > coefficients
Definition: MELANCSpline_2D_fast.h:28
TNumericUtil::KahanAccumulator
Definition: MELAAccumulators.h:27
MELANCSplineCore::rangeXmax
T rangeXmax
Definition: MELANCSplineCore.h:73
MELANCSpline_2D_fast::getTVar
virtual T getTVar(const std::vector< T > &kappas, const T &val, const Int_t &bin, const Int_t whichDirection) const
Definition: MELANCSpline_2D_fast.cc:298
MELANCSpline_2D_fast::getKappas
virtual void getKappas(std::vector< T > &kappas, const Int_t whichDirection)
Definition: MELANCSpline_2D_fast.cc:245
MELANCSpline_2D_fast::analyticalIntegral
virtual Double_t analyticalIntegral(Int_t code, const char *rangeName=0) const
Definition: MELANCSpline_2D_fast.cc:347
MELANCSpline_2D_fast::npointsY
unsigned int npointsY() const
Definition: MELANCSpline_2D_fast.h:64
MELANCSplineCore::getLeafDependents
void getLeafDependents(RooRealProxy &proxy, RooArgSet &set)
Definition: MELANCSplineCore.cc:275
MELANCSpline_2D_fast::kappaX
std::vector< T > kappaX
Definition: MELANCSpline_2D_fast.h:26
MELANCSpline_2D_fast::getWhichBin
virtual Int_t getWhichBin(const T &val, const Int_t whichDirection) const
Definition: MELANCSpline_2D_fast.cc:270
MELANCSplineCore::BoundaryCondition
BoundaryCondition
Definition: MELANCSplineCore.h:28
MELANCSpline_2D_fast::MELANCSpline_2D_fast
MELANCSpline_2D_fast()
MELANCSplineCore::kError
@ kError
Definition: MELANCSplineCore.h:24
MELANCSpline_2D_fast.h
MELANCSplineCore::rangeXmin
T rangeXmin
Definition: MELANCSplineCore.h:72
MELANCSpline_2D_fast::testRangeValidity
Bool_t testRangeValidity(const T &val, const Int_t whichDirection) const
Definition: MELANCSpline_2D_fast.cc:357
modparameters::kappa
complex(8), public kappa
Definition: mod_Parameters.F90:882
TNumericUtil
Definition: MELAAccumulators.h:6
MELANCSpline_2D_fast::setRangeValidity
void setRangeValidity(const T valmin, const T valmax, const Int_t whichDirection)
Definition: MELANCSpline_2D_fast.cc:369
MELANCSplineCore::evalSplineSegment
virtual T evalSplineSegment(const std::vector< T > &coefs, const T &kappa, const T &tup, const T &tdn, Bool_t doIntegrate=false) const
Definition: MELANCSplineCore.cc:265
testME_all.int
int
Definition: testME_all.py:13
MELANCSpline_2D_fast::emptyFcnList
virtual void emptyFcnList()
Definition: MELANCSpline_2D_fast.h:62
MELANCSpline_2D_fast::getCoefficientsPerY
virtual std::vector< std::vector< T > > getCoefficientsPerY(const std::vector< T > &kappaX, const TMatrix_t &xAinv, const Int_t &ybin, MELANCSplineCore::BoundaryCondition const &bcBegin, MELANCSplineCore::BoundaryCondition const &bcEnd, const Int_t xbin) const
Definition: MELANCSpline_2D_fast.cc:306
MELANCSplineCore::getCoefficientsAlongDirection
virtual std::vector< std::vector< T > > getCoefficientsAlongDirection(const std::vector< T > &kappas, const TMatrix_t &Ainv, const std::vector< T > &fcnList, BoundaryCondition const &bcBegin, BoundaryCondition const &bcEnd, const Int_t pickBin) const
Definition: MELANCSplineCore.cc:247
MELANCSplineCore::TMatrix_t
TMatrixT< T > TMatrix_t
Definition: MELANCSplineCore.h:19
MELANCSpline_2D_fast::evaluate
virtual Double_t evaluate() const
Definition: MELANCSpline_2D_fast.cc:313
MELANCSpline_2D_fast::YList
std::vector< T > YList
Definition: MELANCSpline_2D_fast.h:22
MELANCSpline_2D_fast::rangeYmax
T rangeYmax
Definition: MELANCSpline_2D_fast.h:14
MELANCSplineCore::npointsX
unsigned int npointsX() const
Definition: MELANCSplineCore.h:84
MELANCSpline_2D_fast::bcEndX
const BoundaryCondition bcEndX
Definition: MELANCSpline_2D_fast.h:17
MELANCSplineCore
Definition: MELANCSplineCore.h:16
ClassImp
ClassImp(MELANCSpline_2D_fast) MELANCSpline_2D_fast
Definition: MELANCSpline_2D_fast.cc:13
dd_global::cout
integer cout
Definition: DD_global.F90:21
MELANCSplineCore::useFloor
Bool_t useFloor
Definition: MELANCSplineCore.h:68
MELANCSplineCore::floorInt
T floorInt
Definition: MELANCSplineCore.h:70
MELANCSpline_2D_fast
Definition: MELANCSpline_2D_fast.h:11
MELANCSplineCore::XList
std::vector< T > XList
Definition: MELANCSplineCore.h:77
MELANCSplineCore::floorEval
T floorEval
Definition: MELANCSplineCore.h:69
MELANCSpline_2D_fast::bcBeginY
const BoundaryCondition bcBeginY
Definition: MELANCSpline_2D_fast.h:18
MELANCSpline_2D_fast::getAnalyticalIntegral
virtual Int_t getAnalyticalIntegral(RooArgSet &allVars, RooArgSet &analVars, const char *rangeName=0) const
Definition: MELANCSpline_2D_fast.cc:322
MELANCSplineCore::addLeafDependents
void addLeafDependents(RooArgSet &set)
Definition: MELANCSplineCore.cc:280
MELANCSpline_2D_fast::cropValueForRange
void cropValueForRange(T &val, const Int_t whichDirection) const
Definition: MELANCSpline_2D_fast.cc:382
MELANCSplineCore::verbosity
VerbosityLevel verbosity
Definition: MELANCSplineCore.h:67
MELANCSpline_2D_fast::FcnList
std::vector< std::vector< T > > FcnList
Definition: MELANCSpline_2D_fast.h:24
MELANCSpline_2D_fast::bcBeginX
const BoundaryCondition bcBeginX
Definition: MELANCSpline_2D_fast.h:16
MELANCSplineCore::theXVar
RooRealProxy theXVar
Definition: MELANCSplineCore.h:75
MELANCSplineCore::getAArray
virtual void getAArray(const std::vector< T > &kappas, std::vector< std::vector< T >> &AArray, BoundaryCondition const &bcBegin, BoundaryCondition const &bcEnd) const
Definition: MELANCSplineCore.cc:159
MELANCSpline_2D_fast::bcEndY
const BoundaryCondition bcEndY
Definition: MELANCSpline_2D_fast.h:19
MELANCSpline_2D_fast::interpolateFcn
virtual T interpolateFcn(Int_t code, const char *rangeName=0) const
Definition: MELANCSpline_2D_fast.cc:149