00001
00002
00003 #ifndef DATATYPES_HEADER
00004 #define DATATYPES_HEADER
00005
00006 #include "hkl_datatypes.hh"
00007 #include "hkl_unmerge.hh"
00008
00009 namespace scala
00010 {
00011 class SDcorrection
00012
00013 {
00014 public:
00015 SDcorrection() : sdfac(1.0), sdadd(0.0) {}
00016 SDcorrection(const double& SDfac, const double& SDb, const double& SDadd,
00017 const bool& fixSDb=false)
00018 : sdfac(SDfac), sdb(SDb), sdadd(SDadd), fixsdb(fixSDb) {}
00019
00020 void FixSDb() {fixsdb = true;}
00021 void UnFixSDb() {fixsdb = false;}
00022
00023
00024 void ResetRange() {mincorr = +1.0e10; maxcorr = -mincorr;}
00025
00026
00027 void UpdateFactor(const double& update) {sdfac *= update;}
00028
00029 void UpdateAdd(const double& update) {sdadd *= update;}
00030
00031 void Set(const double& SDfac, const double& SDb, const double& SDadd)
00032 {sdfac = SDfac; sdb = SDb; sdadd = SDadd;}
00033 double SDfac() const {return sdfac;}
00034 double SDb() const {return sdb;}
00035 double SDadd() const {return sdadd;}
00036 double& SDfac() {return sdfac;}
00037 double& SDb() {return sdb;}
00038 double& SDadd() {return sdadd;}
00039
00040
00041 void Correct(observation& Observation) const;
00042
00043 void Correct(observation& Observation, const float& Iav) const;
00044
00045
00046 IsigI Corrected(const IsigI& Is) const;
00047
00048 IsigI Corrected(const IsigI& Is, const float& Iav) const;
00049
00050 std::string format() const;
00051
00052 std::pair<double,double> MinMax() const
00053 {return std::pair<double,double>(mincorr, maxcorr);}
00054
00055
00056 std::vector<double> GetParameters() const;
00057
00058 std::vector<double> GetShifts(const double& scale) const;
00059
00060
00061 void SetParameters(const std::vector<double>& params);
00062
00063 int Nparams() const {return (fixsdb) ? 2 : 3;}
00064
00065 private:
00066 double sdfac;
00067 double sdb;
00068 double sdadd;
00069 bool fixsdb;
00070 mutable double mincorr, maxcorr;
00071 static const double MINVARINFRAC;
00072 static const double MINSDFRAC;
00073 };
00074 }
00075
00076 #endif