00001 #ifndef PIXEL_HPP
00002 #define PIXEL_HPP
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include "map_exception.h"
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 class BasePixel
00024 {
00025 protected:
00026 static double ddummy;
00027 public:
00028 BasePixel(){};
00029 virtual ~BasePixel() {};
00030 virtual double T() const;
00031 virtual double & T() ;
00032 virtual double I() const;
00033 virtual double & I() ;
00034 virtual double Q() const;
00035 virtual double & Q() ;
00036 virtual double U() const;
00037 virtual double & U() ;
00038 virtual double Nobs() const;
00039 virtual double & Nobs() ;
00040 virtual double Pmag() const;
00041 virtual double & Pmag() ;
00042 virtual double Pang() const;
00043 virtual double & Pang() ;
00044
00045 virtual void copy (BasePixel& src);
00046 virtual void clear (void);
00047
00048 BasePixel& operator= (BasePixel& src);
00049 double operator[](unsigned int i) const;
00050 double & operator[](unsigned int i);
00051 virtual unsigned int maxIndex (void) const;
00052 virtual void computePolar (void) { return; }
00053 };
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063 inline BasePixel& BasePixel::operator= (BasePixel& src)
00064 {
00065 copy(src);
00066 return *this;
00067 }
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085 inline double BasePixel::operator[](unsigned int i) const
00086 {
00087 double rv = 0;
00088 switch( i ){
00089 case 0:
00090 rv = T();
00091 break;
00092 case 1:
00093 rv = Q();
00094 break;
00095 case 2:
00096 rv = U();
00097 break;
00098 case 3:
00099 rv = Nobs();
00100 break;
00101 case 4:
00102 rv = Pmag();
00103 break;
00104 case 5:
00105 rv = Pang();
00106 break;
00107 default:
00108 throw MapException(MapException::Undefined);
00109 }
00110 return rv;
00111 }
00112 inline double & BasePixel::operator[](unsigned int i)
00113 {
00114 switch( i ){
00115 case 0:
00116 return T();
00117 break;
00118 case 1:
00119 return Q();
00120 break;
00121 case 2:
00122 return U();
00123 break;
00124 case 3:
00125 return Nobs();
00126 break;
00127 case 4:
00128 return Pmag();
00129 break;
00130 case 5:
00131 return Pang();
00132 break;
00133 default:
00134 throw MapException(MapException::Undefined);
00135 }
00136 return ddummy;
00137 }
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148 inline unsigned int BasePixel::maxIndex(void) const
00149 {
00150 throw MapException(MapException::Undefined);
00151 return 0;
00152 }
00153
00154
00155
00156 class TPixel : public BasePixel
00157 {
00158 protected:
00159 double T_;
00160 public:
00161 TPixel() : T_(0) {};
00162 virtual ~TPixel() {};
00163 virtual double T() const { return T_; };
00164 virtual double & T() { return T_; };
00165 virtual double I() const { return T_; };
00166 virtual double & I() { return T_; };
00167 virtual unsigned int maxIndex (void) const { return 0; }
00168 };
00169
00170
00171
00172
00173 class TPPixel : public TPixel
00174 {
00175 protected:
00176 double Q_;
00177 double U_;
00178 double Pmag_;
00179 double Pang_;
00180 public:
00181 TPPixel() : TPixel(), Q_(0), U_(0), Pmag_(0), Pang_(0) {};
00182 virtual ~TPPixel() {};
00183 virtual double Q() const { return Q_; };
00184 virtual double & Q() { return Q_; };
00185 virtual double U() const { return U_; };
00186 virtual double & U() { return U_; };
00187 virtual double Pmag() const { return Pmag_; };
00188 virtual double & Pmag() { return Pmag_; };
00189 virtual double Pang() const { return Pang_; };
00190 virtual double & Pang() { return Pang_; };
00191 virtual unsigned int maxIndex (void) const { return 5; }
00192 virtual void computePolar (void);
00193 };
00194
00195
00196
00197
00198 class TnobsPixel : public TPixel
00199 {
00200 protected:
00201 double nobs_;
00202 public:
00203 TnobsPixel() : TPixel(), nobs_(0) {};
00204 virtual ~TnobsPixel() {};
00205 virtual double Nobs() const { return nobs_; };
00206 virtual double & Nobs() { return nobs_; };
00207 virtual unsigned int maxIndex (void) const { return 2; }
00208 };
00209
00210
00211
00212 class TPnobsPixel : public TPPixel
00213 {
00214 protected:
00215 double nobs_;
00216 public:
00217 TPnobsPixel() : TPPixel(), nobs_(0) {};
00218 virtual ~TPnobsPixel() {};
00219 virtual double Nobs() const { return nobs_; };
00220 virtual double & Nobs() { return nobs_; };
00221 virtual unsigned int maxIndex (void) const { return 6; }
00222 };
00223 #endif