00001 #include <esg/energy/Photon.h>
00002
00003 using namespace esg;
00004
00005 const double Photon::COS_THETA [256] =
00006 {
00007 1.000000, 0.999925, 0.999699, 0.999322, 0.998795, 0.998118,
00008 0.997290, 0.996313, 0.995185, 0.993907, 0.992480, 0.990903,
00009 0.989177, 0.987301, 0.985278, 0.983105, 0.980785, 0.978317,
00010 0.975702, 0.972940, 0.970031, 0.966976, 0.963776, 0.960431,
00011 0.956940, 0.953306, 0.949528, 0.945607, 0.941544, 0.937339,
00012 0.932993, 0.928506, 0.923880, 0.919114, 0.914210, 0.909168,
00013 0.903989, 0.898674, 0.893224, 0.887640, 0.881921, 0.876070,
00014 0.870087, 0.863973, 0.857729, 0.851355, 0.844854, 0.838225,
00015 0.831470, 0.824589, 0.817585, 0.810457, 0.803208, 0.795837,
00016 0.788346, 0.780737, 0.773010, 0.765167, 0.757209, 0.749136,
00017 0.740951, 0.732654, 0.724247, 0.715731, 0.707107, 0.698376,
00018 0.689541, 0.680601, 0.671559, 0.662416, 0.653173, 0.643832,
00019 0.634393, 0.624859, 0.615232, 0.605511, 0.595699, 0.585798,
00020 0.575808, 0.565732, 0.555570, 0.545325, 0.534998, 0.524590,
00021 0.514103, 0.503538, 0.492898, 0.482184, 0.471397, 0.460539,
00022 0.449611, 0.438616, 0.427555, 0.416430, 0.405241, 0.393992,
00023 0.382683, 0.371317, 0.359895, 0.348419, 0.336890, 0.325310,
00024 0.313682, 0.302006, 0.290285, 0.278520, 0.266713, 0.254866,
00025 0.242980, 0.231058, 0.219101, 0.207111, 0.195090, 0.183040,
00026 0.170962, 0.158858, 0.146730, 0.134581, 0.122411, 0.110222,
00027 0.098017, 0.085797, 0.073565, 0.061321, 0.049068, 0.036807,
00028 0.024541, 0.012272, 0.000000, -0.012272, -0.024541, -0.036807,
00029 -0.049068, -0.061321, -0.073565, -0.085797, -0.098017, -0.110222,
00030 -0.122411, -0.134581, -0.146730, -0.158858, -0.170962, -0.183040,
00031 -0.195090, -0.207111, -0.219101, -0.231058, -0.242980, -0.254866,
00032 -0.266713, -0.278520, -0.290285, -0.302006, -0.313682, -0.325310,
00033 -0.336890, -0.348419, -0.359895, -0.371317, -0.382683, -0.393992,
00034 -0.405241, -0.416430, -0.427555, -0.438616, -0.449611, -0.460539,
00035 -0.471397, -0.482184, -0.492898, -0.503538, -0.514103, -0.524590,
00036 -0.534998, -0.545325, -0.555570, -0.565732, -0.575808, -0.585798,
00037 -0.595699, -0.605511, -0.615232, -0.624859, -0.634393, -0.643832,
00038 -0.653173, -0.662416, -0.671559, -0.680601, -0.689541, -0.698376,
00039 -0.707107, -0.715731, -0.724247, -0.732654, -0.740951, -0.749136,
00040 -0.757209, -0.765167, -0.773010, -0.780737, -0.788346, -0.795837,
00041 -0.803208, -0.810457, -0.817585, -0.824589, -0.831470, -0.838225,
00042 -0.844854, -0.851355, -0.857729, -0.863973, -0.870087, -0.876070,
00043 -0.881921, -0.887640, -0.893224, -0.898674, -0.903989, -0.909168,
00044 -0.914210, -0.919114, -0.923880, -0.928506, -0.932993, -0.937339,
00045 -0.941544, -0.945607, -0.949528, -0.953306, -0.956940, -0.960431,
00046 -0.963776, -0.966976, -0.970031, -0.972940, -0.975702, -0.978317,
00047 -0.980785, -0.983105, -0.985278, -0.987301, -0.989177, -0.990903,
00048 -0.992480, -0.993907, -0.995185, -0.996313, -0.997290, -0.998118,
00049 -0.998795, -0.999322, -0.999699, -0.999925
00050 };
00051
00052 const double Photon::SIN_THETA [256] =
00053 {
00054 0.000000, 0.012272, 0.024541, 0.036807, 0.049068, 0.061321,
00055 0.073565, 0.085797, 0.098017, 0.110222, 0.122411, 0.134581,
00056 0.146730, 0.158858, 0.170962, 0.183040, 0.195090, 0.207111,
00057 0.219101, 0.231058, 0.242980, 0.254866, 0.266713, 0.278520,
00058 0.290285, 0.302006, 0.313682, 0.325310, 0.336890, 0.348419,
00059 0.359895, 0.371317, 0.382683, 0.393992, 0.405241, 0.416430,
00060 0.427555, 0.438616, 0.449611, 0.460539, 0.471397, 0.482184,
00061 0.492898, 0.503538, 0.514103, 0.524590, 0.534998, 0.545325,
00062 0.555570, 0.565732, 0.575808, 0.585798, 0.595699, 0.605511,
00063 0.615232, 0.624859, 0.634393, 0.643832, 0.653173, 0.662416,
00064 0.671559, 0.680601, 0.689541, 0.698376, 0.707107, 0.715731,
00065 0.724247, 0.732654, 0.740951, 0.749136, 0.757209, 0.765167,
00066 0.773010, 0.780737, 0.788346, 0.795837, 0.803208, 0.810457,
00067 0.817585, 0.824589, 0.831470, 0.838225, 0.844854, 0.851355,
00068 0.857729, 0.863973, 0.870087, 0.876070, 0.881921, 0.887640,
00069 0.893224, 0.898674, 0.903989, 0.909168, 0.914210, 0.919114,
00070 0.923880, 0.928506, 0.932993, 0.937339, 0.941544, 0.945607,
00071 0.949528, 0.953306, 0.956940, 0.960431, 0.963776, 0.966976,
00072 0.970031, 0.972940, 0.975702, 0.978317, 0.980785, 0.983105,
00073 0.985278, 0.987301, 0.989177, 0.990903, 0.992480, 0.993907,
00074 0.995185, 0.996313, 0.997290, 0.998118, 0.998795, 0.999322,
00075 0.999699, 0.999925, 1.000000, 0.999925, 0.999699, 0.999322,
00076 0.998795, 0.998118, 0.997290, 0.996313, 0.995185, 0.993907,
00077 0.992480, 0.990903, 0.989177, 0.987301, 0.985278, 0.983105,
00078 0.980785, 0.978317, 0.975702, 0.972940, 0.970031, 0.966976,
00079 0.963776, 0.960431, 0.956940, 0.953306, 0.949528, 0.945607,
00080 0.941544, 0.937339, 0.932993, 0.928506, 0.923880, 0.919114,
00081 0.914210, 0.909168, 0.903989, 0.898674, 0.893224, 0.887640,
00082 0.881921, 0.876070, 0.870087, 0.863973, 0.857729, 0.851355,
00083 0.844854, 0.838225, 0.831470, 0.824589, 0.817585, 0.810457,
00084 0.803208, 0.795837, 0.788346, 0.780737, 0.773010, 0.765167,
00085 0.757209, 0.749136, 0.740951, 0.732654, 0.724247, 0.715731,
00086 0.707107, 0.698376, 0.689541, 0.680601, 0.671559, 0.662416,
00087 0.653173, 0.643832, 0.634393, 0.624859, 0.615232, 0.605511,
00088 0.595699, 0.585798, 0.575808, 0.565732, 0.555570, 0.545325,
00089 0.534998, 0.524590, 0.514103, 0.503538, 0.492898, 0.482184,
00090 0.471397, 0.460539, 0.449611, 0.438616, 0.427555, 0.416430,
00091 0.405241, 0.393992, 0.382683, 0.371317, 0.359895, 0.348419,
00092 0.336890, 0.325310, 0.313682, 0.302006, 0.290285, 0.278520,
00093 0.266713, 0.254866, 0.242980, 0.231058, 0.219101, 0.207111,
00094 0.195090, 0.183040, 0.170962, 0.158858, 0.146730, 0.134581,
00095 0.122411, 0.110222, 0.098017, 0.085797, 0.073565, 0.061321,
00096 0.049068, 0.036807, 0.024541, 0.012272
00097 };
00098
00099 const double Photon::COS_PHI [256] =
00100 {
00101 1.000000, 0.999699, 0.998795, 0.997290, 0.995185, 0.992480,
00102 0.989177, 0.985278, 0.980785, 0.975702, 0.970031, 0.963776,
00103 0.956940, 0.949528, 0.941544, 0.932993, 0.923880, 0.914210,
00104 0.903989, 0.893224, 0.881921, 0.870087, 0.857729, 0.844854,
00105 0.831470, 0.817585, 0.803208, 0.788346, 0.773010, 0.757209,
00106 0.740951, 0.724247, 0.707107, 0.689541, 0.671559, 0.653173,
00107 0.634393, 0.615232, 0.595699, 0.575808, 0.555570, 0.534998,
00108 0.514103, 0.492898, 0.471397, 0.449611, 0.427555, 0.405241,
00109 0.382683, 0.359895, 0.336890, 0.313682, 0.290285, 0.266713,
00110 0.242980, 0.219101, 0.195090, 0.170962, 0.146730, 0.122411,
00111 0.098017, 0.073565, 0.049068, 0.024541, 0.000000, -0.024541,
00112 -0.049068, -0.073565, -0.098017, -0.122411, -0.146730, -0.170962,
00113 -0.195090, -0.219101, -0.242980, -0.266713, -0.290285, -0.313682,
00114 -0.336890, -0.359895, -0.382683, -0.405241, -0.427555, -0.449611,
00115 -0.471397, -0.492898, -0.514103, -0.534998, -0.555570, -0.575808,
00116 -0.595699, -0.615232, -0.634393, -0.653173, -0.671559, -0.689541,
00117 -0.707107, -0.724247, -0.740951, -0.757209, -0.773010, -0.788346,
00118 -0.803208, -0.817585, -0.831470, -0.844854, -0.857729, -0.870087,
00119 -0.881921, -0.893224, -0.903989, -0.914210, -0.923880, -0.932993,
00120 -0.941544, -0.949528, -0.956940, -0.963776, -0.970031, -0.975702,
00121 -0.980785, -0.985278, -0.989177, -0.992480, -0.995185, -0.997290,
00122 -0.998795, -0.999699, -1.000000, -0.999699, -0.998795, -0.997290,
00123 -0.995185, -0.992480, -0.989177, -0.985278, -0.980785, -0.975702,
00124 -0.970031, -0.963776, -0.956940, -0.949528, -0.941544, -0.932993,
00125 -0.923880, -0.914210, -0.903989, -0.893224, -0.881921, -0.870087,
00126 -0.857729, -0.844854, -0.831470, -0.817585, -0.803208, -0.788346,
00127 -0.773010, -0.757209, -0.740951, -0.724247, -0.707107, -0.689541,
00128 -0.671559, -0.653173, -0.634393, -0.615232, -0.595699, -0.575808,
00129 -0.555570, -0.534998, -0.514103, -0.492898, -0.471397, -0.449611,
00130 -0.427555, -0.405241, -0.382683, -0.359895, -0.336890, -0.313682,
00131 -0.290285, -0.266713, -0.242980, -0.219101, -0.195090, -0.170962,
00132 -0.146730, -0.122411, -0.098017, -0.073565, -0.049068, -0.024541,
00133 -0.000000, 0.024541, 0.049068, 0.073565, 0.098017, 0.122411,
00134 0.146730, 0.170962, 0.195090, 0.219101, 0.242980, 0.266713,
00135 0.290285, 0.313682, 0.336890, 0.359895, 0.382683, 0.405241,
00136 0.427555, 0.449611, 0.471397, 0.492898, 0.514103, 0.534998,
00137 0.555570, 0.575808, 0.595699, 0.615232, 0.634393, 0.653173,
00138 0.671559, 0.689541, 0.707107, 0.724247, 0.740951, 0.757209,
00139 0.773010, 0.788346, 0.803208, 0.817585, 0.831470, 0.844854,
00140 0.857729, 0.870087, 0.881921, 0.893224, 0.903989, 0.914210,
00141 0.923880, 0.932993, 0.941544, 0.949528, 0.956940, 0.963776,
00142 0.970031, 0.975702, 0.980785, 0.985278, 0.989177, 0.992480,
00143 0.995185, 0.997290, 0.998795, 0.999699
00144 };
00145
00146 const double Photon::SIN_PHI [256] =
00147 {
00148 0.000000, 0.024541, 0.049068, 0.073565, 0.098017, 0.122411,
00149 0.146730, 0.170962, 0.195090, 0.219101, 0.242980, 0.266713,
00150 0.290285, 0.313682, 0.336890, 0.359895, 0.382683, 0.405241,
00151 0.427555, 0.449611, 0.471397, 0.492898, 0.514103, 0.534998,
00152 0.555570, 0.575808, 0.595699, 0.615232, 0.634393, 0.653173,
00153 0.671559, 0.689541, 0.707107, 0.724247, 0.740951, 0.757209,
00154 0.773010, 0.788346, 0.803208, 0.817585, 0.831470, 0.844854,
00155 0.857729, 0.870087, 0.881921, 0.893224, 0.903989, 0.914210,
00156 0.923880, 0.932993, 0.941544, 0.949528, 0.956940, 0.963776,
00157 0.970031, 0.975702, 0.980785, 0.985278, 0.989177, 0.992480,
00158 0.995185, 0.997290, 0.998795, 0.999699, 1.000000, 0.999699,
00159 0.998795, 0.997290, 0.995185, 0.992480, 0.989177, 0.985278,
00160 0.980785, 0.975702, 0.970031, 0.963776, 0.956940, 0.949528,
00161 0.941544, 0.932993, 0.923880, 0.914210, 0.903989, 0.893224,
00162 0.881921, 0.870087, 0.857729, 0.844854, 0.831470, 0.817585,
00163 0.803208, 0.788346, 0.773010, 0.757209, 0.740951, 0.724247,
00164 0.707107, 0.689541, 0.671559, 0.653173, 0.634393, 0.615232,
00165 0.595699, 0.575808, 0.555570, 0.534998, 0.514103, 0.492898,
00166 0.471397, 0.449611, 0.427555, 0.405241, 0.382683, 0.359895,
00167 0.336890, 0.313682, 0.290285, 0.266713, 0.242980, 0.219101,
00168 0.195090, 0.170962, 0.146730, 0.122411, 0.098017, 0.073565,
00169 0.049068, 0.024541, 0.000000, -0.024541, -0.049068, -0.073565,
00170 -0.098017, -0.122411, -0.146730, -0.170962, -0.195090, -0.219101,
00171 -0.242980, -0.266713, -0.290285, -0.313682, -0.336890, -0.359895,
00172 -0.382683, -0.405241, -0.427555, -0.449611, -0.471397, -0.492898,
00173 -0.514103, -0.534998, -0.555570, -0.575808, -0.595699, -0.615232,
00174 -0.634393, -0.653173, -0.671559, -0.689541, -0.707107, -0.724247,
00175 -0.740951, -0.757209, -0.773010, -0.788346, -0.803208, -0.817585,
00176 -0.831470, -0.844854, -0.857729, -0.870087, -0.881921, -0.893224,
00177 -0.903989, -0.914210, -0.923880, -0.932993, -0.941544, -0.949528,
00178 -0.956940, -0.963776, -0.970031, -0.975702, -0.980785, -0.985278,
00179 -0.989177, -0.992480, -0.995185, -0.997290, -0.998795, -0.999699,
00180 -1.000000, -0.999699, -0.998795, -0.997290, -0.995185, -0.992480,
00181 -0.989177, -0.985278, -0.980785, -0.975702, -0.970031, -0.963776,
00182 -0.956940, -0.949528, -0.941544, -0.932993, -0.923880, -0.914210,
00183 -0.903989, -0.893224, -0.881921, -0.870087, -0.857729, -0.844854,
00184 -0.831470, -0.817585, -0.803208, -0.788346, -0.773010, -0.757209,
00185 -0.740951, -0.724247, -0.707107, -0.689541, -0.671559, -0.653173,
00186 -0.634393, -0.615232, -0.595699, -0.575808, -0.555570, -0.534998,
00187 -0.514103, -0.492898, -0.471397, -0.449611, -0.427555, -0.405241,
00188 -0.382683, -0.359895, -0.336890, -0.313682, -0.290285, -0.266713,
00189 -0.242980, -0.219101, -0.195090, -0.170962, -0.146730, -0.122411,
00190 -0.098017, -0.073565, -0.049068, -0.024541
00191 };
00192
00193
00194 Photon::Photon()
00195 {
00196 _position[0] = 0.0;
00197 _position[1] = 0.0;
00198 _position[2] = 0.0;
00199 _power.set(0.0, 0.0, 0.0);
00200 _phi = 0;
00201 _theta = 0;
00202 _plane = 0;
00203 }
00204
00205 Photon::Photon(const Vector3& pos,
00206 const Vector3& dir,
00207 const Vector3& pow)
00208 {
00209 _position[0] = pos.x;
00210 _position[1] = pos.y;
00211 _position[2] = pos.z;
00212 _power.set(pow);
00213
00214 int t = int(acos(dir.z) * (256./M_PI));
00215 _theta = (t > 255) ? 255 : (unsigned char) t;
00216
00217 int p = int(atan2(dir.y, dir.x) * (256./(2.*M_PI)));
00218 _phi = (p > 255) ? 255 : ((unsigned char) ((p < 0) ? (p+256) : p));
00219
00220 _plane = 0;
00221 }
00222
00223 Photon::Photon(const Photon& src)
00224 {
00225 _position[0] = src._position[0];
00226 _position[1] = src._position[1];
00227 _position[2] = src._position[2];
00228 _power.set(src._power);
00229 _theta = src._theta;
00230 _phi = src._phi;
00231 _plane = src._plane;
00232 }
00233
00234 Photon& Photon::operator =(const Photon& src)
00235 {
00236 _position[0] = src._position[0];
00237 _position[1] = src._position[1];
00238 _position[2] = src._position[2];
00239 _power.set(src._power);
00240 _theta = src._theta;
00241 _phi = src._phi;
00242 _plane = src._plane;
00243 return *this;
00244 }
00245
00246