00001
00002
00003
00004 #ifndef ICERING_HEADER
00005 #define ICERING_HEADER
00006
00007 #include <vector>
00008
00009 #include "hkl_datatypes.hh"
00010
00011 namespace scala
00012 {
00013
00014 class IceRing
00015 {
00016 public:
00017
00018 IceRing(const double& Resolution, const double& width);
00019
00020
00021 double Dstar() const {return sqrt(ring_invressqr);}
00022
00023
00024 bool InRing(const double& invresolsq) const;
00025
00026 void ClearSums();
00027
00028 void AddObs(const IsigI& I_sigI, const double& invresolsq);
00029
00030 void SetReject() {reject=true;}
00031 void SetReject(const bool& Rej) {reject=Rej;}
00032
00033
00034 double MeanI() const;
00035 double MeanSigI() const;
00036 double MeanSSqr() const;
00037 int N() const {return nI;}
00038
00039
00040 bool Reject() const {return reject;}
00041
00042 private:
00043 double ring_invressqr;
00044 double halfwidth_invressqr;
00045 double sum_I;
00046 double sum_sigI;
00047 double sum_sSqr;
00048 int nI;
00049 bool reject;
00050 };
00051
00052 class Rings
00053 {
00054 public:
00055 Rings() : nrings(0) {}
00056
00057
00058 void AddRing(const double& Resolution, const double& width);
00059
00060
00061 void DefaultIceRings();
00062
00063
00064 void Clear();
00065
00066 int Nrings() const {return nrings;}
00067
00068
00069 double Dstar(const int& iring) const
00070 {return rings.at(iring).Dstar();}
00071
00072
00073 void CopyRejRings(const Rings& other);
00074
00075
00076 int InRing(const double& invresolsq) const;
00077
00078 void ClearSums();
00079
00080 void AddObs(const int& Iring, const IsigI& I_sigI, const double& invresolsq);
00081
00082 void SetReject(const int& Iring);
00083 void SetReject(const int& Iring, const bool& Rej);
00084
00085
00086 double MeanI(const int& Iring) const;
00087 double MeanSigI(const int& Iring) const;
00088 double MeanSSqr(const int& Iring) const;
00089
00090 bool Reject(const int& Iring) const;
00091 int N(const int& Iring) const;
00092
00093 private:
00094 int nrings;
00095 std::vector<IceRing> rings;
00096
00097 void CheckRing(const int& Iring) const;
00098 };
00099
00100 }
00101 #endif