19 #ifndef _OBJCRYST_REFLECTIONPROFILE_H_
20 #define _OBJCRYST_REFLECTIONPROFILE_H_
23 #include "ObjCryst/CrystVector/CrystVector.h"
24 #include "ObjCryst/ObjCryst/General.h"
25 #include "ObjCryst/ObjCryst/UnitCell.h"
26 #include "ObjCryst/RefinableObj/RefinableObj.h"
37 CrystVector_REAL PowderProfileGauss (
const CrystVector_REAL theta,
38 const REAL fwhm,
const REAL center,
const REAL asym=1.0);
42 CrystVector_REAL PowderProfileLorentz(
const CrystVector_REAL theta,
43 const REAL fwhm,
const REAL center,
const REAL asym=1.0);
46 const REAL fwhm,
const REAL center,
47 const REAL A0,
const REAL A1,
48 const REAL B0,
const REAL B1);
80 virtual CrystVector_REAL
GetProfile(
const CrystVector_REAL &x,
const REAL xcenter,
81 const REAL h,
const REAL k,
const REAL l)
const=0;
85 const REAL h,
const REAL k,
const REAL l)=0;
88 virtual void XMLOutput(ostream &os,
int indent=0)
const=0;
108 CrystVector_REAL
GetProfile(
const CrystVector_REAL &x,
const REAL xcenter,
109 const REAL h,
const REAL k,
const REAL l)
const;
119 const REAL fwhmCagliotiU=0,
120 const REAL fwhmCagliotiV=0,
124 const REAL h,
const REAL k,
const REAL l);
126 virtual void XMLOutput(ostream &os,
int indent=0)
const;
142 mAsymBerarBaldinozziB0,mAsymBerarBaldinozziB1;
171 CrystVector_REAL
GetProfile(
const CrystVector_REAL &x,
const REAL xcenter,
172 const REAL h,
const REAL k,
const REAL l)
const;
182 const REAL fwhmCagliotiU=0,
183 const REAL fwhmCagliotiV=0,
184 const REAL fwhmGaussP=0,
185 const REAL fwhmLorentzX=0,
186 const REAL fwhmLorentzY=0,
187 const REAL fwhmLorentzGammaHH=0,
188 const REAL fwhmLorentzGammaKK=0,
189 const REAL fwhmLorentzGammaLL=0,
190 const REAL fwhmLorentzGammaHK=0,
191 const REAL fwhmLorentzGammaHL=0,
192 const REAL fwhmLorentzGammaKL=0,
193 const REAL pseudoVoigtEta0=0,
194 const REAL pseudoVoigtEta1=0,
200 const REAL h,
const REAL k,
const REAL l);
202 virtual void XMLOutput(ostream &os,
int indent=0)
const;
227 REAL
mCagliotiU,mCagliotiV,mCagliotiW,mScherrerP,mLorentzX,mLorentzY,
228 mLorentzGammaHH,mLorentzGammaKK,mLorentzGammaLL,mLorentzGammaHK,mLorentzGammaHL,mLorentzGammaKL;
267 CrystVector_REAL
GetProfile(
const CrystVector_REAL &x,
const REAL xcenter,
268 const REAL h,
const REAL k,
const REAL l)
const;
273 const REAL instrumentAlpha1,
274 const REAL instrumentBeta0,
275 const REAL instrumentBeta1,
276 const REAL gaussianSigma0,
277 const REAL gaussianSigma1,
278 const REAL gaussianSigma2,
279 const REAL lorentzianGamma0,
280 const REAL lorentzianGamma1,
281 const REAL lorentzianGamma2);
283 const REAL h,
const REAL k,
const REAL l);
285 virtual void XMLOutput(ostream &os,
int indent=0)
const;
294 REAL mInstrumentAlpha0;
295 REAL mInstrumentAlpha1;
296 REAL mInstrumentBeta0;
297 REAL mInstrumentBeta1;
298 REAL mGaussianSigma0;
299 REAL mGaussianSigma1;
300 REAL mGaussianSigma2;
301 REAL mLorentzianGamma0;
302 REAL mLorentzianGamma1;
303 REAL mLorentzianGamma2;
virtual const string & GetClassName() const
Name for this class ("RefinableObj", "Crystal",...).
REAL mPseudoVoigtEta0
Pseudo-Voigt mixing parameter : eta=eta0 +2*theta*eta1 eta=1 -> pure Lorentzian ; eta=0 -> pure Gauss...
Pseudo-Voigt reflection profile, with 6-parameters anisotropic Lorentzian broadening and Toraya asymm...
Double-Exponential Pseudo-Voigt profile for TOF.
virtual const string & GetClassName() const
Name for this class ("RefinableObj", "Crystal",...).
bool IsAnisotropic() const
Is the profile anisotropic ?
virtual REAL GetFullProfileWidth(const REAL relativeIntensity, const REAL xcenter, const REAL h, const REAL k, const REAL l)
Get the (approximate) full profile width at a given percentage of the profile maximum (e...
void SetUnitCell(const UnitCell &cell)
Set unit cell.
bool IsAnisotropic() const
Is the profile anisotropic ?
bool IsAnisotropic() const
Is the profile anisotropic ?
virtual void XMLInput(istream &is, const XMLCrystTag &tag)
Input From stream.
void InitParameters()
Initialize parameters.
CrystVector_REAL GetProfile(const CrystVector_REAL &x, const REAL xcenter, const REAL h, const REAL k, const REAL l) const
Get the reflection profile.
virtual const string & GetClassName() const
Name for this class ("RefinableObj", "Crystal",...).
virtual void XMLInput(istream &is, const XMLCrystTag &tag)
Input From stream.
virtual void XMLOutput(ostream &os, int indent=0) const =0
Output to stream in well-formed XML.
REAL mAsymBerarBaldinozziA0
Asymmetry parameters, following the Bérar & Baldinozzi approach ( Bérar & baldinozzi, J.
void InitParameters()
Initialize parameters.
virtual REAL GetFullProfileWidth(const REAL relativeIntensity, const REAL xcenter, const REAL h, const REAL k, const REAL l)=0
Get the (approximate) full profile width at a given percentage of the profile maximum (e...
REAL mAsym0
Asymmetry parameters, following the analytical function for asymmetric pseudo-voigt given by Toraya i...
Generic Refinable Object.
REAL mPseudoVoigtEta0
Pseudo-Voigt mixing parameter : eta=1 -> pure Lorentzian ; eta=0 -> pure Gaussian.
Abstract base class for all objects in wxCryst.
Abstract base class for reflection profiles.
void InitParameters()
Initialize parameters.
REAL mCagliotiU
FWHM parameters:
void SetProfilePar(const REAL fwhmCagliotiW, const REAL fwhmCagliotiU=0, const REAL fwhmCagliotiV=0, const REAL fwhmGaussP=0, const REAL fwhmLorentzX=0, const REAL fwhmLorentzY=0, const REAL fwhmLorentzGammaHH=0, const REAL fwhmLorentzGammaKK=0, const REAL fwhmLorentzGammaLL=0, const REAL fwhmLorentzGammaHK=0, const REAL fwhmLorentzGammaHL=0, const REAL fwhmLorentzGammaKL=0, const REAL pseudoVoigtEta0=0, const REAL pseudoVoigtEta1=0, const REAL asymA0=0, const REAL asymA1=0, const REAL asymA2=0)
Set reflection profile parameters.
virtual bool IsAnisotropic() const
Is the profile anisotropic ?
virtual void XMLOutput(ostream &os, int indent=0) const
Output to stream in well-formed XML.
virtual void XMLInput(istream &is, const XMLCrystTag &tag)=0
Input From stream.
CrystVector_REAL GetProfile(const CrystVector_REAL &x, const REAL xcenter, const REAL h, const REAL k, const REAL l) const
Get the reflection profile.
virtual void XMLOutput(ostream &os, int indent=0) const
Output to stream in well-formed XML.
virtual CrystVector_REAL GetProfile(const CrystVector_REAL &x, const REAL xcenter, const REAL h, const REAL k, const REAL l) const =0
Get the reflection profile.
std::complex< T > ExponentialIntegral1(const complex< T > z)
Complex exponential integral E1(z) (Abramowitz & Stegun, chap.
REAL mAsym0
Asymmetry parameters, following the analytical function for asymmetric pseudo-voigt given by Toraya i...
virtual void XMLInput(istream &is, const XMLCrystTag &tag)
Input From stream.
The namespace which includes all objects (crystallographic and algorithmic) in ObjCryst++.
virtual REAL GetFullProfileWidth(const REAL relativeIntensity, const REAL xcenter, const REAL h, const REAL k, const REAL l)
Get the (approximate) full profile width at a given percentage of the profile maximum (e...
Unit Cell class: Unit cell with spacegroup information.
CrystVector_REAL GetProfile(const CrystVector_REAL &x, const REAL xcenter, const REAL h, const REAL k, const REAL l) const
Get the reflection profile.
REAL mCagliotiU
FWHM parameters, following Caglioti's law.
virtual REAL GetFullProfileWidth(const REAL relativeIntensity, const REAL xcenter, const REAL h, const REAL k, const REAL l)
Get the (approximate) full profile width at a given percentage of the profile maximum (e...
virtual void XMLOutput(ostream &os, int indent=0) const
Output to stream in well-formed XML.
Pseudo-Voigt reflection profile.
class to input or output a well-formatted xml beginning or ending tag.
CrystVector_REAL AsymmetryBerarBaldinozzi(const CrystVector_REAL x, const REAL fw, const REAL center, const REAL a0, const REAL a1, const REAL b0, const REAL b1)
Asymmetry function [Ref J. Appl. Cryst 26 (1993), 128-129.
ReflectionProfileDoubleExponentialPseudoVoigt()
Constructor, without unit cell.
void SetProfilePar(const REAL fwhmCagliotiW, const REAL fwhmCagliotiU=0, const REAL fwhmCagliotiV=0, const REAL eta0=0.5, const REAL eta1=0.)
Set reflection profile parameters.
void SetProfilePar(const REAL instrumentAlpha0, const REAL instrumentAlpha1, const REAL instrumentBeta0, const REAL instrumentBeta1, const REAL gaussianSigma0, const REAL gaussianSigma1, const REAL gaussianSigma2, const REAL lorentzianGamma0, const REAL lorentzianGamma1, const REAL lorentzianGamma2)
Set reflection profile parameters.
std::complex< T > ExponentialIntegral1_ExpZ(const complex< T > z)
E1(z)*exp(z)
ObjRegistry< ReflectionProfile > gReflectionProfileRegistry("List of all ReflectionProfile types")
Global registry for all ReflectionProfile objects.