AnalyticCoordinateTransformator.cc
Go to the documentation of this file.
1 #include <utl/AnalyticCoordinateTransformator.h>
2 #include <cmath>
3 
4 using namespace std;
5 using namespace utl;
6 
7 
9 double
10 AnalyticCoordinateTransformator::GetCartesianCovarianceFromSpherical(const unsigned int i, const unsigned int j,
11  const double r, const double theta, const double phi,
12  const double e00, const double e11, const double e22,
13  const double e01, const double e02, const double e12)
14 {
15  const double t1 = cos(phi);
16  const double t2 = t1 * t1;
17  const double t3 = e00 * t2;
18  const double t4 = cos(theta);
19  const double t5 = t4 * t4;
20  const double t6 = e00 * t5;
21  const double t7 = t6 * t2;
22  const double t8 = sin(theta);
23  const double t9 = t8 * t2;
24  const double t10 = r * t4;
25  const double t13 = 0.2e1 * t9 * t10 * e01;
26  const double t14 = t1 * r;
27  const double t15 = sin(phi);
28  const double t16 = t15 * e02;
29  const double t18 = 0.2e1 * t14 * t16;
30  const double t21 = 0.2e1 * t14 * t16 * t5;
31  const double t22 = r * r;
32  const double t23 = t22 * t5;
33  const double t25 = t23 * t2 * e11;
34  const double t26 = t22 * t4;
35  const double t28 = t8 * t15;
36  const double t31 = 0.2e1 * t26 * t1 * t28 * e12;
37  const double t32 = t22 * e22;
38  const double t33 = t22 * t2;
39  const double t34 = t33 * e22;
40  const double t37 = t33 * e22 * t5;
41  const double t38 = t3 - t7 + t13 - t18 + t21 + t25 - t31 + t32 - t34 - t32 * t5 + t37;
42  const double t39 = t1 * t15;
43  const double t42 = t8 * t1;
44  const double t44 = t4 * t15;
45  const double t48 = t2 * r;
46  const double t59 = r * e02;
47  const double t63 = t22 * t15;
48  const double t64 = t1 * e22;
49  const double t68 = t39 * e00 - t39 * t6 + 0.2e1 * t42 * r * t44 * e01 + 0.2e1 * t48 * e02 - 0.2e1 * t48 * e02 * t5 + t23 * t39 * e11 + 0.2e1 * t26 * t9 * e12 - t59 + t59 * t5 - t26 * t8 * e12 - t63 * t64 + t63 * t64 * t5;
50  const double t69 = t4 * e00;
51  const double t72 = r * t5;
52  const double t78 = r * t8;
53  const double t82 = e12 * t5;
54  const double t84 = t42 * t69 - t14 * e01 + 0.2e1 * t72 * t1 * e01 - t26 * t42 * e11 - t78 * t44 * e02 + t63 * e12 - t63 * t82;
55  const double t87 = 0.2e1 * t10 * t8 * e01;
56  const double t88 = t22 * e11;
57  const double t89 = t88 * t5;
58  const double t90 = e00 - t3 - t6 + t7 + t87 - t13 + t18 - t21 + t89 - t25 + t31 + t34 - t37;
59  const double t102 = t22 * t1;
60  const double t105 = t28 * t69 - r * t15 * e01 + 0.2e1 * t72 * t15 * e01 - t26 * t28 * e11 + t78 * t1 * t4 * e02 - t102 * e12 + t102 * t82;
61  const double cg[][3] = {
62  { t38, t68, t84 },
63  { t68, t90, t105 },
64  { t84, t105, t6 - t87 + t88 - t89 }
65  };
66  return cg[i][j];
67 }
68 
69 
71 double
72 AnalyticCoordinateTransformator::GetSphericalCovarianceFromCartesian(const unsigned int i, const unsigned int j,
73  double x2, double y2, const double z2,
74  const double e00, const double e11, const double e22,
75  const double e01, const double e02, const double e12)
76 {
77  if (fabs(x2) < 1e-10 && fabs(y2) < 1e-10) {
78  x2 = 1e-5*z2;
79  y2 = 1e-5*z2;
80  }
81 
82  const double t1 = x2 * x2;
83  const double t2 = e00 * t1;
84  const double t5 = 2 * y2 * x2 * e01;
85  const double t6 = x2 * z2;
86  const double t9 = y2 * y2;
87  const double t10 = e11 * t9;
88  const double t11 = y2 * z2;
89  const double t14 = z2 * z2;
90  const double t17 = t1 + t9 + t14;
91  const double t18 = 1 / t17;
92  const double t20 = t1 * x2;
93  const double t22 = z2 * t1;
94  const double t29 = y2 * e01;
95  const double t32 = x2 * t14;
96  const double t34 = z2 * t9;
97  const double t36 = t9 * y2;
98  const double t42 = t20 * e02 - e00 * t22 + e22 * t22 + e12 * y2 * t1 + t9 * e02 * x2 - 2 * t29 * t6 - e02 * t32 - e11 * t34 + e12 * t36 + t9 * e22 * z2 - e12 * y2 * t14;
99  const double t43 = t1 + t9;
100  const double t45 = sqrt( (t18 * t43));
101  const double t46 = 0.1e1 / t45;
102  const double t48 = t17 * t17;
103  const double t49 = 1 / t48;
104  const double t50 = t49 * t46 * t42;
105  const double t61 = sqrt( t17);
106  const double t64 = 1 / t43;
107  const double t65 = t64 / t61 * (-y2 * e00 * x2 + t1 * e01 - e01 * t9 + y2 * e11 * x2 - e02 * t11 + z2 * e12 * x2);
108  const double t66 = t1 * t1;
109  const double t84 = t9 * t9;
110  const double t110 = t64 * t46 / t61 / t17 * (e00 * x2 * t11 - t1 * e01 * z2 + e01 * t34 - e11 * x2 * t11 - t1 * e02 * y2 - e02 * t36 + t20 * e12 + t9 * x2 * e12);
111  const double t114 = t43 * t43;
112  const double cg[][3] = {
113  { t18 * (t2 + t5 + 2 * e02 * t6 + t10 + 2 * e12 * t11 + t14 * e22), -t50, t65 },
114  { -t50, t49 * t64 * (t66 * e22 - 2 * t20 * e02 * z2 - 2 * y2 * e12 * t22 + 2 * t9 * e22 * t1 + t14 * t2 - 2 * t9 * e02 * t6 + 2 * t32 * t29 + t14 * t10 + t84 * e22 - 2 * e12 * t36 * z2), -t110 },
115  { t65, -t110, 1 / t114 * (e00 * t9 - t5 + e11 * t1) }
116  };
117  return cg[i][j];
118 }
119 
120 
121 double
122 AnalyticCoordinateTransformator::GetRadiusFromCartesianCoordinates(const double x, const double y, const double z)
123 {
124  return sqrt(pow(x, 2) + pow(y, 2) + pow(z, 2));
125 }
126 
127 
128 double
129 AnalyticCoordinateTransformator::GetAzimuthFromCartesianCoordinates(const double x, const double y)
130 {
131  double azimuth = atan2(y, x);
132  if (azimuth < 0) {
133  azimuth += 2*M_PI;
134  }
135  return azimuth;
136 }
137 
138 
139 double
140 AnalyticCoordinateTransformator::GetZenithFromCartesianCoordinates(const double x, const double y, const double z)
141 {
142  return acos(z / GetRadiusFromCartesianCoordinates(x,y,z));
143 }
144 
145 
146 double
147 AnalyticCoordinateTransformator::GetXFromSphericalCoordinates(const double r, const double zenith, const double azimuth)
148 {
149  return r*cos(azimuth)*sin(zenith);
150 }
151 
152 
153 double
154 AnalyticCoordinateTransformator::GetYFromSphericalCoordinates(const double r, const double zenith, const double azimuth)
155 {
156  return r*sin(azimuth)*sin(zenith);
157 }
158 
159 
160 double
161 AnalyticCoordinateTransformator::GetZFromSphericalCoordinates(const double r, const double zenith)
162 {
163  return r*cos(zenith);
164 }
double pow(const double x, const unsigned int i)
a t3: algo, second, usecond and a vector of &lt;t3stat&gt;
Definition: XbT2.h:29
a second level trigger
Definition: XbT2.h:8

, generated on Tue Sep 26 2023.