29 #include "ObjCryst/ObjCryst/DiffractionDataSingleCrystal.h"
30 #include "ObjCryst/ObjCryst/CIF.h"
31 #include "ObjCryst/Quirks/VFNDebug.h"
32 #include "ObjCryst/Quirks/VFNStreamFormat.h"
35 #include "ObjCryst/wxCryst/wxDiffractionSingleCrystal.h"
54 ObjRegistry<DiffractionDataSingleCrystal>
58 mHasObservedData(false),mScaleFactor(1.)
60 VFN_DEBUG_MESSAGE(
"DiffractionDataSingleCrystal::DiffractionDataSingleCrystal()",5)
61 this->InitRefParList();
69 mHasObservedData(false),mScaleFactor(1.)
71 VFN_DEBUG_MESSAGE(
"DiffractionDataSingleCrystal::DiffractionDataSingleCrystal()",5)
72 this->InitRefParList();
83 mHasObservedData(old.mHasObservedData),mRadiation(old.mRadiation)
103 DiffractionDataSingleCrystal::~DiffractionDataSingleCrystal()
105 VFN_DEBUG_MESSAGE(
"DiffractionDataSingleCrystal::~DiffractionDataSingleCrystal()",5)
112 VFN_DEBUG_MESSAGE(
"DiffractionDataSingleCrystal::CreateCopy()",5)
118 const static string className=
"DiffractionDataSingleCrystal";
123 const CrystVector_long &k,
124 const CrystVector_long &l,
125 const CrystVector_REAL &iObs,
126 const CrystVector_REAL &sigma)
128 VFN_DEBUG_ENTRY(
"DiffractionDataSingleCrystal::SetHklIobs(h,k,l,i,s)",5)
148 this->SortReflectionBySinThetaOverLambda();
163 VFN_DEBUG_EXIT(
"DiffractionDataSingleCrystal::SetHklIobs(h,k,l,i,s)",5)
174 this->CalcIcalc_FullDeriv(vPar);
175 return mCalcIntensity_FullDeriv;
209 VFN_DEBUG_MESSAGE(
"DiffractionDataSingleCrystal::SetWeight(w)",5)
216 VFN_DEBUG_MESSAGE(
"DiffractionDataSingleCrystal::SetIobsToIcalc()",5)
246 cout <<
"inputing reflections from file : "+fileName<<endl;
247 ifstream fin (fileName.c_str());
251 Error opening file for input:"+fileName);
253 cout <<
"Number of reflections to import : " << nbRefl << endl ;
254 for(
long i=0;i<nbRefl;i++)
264 cout <<
"Finished reading data>"<< endl;
284 this->SortReflectionBySinThetaOverLambda();
287 sprintf(buf,
"Imported HKLIobs, with %d reflections",(
int)
mNbRefl);
288 (*fpObjCrystInformUser)((string)buf);
291 cout <<
"Finished storing data..."<< endl ;
308 cout <<
"inputing reflections from file : "+fileName<<endl;
309 ifstream fin (fileName.c_str());
313 Error opening file for input:"+fileName);
317 char tmpComment[200];
318 for(
int i=0;i<skipLines;i++) fin.getline(tmpComment,150);
320 cout <<
"Number of reflections to import : " << nbRefl << endl ;
321 for(
long i=0;i<nbRefl;i++)
331 cout <<
"Finished reading data>"<< endl;
348 this->SortReflectionBySinThetaOverLambda();
351 sprintf(buf,
"Imported HKLIobsSigma, with %d reflections",(
int)
mNbRefl);
352 (*fpObjCrystInformUser)((string)buf);
355 cout <<
"Finished storing data..."<< endl ;
361 VFN_DEBUG_ENTRY(
"DiffractionDataSingleCrystal::ImportShelxHKLF4():"<<fileName,10);
370 long h=1,k=1,l=1,i=0;
374 VFN_DEBUG_MESSAGE(
"inputing reflections from file (HKLF4): "<<fileName,10);
375 ifstream fin (fileName.c_str());
378 throw ObjCrystException(
"DiffractionDataSingleCrystal::ImportShelxHKLF4() : Error opening file for input:"+fileName);
382 fin.getline(buf,100);
383 h=(int) atoi(
string(buf).substr(0,4).c_str());
384 k=(int) atoi(
string(buf).substr(4,4).c_str());
385 l=(int) atoi(
string(buf).substr(8,4).c_str());
388 if((abs(h)+abs(k)+abs(l))==0)
break;
405 VFN_DEBUG_MESSAGE(
"Finished reading from file (HKLF4) ",10);
429 this->SortReflectionBySinThetaOverLambda();
432 sprintf(buf,
"Imported Shelx HKLF 4 file, with %d reflections",(
int)
mNbRefl);
433 (*fpObjCrystInformUser)((string)buf);
435 VFN_DEBUG_EXIT(
"DiffractionDataSingleCrystal::ImportShelxHKLF4() read "<<
mNbRefl<<
" reflections",10);
440 VFN_DEBUG_EXIT(
"DiffractionDataSingleCrystal::ImportCIF(): "<<fileName,10);
441 ifstream fin (fileName.c_str());
444 throw ObjCrystException(
"DiffractionDataSingleCrystal::ImportCIF(): Error opening file for input:"+fileName);
447 for(map<string,CIFData>::iterator pos=cif.
mvData.begin();pos!=cif.
mvData.end();++pos)
449 if(pos->second.mH.numElements()>0)
451 this->
SetHklIobs(pos->second.mH,pos->second.mK,pos->second.mL,pos->second.mIobs,pos->second.mSigma);
455 VFN_DEBUG_EXIT(
"DiffractionDataSingleCrystal::ImportCIF() read "<<
mNbRefl<<
" reflections",10);
470 cout <<
"inputing reflections from Jana98 file : "+fileName<<endl;
471 ifstream fin (fileName.c_str());
474 throw ObjCrystException(
"DiffractionDataSingleCrystal::ImportHklIobsSigmaJanaM91() : \
475 Error opening file for input:"+fileName);
487 cout <<
mNbRefl <<
" reflections imported..." << endl;
508 cout <<
mNbRefl <<
" reflections imported." << endl;
528 this->SortReflectionBySinThetaOverLambda();
529 cout <<
"Finished storing data..."<< endl ;
534 sprintf(buf,
"Imported HKLIobsSigma from Jana, with %d reflections",(
int)
mNbRefl);
535 (*fpObjCrystInformUser)((string)buf);
556 cout <<
"inputing reflections from file : "+fileName<<endl;
557 ifstream fin (fileName.c_str());
561 Error opening file for input:"+fileName);
564 REAL h,k,l,iobs,sigma;
568 istringstream linestream(buffer);
569 int nn = (linestream >> h >> k >> l) ? 3 : 0;
570 nn += bool(linestream >> iobs);
571 nn += bool(linestream >> sigma);
584 sigma=sqrt(fabs(iobs)+1e-6);
607 mK.resizeAndPreserve(
mNbRefl+500);
608 mL.resizeAndPreserve(
mNbRefl+500);
646 sprintf(buf,
"Imported HKLIobs, with %d reflections",(
int)
mNbRefl);
647 (*fpObjCrystInformUser)((string)buf);
649 this->SortReflectionBySinThetaOverLambda();
656 TAU_PROFILE(
"DiffractionData::Rw()",
" REAL()",TAU_DEFAULT);
657 VFN_DEBUG_MESSAGE(
"DiffractionData::Rw()",3);
683 for(
long i=nb;i>0;i--)
685 tmp1 += *p3 * ( *p1 - *p2) * ( *p1 - *p2);
686 tmp2 += *p3 * *p2 * *p2;
689 tmp1=sqrt(tmp1/tmp2);
690 VFN_DEBUG_MESSAGE(
"DiffractionData::Rw()="<<tmp1,3);
696 TAU_PROFILE(
"DiffractionData::R()",
" REAL()",TAU_DEFAULT);
697 VFN_DEBUG_MESSAGE(
"DiffractionData::R()",3);
721 for(
long i=nb;i>0;i--)
723 tmp1 += ( *p1 - *p2) * ( *p1 - *p2);
727 tmp1=sqrt(tmp1/tmp2);
729 VFN_DEBUG_MESSAGE(
"DiffractionData::R()="<<tmp1,3);
746 TAU_PROFILE(
"DiffractionData::Chi2()",
" REAL()",TAU_DEFAULT);
747 VFN_DEBUG_ENTRY(
"DiffractionData::Chi2()",3);
769 for(
long i=nb;i>0;i--)
771 mChi2 += *p3++ * ( *p1 - *p2) * ( *p1 - *p2);
806 VFN_DEBUG_EXIT(
"DiffractionData::Chi2()="<<
mChi2,3);
812 TAU_PROFILE(
"DiffractionData::FitScaleFactorForRw()",
"void ()",TAU_DEFAULT);
813 VFN_DEBUG_MESSAGE(
"DiffractionData::FitScaleFactorForRw()",3);
841 for(
long i=nb;i>0;i--)
843 tmp1 += *p3 * (*p1) * (*p2++);
844 tmp2 += *p3++ * (*p1) * (*p1);
857 TAU_PROFILE(
"DiffractionData::FitScaleFactorForR()",
"void ()",TAU_DEFAULT);
858 VFN_DEBUG_MESSAGE(
"DiffractionData::FitScaleFactorForR()",3);
883 for(
long i=nb;i>0;i--)
885 tmp1 += (*p1) * (*p2++);
886 tmp2 += (*p1) * (*p1);
899 TAU_PROFILE(
"DiffractionData::GetBestRFactor()",
"void ()",TAU_DEFAULT);
900 VFN_DEBUG_MESSAGE(
"DiffractionData::GetBestRFactor()",3);
915 const REAL min=MaxAbs(
mObsSigma)*minRelatSigma;
916 for(
long i=0;i<
mObsSigma.numElements();i++)
932 cout <<
"DiffractionData : " <<
mName <<endl;
933 cout <<
"Number of observed reflections : " <<
mNbRefl << endl;
934 cout <<
" H K L Iobs Sigma sin(theta)/lambda)" <<endl;
935 cout <<
mH.numElements()<<endl;
936 cout << mK.numElements()<<endl;
937 cout << mL.numElements()<<endl;
941 cout << FormatVertVectorHKLFloats<REAL>
948 CrystVector_REAL tmpTheta=
mTheta;
960 cout <<
"DiffractionData : " <<
mName <<endl;
962 cout <<
"Number of observed reflections : " <<
mNbRefl << endl;
964 cout <<
" H K L Iobs Sigma Icalc ";
965 cout <<
" multiplicity Theta SiThSL Re(F) Im(F) Weight" <<endl;
966 cout << FormatVertVectorHKLFloats<REAL>(
mH,mK,mL,
972 void DiffractionDataSingleCrystal::SetUseOnlyLowAngleData(
973 const bool useOnlyLowAngle,
const REAL angle)
975 throw ObjCrystException(
"DiffractionDataSingleCrystal::SetUseOnlyLowAngleData() :\
976 not yet implemented for DiffractionDataSingleCrystal.");
981 VFN_DEBUG_MESSAGE(
"DiffractionDataSingleCrystal::SaveHKLIobsIcalc",5)
983 ofstream out(filename.c_str());
984 CrystVector_REAL theta;
990 out <<
"# H K L Icalc theta sin(theta)/lambda"
991 <<
" Re(F) Im(F)" << endl;
997 out <<
"# H K L Iobs Icalc theta"
998 <<
" sin(theta)/lambda Re(F) Im(F)" << endl;
1003 VFN_DEBUG_MESSAGE(
"DiffractionDataSingleCrystal::SaveHKLIobsIcalc:End",3)
1018 void DiffractionDataSingleCrystal::InitRefParList()
1020 VFN_DEBUG_MESSAGE(
"DiffractionDataSingleCrystal::InitRefParList()",5)
1023 false,true,true,false,1.);
1026 tmp.SetDerivStep(1e-4);
1030 const CrystVector_REAL&
1034 const CrystVector_REAL&
1038 const CrystVector_REAL&
1046 std::map<RefinablePar*, CrystVector_REAL> fullderiv_old;
1047 std::vector<const CrystVector_REAL*> v;
1049 for(std::map<RefinablePar*, CrystVector_REAL>::reverse_iterator pos=mCalcIntensity_FullDeriv.rbegin();pos!=mCalcIntensity_FullDeriv.rend();++pos)
1051 v.push_back(&(pos->second));
1052 fullderiv_old[pos->first]=this->
GetLSQDeriv(0,*(pos->first));
1053 v.push_back(&(fullderiv_old[pos->first]));
1054 cout<<pos->first->GetName()<<
":"<<pos->second.size()<<
","<<mFhklCalcSq_FullDeriv[pos->first].size()<<endl;
1057 cout<<FormatVertVector<REAL>(v,10)<<endl;
1067 VFN_DEBUG_MESSAGE(
"DiffractionDataSingleCrystal::SetRadiationType():End",5)
1073 VFN_DEBUG_MESSAGE(
"DiffractionDataSingleCrystal::SetWavelength() to "<<lambda,5)
1078 const REAL alpha2Alpha2ratio)
1080 VFN_DEBUG_MESSAGE(
"DiffractionDataSingleCrystal::SetWavelength() to "<<XRayTubeElementName,5)
1091 TAU_PROFILE(
"DiffractionData::CalcIcalc()",
"void ()",TAU_DEFAULT);
1092 VFN_DEBUG_MESSAGE(
"DiffractionData::CalcIcalc():"<<this->
GetName(),3)
1119 void DiffractionDataSingleCrystal::CalcIcalc_FullDeriv(std::set<RefinablePar *> &vPar)
1121 TAU_PROFILE(
"DiffractionDataSingleCrystal::CalcIcalc_FullDeriv()",
"void ()",TAU_DEFAULT);
1122 this->GetFhklCalcSq_FullDeriv(vPar);
1124 mCalcIntensity_FullDeriv.clear();
1125 mCalcIntensity_FullDeriv=mFhklCalcSq_FullDeriv;
1127 for(std::map<RefinablePar*, CrystVector_REAL>::iterator pos=mCalcIntensity_FullDeriv.begin(); pos!=mCalcIntensity_FullDeriv.end();pos++)
1149 mGroupIcalc_FullDeriv.clear();
1150 for(std::map<RefinablePar*, CrystVector_REAL>::iterator pos=mCalcIntensity_FullDeriv.begin(); pos!=mCalcIntensity_FullDeriv.end();pos++)
1152 mGroupIcalc_FullDeriv[pos->first].resize(
mNbGroup);
1153 mGroupIcalc_FullDeriv[pos->first]=0;
1160 mGroupIcalc_FullDeriv[pos->first](i)+=mCalcIntensity_FullDeriv[pos->first](j);
1168 CrystVector_long DiffractionDataSingleCrystal::SortReflectionBySinThetaOverLambda(
const REAL maxSTOL)
1170 TAU_PROFILE(
"DiffractionDataSingleCrystal::SortReflectionBySinThetaOverLambda()",
"void ()",TAU_DEFAULT);
1171 VFN_DEBUG_ENTRY(
"DiffractionDataSingleCrystal::SortReflectionBySinThetaOverLambda()",5)
1173 CrystVector_long index=this->ScatteringData::SortReflectionBySinThetaOverLambda(maxSTOL);
1177 CrystVector_REAL tmpObs,tmpSigma,tmpWeight;
1185 mWeight(i)=tmpWeight(index(i));
1194 CrystVector_long tmp;
1208 CrystVector_REAL oldGroupIobs, oldGroupWeight,oldGroupSigma;
1237 CrystVector_long oldH,oldK,oldL,oldMult;
1247 const long subs=index(i);
1283 VFN_DEBUG_EXIT(
"DiffractionDataSingleCrystal::SortReflectionBySinThetaOverLambda()",5)
1289 static string GroupOption;
1290 static string GroupOptionChoices[3];
1291 static bool needInitNames=
true;
1292 if(
true==needInitNames)
1294 GroupOption=
"Group Reflections";
1295 GroupOptionChoices[0]=
"No";
1296 GroupOptionChoices[1]=
"Sum equally-spaced reflections";
1297 GroupOptionChoices[2]=
"Sum according to user data";
1298 needInitNames=
false;
1308 VFN_DEBUG_ENTRY(
"DiffractionDataSingleCrystal::PrepareTwinningCalc()",5)
1312 const REAL dSiThOvLa=.0001;
1350 VFN_DEBUG_EXIT(
"DiffractionDataSingleCrystal::PrepareTwinningCalc()",5)
1353 #ifdef __WX__CRYST__
1354 WXCrystObjBasic* DiffractionDataSingleCrystal::WXCreate(wxWindow* parent)
1358 return mpWXCrystObj;
The namespace which includes all objects (crystallographic and algorithmic) in ObjCryst++.
const RefParType * gpRefParTypeScattDataScale
Type for scattering data scale factors.
RadiationType
Type of radiation used.
float string2floatC(const string &s)
Function to convert a substring to a floating point value, imposing a C locale (using '.
ObjRegistry< DiffractionDataSingleCrystal > gDiffractionDataSingleCrystalRegistry("Global DiffractionDataSingleCrystal Registry")
Global registry for all PowderPattern objects.
ObjRegistry< RefinableObj > gTopRefinableObjRegistry("Global Top RefinableObj registry")
This is a special registry for 'top' object for an optimization.
Main CIF class - parses the stream and separates data blocks, comments, items, loops.
std::map< std::string, CIFData > mvData
The data blocks, after parsing. The key is the name of the data block.
Crystal class: Unit cell, spacegroup, scatterers.
DiffractionData object for Single Crystal analysis.
RefinableObjClock mClockPrepareTwinningCorr
Clock for twinning, when the preparation of twinning correction was last made.
void ImportHklIobsSigma(const string &fileName, const long nbRefl, const int skipLines=0)
Import h,k,l,I,Sigma from a file.
CrystVector_REAL mGroupIcalc
The calculated intensities summed on all reflections that are grouped.
RefinableObjClock mClockScaleFactor
Last modification of the scale factor.
void SetHklIobs(const CrystVector_long &h, const CrystVector_long &k, const CrystVector_long &l, const CrystVector_REAL &iObs, const CrystVector_REAL &sigma)
input H,K,L, Iobs and Sigma
void SetWavelength(const REAL)
Set the (monochromatic) wavelength of the beam.
RefObjOpt mGroupOption
Option for the type of grouping (0:no, 1:by theta values (twinning), 2:user-supplied groups)
CrystVector_REAL mObsIntensity
Observed intensity (after ABS and LP corrections)
void InitOptions()
Init options (currently only twinning).
long mNbGroup
Number of groups.
CrystVector_REAL mGroupIobs
The observed intensities summed on all reflections that are (or could be) overlapped dur to a twinnin...
CrystVector_REAL mCalcIntensity
Calculated intensities.
virtual void FitScaleFactorForRw() const
Compute the best scale factor minimising Rw.
virtual const CrystVector_REAL & GetLSQWeight(const unsigned int) const
Get the weight values for the LSQ function.
virtual const CrystVector_REAL & GetLSQObs(const unsigned int) const
Get the observed values for the LSQ function.
CrystVector_long mGroupIndex
The index of reflections which need to be summed.
const CrystVector_REAL & GetSigma() const
Return the array of sigmas for observed intensities, for all peaks.
virtual REAL GetBestRFactor() const
Compute the best scale factor to minimize R, apply this scale factor and return the R value obtained.
REAL mScaleFactor
Scale factor.
std::map< RefinablePar *, CrystVector_REAL > & GetIcalc_FullDeriv(std::set< RefinablePar * > &vPar)
void SetEnergy(const REAL)
Set the (monochromatic) energy of the beam.
void CalcIcalc() const
Calc intensities.
void ImportHklIobsSigmaJanaM91(const string &fileName)
Import h,k,l,I,Sigma from a Jana98 '*.m91' file.
CrystVector_REAL mWeight
weight for computing R-Factor, for each observed value.
virtual std::map< RefinablePar *, CrystVector_REAL > & GetLSQ_FullDeriv(const unsigned int, std::set< RefinablePar * > &vPar)
Get the first derivative for the LSQ function for each parameter supplied in a list.
RefinableObjClock mClockChi2
Clock the last time Chi^2 was computed.
virtual void FitScaleFactorForR() const
Compute the best scale factor minimising R.
bool mHasObservedData
Are there observed intensities ?
virtual REAL GetChi2() const
Return conventionnal Chi^2.
virtual void SetSigmaToSqrtIobs()
Set sigma for all observed intensities to sqrt(obs)
virtual void SetRadiationType(const RadiationType radiation)
Set : neutron or x-ray experiment ? Wavelength ?
virtual void SetWeightToInvSigma2(const REAL minRelatSigma=1e-4, const REAL minIobsSigmaRatio=0)
Set the weight for all observed intensities to 1/sigma^2.
void ImportShelxHKLF4(const string &fileName)
Import h,k,l,I,Sigma from a file using shelx HKLF 4 format.
virtual REAL GetRw() const
Return the Crystal R-factor (weighted)
virtual REAL GetLogLikelihood() const
Get -log(likelihood) of the current configuration for the object.
CrystVector_REAL mGroupWeight
The weight on each reflection sum in case of grouped reflections.
virtual const Radiation & GetRadiation() const
Get the radiation object for this data.
virtual void GlobalOptRandomMove(const REAL mutationAmplitude, const RefParType *type=gpRefParTypeObjCryst)
Make a random move of the current configuration.
RefinableObjClock mClockIcalc
Last time Icalc was computed.
virtual unsigned int GetNbLSQFunction() const
Number of LSQ functions.
virtual const string & GetClassName() const
Name for this class ("RefinableObj", "Crystal",...).
virtual DiffractionDataSingleCrystal * CreateCopy() const
So-called virtual copy constructor.
void SetIobsToIcalc()
Set Iobs to current values of Icalc. Mostly used for tests.
REAL GetScaleFactor() const
Scale factor (applied to Icalc to match Iobs)
void SetIobs(const CrystVector_REAL &)
Return the array of observed intensities for all peaks.
virtual void PrintObsCalcData() const
Print H, K, L Iobs sigma Icalc for all reflections Iobs and sigma (if given) are scaled to Icalc (if ...
DiffractionDataSingleCrystal(const bool regist=true)
Default constructor.
virtual void PrintObsData() const
Print H, K, L Iobs sigma for all reflections.
void ImportHklIobs(const string &fileName, const long nbRefl, const int skipLines=0)
Import h,k,l,I from a file.
CrystVector_REAL mGroupSigma
The uncertainty on observed grouped intensities.
CrystVector_REAL mObsSigma
Sigma for observed intensities (either individual reflections or spectrum)
virtual const CrystVector_REAL & GetLSQCalc(const unsigned int) const
Get the current calculated value for the LSQ function.
void SetWeight(const CrystVector_REAL &)
Change the weights (for each reflection) used for computing Rw.
void ImportCIF(const string &fileName)
Import diffraction data from a CIF file.
virtual REAL GetR() const
Return the Crystal R-factor (unweighted)
const CrystVector_REAL & GetIobs() const
Return the array of observed intensities for all peaks.
const CrystVector_REAL & GetIcalc() const
returns the calculated diffracted intensity.
void SaveHKLIobsIcalc(const string &filename="hklIobsIcalc.out")
Save H,K,L Iobs Icalc to a file, text format, 3 columns theta Iobs Icalc.
const CrystVector_REAL & GetWeight() const
Return the weights (for each reflection) used for computing Rw.
void PrepareTwinningCalc() const
Determine the index of reflections to be summed because of twinning (GroupOption==1) The reflections ...
void ImportHklIobsGroup(const string &fileName, const unsigned int skipLines=0)
Import h,k,l and grouped intensities from a file.
void SetSigma(const CrystVector_REAL &)
Return the array of sigmas for observed intensities, for all peaks.
Exception class for ObjCryst++ library.
Class to define the radiation (type, monochromaticity, wavelength(s)) of an experiment.
void SetRadiationType(const RadiationType)
Set the radiation type (X-Rays, Neutron)
void SetWavelength(const REAL)
Set the (monochromatic) wavelength of the beam.
Class to compute structure factors for a set of reflections and a Crystal.
long mNbReflUsed
Number of reflections which are below the max.
CrystVector_REAL mSinThetaLambda
for the crystal and the reflections in ReciprSpace
RefinableObjClock mClockFhklObsSq
Last time observed squared structure factors were altered.
virtual void PrepareHKLarrays() const
virtual void SetCrystal(Crystal &crystal)
Set the crystal for this experiment.
CrystVector_REAL mFhklCalcSq
F(HKL)^2 calc for each reflection.
RefinableObjClock mClockStructFactorSq
Clock for the square modulus of the structure factor.
CrystVector_REAL mFhklObsSq
Observed squared structure factors (zero-sized if none)
const CrystVector_REAL & GetFhklCalcSq() const
Returns the Array of calculated |F(hkl)|^2 for all reflections.
CrystVector_REAL mFhklCalcReal
real &imaginary parts of F(HKL)calc
virtual void CalcSinThetaLambda() const
long mNbRefl
Number of H,K,L reflections.
CrystVector_REAL mH
H,K,L coordinates.
CrystVector_REAL mTheta
theta for the crystal and the HKL in ReciprSpace (in radians)
virtual long GetNbReflBelowMaxSinThetaOvLambda() const
Recalc, and get the number of reflections which should be actually used, due to the maximuml sin(thet...
RefinableObjClock mClockHKL
Clock for the list of hkl.
CrystVector_int mMultiplicity
Multiplicity for each reflections (mostly for powder diffraction)
class of refinable parameter types.
void Reset()
Reset a Clock to 0, to force an update.
void AddChild(const RefinableObjClock &)
Add a 'child' clock.
void RemoveChild(const RefinableObjClock &)
remove a child clock. This also tells the child clock to remove the parent.
void Click()
Record an event for this clock (generally, the 'time' an object has been modified,...
Generic class for parameters of refinable objects.
void AddPar(const RefinablePar &newRefPar)
Add a refinable parameter.
virtual const CrystVector_REAL & GetLSQDeriv(const unsigned int, RefinablePar &)
Get the first derivative values for the LSQ function, for a given parameter.
virtual const string & GetName() const
Name of the object.
ObjRegistry< RefObjOpt > mOptionRegistry
List of options for this object.
void AddOption(RefObjOpt *opt)
RefinableObjClock mClockMaster
Master clock, which is changed whenever the object has been altered.
string mName
Name for this RefinableObject. Should be unique, at least in the same scope.+.
void AddSubRefObj(RefinableObj &)
void SetGlobalOptimStep(const RefParType *type, const REAL step)
Change the maximum step to use during Global Optimization algorithms.
virtual void GlobalOptRandomMove(const REAL mutationAmplitude, const RefParType *type=gpRefParTypeObjCryst)
Make a random move of the current configuration.
Abstract base class for all objects in wxCryst.
WX Class for DiffractionDataSingleCrystal objects.