24 #include "ObjCryst/ObjCryst/PowderPatternBackgroundBayesianMinimiser.h"
27 PowderPatternBackgroundBayesianMinimiser::
28 PowderPatternBackgroundBayesianMinimiser(PowderPatternBackground &backgd):
31 this->AddSubRefObj(*mpBackground);
34 PowderPatternBackgroundBayesianMinimiser::~PowderPatternBackgroundBayesianMinimiser()
36 this->RemoveSubRefObj(*mpBackground);
39 const string& PowderPatternBackgroundBayesianMinimiser::GetClassName()
const
41 static string className=
"PowderPatternBackgroundBayesianMinimiser";
45 REAL PowderPatternBackgroundBayesianMinimiser::GetLogLikelihood()
const
47 TAU_PROFILE(
"PowderPatternBackgroundBayesianMinimiser::GetLogLikelihood()",
"void ()",TAU_DEFAULT);
49 const long nb=mpBackground->GetPowderPatternCalc().numElements();
52 const REAL *pBackgd=mpBackground->GetPowderPatternCalc().data();
53 const REAL *pObs=mpBackground->GetParentPowderPattern().GetPowderPatternObs().data();
54 const REAL *pSigma=mpBackground->GetParentPowderPattern().GetPowderPatternObsSigma().data();
55 for(
long i=0;i<nb;i+=step)
59 llk += PowderPatternBackgroundBayesianMinimiser
60 ::BayesianBackgroundLogLikelihood
61 ((*pObs-*pBackgd) / (1.4142135623730951**pSigma));
71 unsigned int PowderPatternBackgroundBayesianMinimiser::GetNbLSQFunction ()
const {
return 1;}
73 const CrystVector_REAL& PowderPatternBackgroundBayesianMinimiser::GetLSQCalc (
const unsigned int id)
const
75 const long nb=mpBackground->GetPowderPatternCalc().numElements();
77 if(mBayesianCalc.numElements()!=nb) mBayesianCalc.resize(nb);
79 const REAL *pBackgd=mpBackground->GetPowderPatternCalc().data();
80 const REAL *pObs=mpBackground->GetParentPowderPattern().GetPowderPatternObs().data();
81 const REAL *pSigma=mpBackground->GetParentPowderPattern().GetPowderPatternObsSigma().data();
82 REAL *pBayesCalc=mBayesianCalc.data();
83 for(
long i=0;i<nb;i+=step)
87 *pBayesCalc = 1 + PowderPatternBackgroundBayesianMinimiser::BayesianBackgroundLogLikelihood((*pObs-*pBackgd) / (1.4142135623730951**pSigma));
98 const CrystVector_REAL& PowderPatternBackgroundBayesianMinimiser::GetLSQObs (
const unsigned int)
const
100 const long nb=mpBackground->GetPowderPatternCalc().numElements();
101 if(mBayesianObs.numElements()!=nb)
103 mBayesianObs.resize(nb);
109 const CrystVector_REAL& PowderPatternBackgroundBayesianMinimiser::GetLSQWeight (
const unsigned int)
const
111 const long nb=mpBackground->GetPowderPatternCalc().numElements();
112 if(mBayesianWeight.numElements()!=nb)
114 mBayesianWeight.resize(nb);
117 return mBayesianWeight;
120 REAL PowderPatternBackgroundBayesianMinimiser::BayesianBackgroundLogLikelihood(
const REAL t)
122 static const REAL vllk[11]={0.00000000e+00,
133 static const REAL vt[11]={ 0. , 0.01, 0.1 , 1.1 , 2.1 , 3.1 , 4.1 , 5.1 , 6.1 , 7.1 , 8.1};
135 static const REAL s1=spline(8)-log((REAL)8);
136 if(t<=0)
return 5*t*t;
137 if(t<8)
return spline(t);
The namespace which includes all objects (crystallographic and algorithmic) in ObjCryst++.
Cubic spline interpolation.