@@ -0,0 +1,25 | |||
|
1 | {% load static %} | |
|
2 | {% load bootstrap3 %} | |
|
3 | {% load main_tags %} | |
|
4 | ||
|
5 | {% block content %} | |
|
6 | <style> | |
|
7 | </style> | |
|
8 | ||
|
9 | <div id="PictureOverJRODown" style="float: right"> | |
|
10 | <img id="imgMainDown" src="{% url 'url_plot_down_beam' beam.abs_conf.id beam.id %}" alt="Error in Parameters" style="width:360px;height:270px;"> | |
|
11 | <img id="imgLoaderDown" src="{% static 'images/loading_loading.gif' %}" alt="Error in Parameters" width="50" height="50" align="left"> | |
|
12 | ||
|
13 | </div> | |
|
14 | ||
|
15 | <script> | |
|
16 | ||
|
17 | $('#imgMainDown').hide(); | |
|
18 | $('#imgLoaderDown').show(); | |
|
19 | $('#imgMainDown').load(function(){ | |
|
20 | $('#imgLoaderDown').hide(); | |
|
21 | $('#imgMainDown').show(); | |
|
22 | }); | |
|
23 | //window.onload = function () { alert("It's loaded!") } | |
|
24 | </script> | |
|
25 | {% endblock %} |
@@ -0,0 +1,25 | |||
|
1 | {% load static %} | |
|
2 | {% load bootstrap3 %} | |
|
3 | {% load main_tags %} | |
|
4 | ||
|
5 | {% block content %} | |
|
6 | <style> | |
|
7 | </style> | |
|
8 | ||
|
9 | <div id="PictureOverJROUp" style="float: right"> | |
|
10 | <img id="imgMain" src="{% url 'url_plot_up_beam' beam.abs_conf.id beam.id %}" alt="Error in Parameters" style="width:360px;height:270px;"> | |
|
11 | <img id="imgLoader" src="{% static 'images/loading_loading.gif' %}" alt="Error in Parameters" width="50" height="50"> | |
|
12 | ||
|
13 | </div> | |
|
14 | ||
|
15 | <script> | |
|
16 | ||
|
17 | $('#imgMain').hide(); | |
|
18 | $('#imgLoader').show(); | |
|
19 | $('#imgMain').load(function(){ | |
|
20 | $('#imgLoader').hide(); | |
|
21 | $('#imgMain').show(); | |
|
22 | }); | |
|
23 | ||
|
24 | </script> | |
|
25 | {% endblock %} |
This diff has been collapsed as it changes many lines, (1419 lines changed) Show them Hide them | |||
@@ -0,0 +1,1419 | |||
|
1 | """ | |
|
2 | The module ASTRO_COORDS.py gathers classes and functions for coordinates transformation. Additiona- | |
|
3 | lly a class EquatorialCorrections and celestial bodies are defined. The first of these is to correct | |
|
4 | any error in the location of the body and the second to know the location of certain celestial bo- | |
|
5 | dies in the sky. | |
|
6 | ||
|
7 | MODULES CALLED: | |
|
8 | OS, NUMPY, NUMERIC, SCIPY, TIME_CONVERSIONS | |
|
9 | ||
|
10 | MODIFICATION HISTORY: | |
|
11 | Created by Ing. Freddy Galindo (frederickgalindo@gmail.com). ROJ Sep 20, 2009. | |
|
12 | """ | |
|
13 | ||
|
14 | import numpy | |
|
15 | #import Numeric | |
|
16 | import scipy.interpolate | |
|
17 | import os | |
|
18 | import sys | |
|
19 | import TimeTools | |
|
20 | import Misc_Routines | |
|
21 | ||
|
22 | class EquatorialCorrections(): | |
|
23 | def __init__(self): | |
|
24 | """ | |
|
25 | EquatorialCorrections class creates an object to call methods to correct the loca- | |
|
26 | tion of the celestial bodies. | |
|
27 | ||
|
28 | Modification History | |
|
29 | -------------------- | |
|
30 | Converted to Object-oriented Programming by Freddy Galindo, ROJ, 27 September 2009. | |
|
31 | """ | |
|
32 | ||
|
33 | pass | |
|
34 | ||
|
35 | def co_nutate(self,jd,ra,dec): | |
|
36 | """ | |
|
37 | co_nutate calculates changes in RA and Dec due to nutation of the Earth's rotation | |
|
38 | Additionally it returns the obliquity of the ecliptic (eps), nutation in the longi- | |
|
39 | tude of the ecliptic (d_psi) and nutation in the pbliquity of the ecliptic (d_eps). | |
|
40 | ||
|
41 | Parameters | |
|
42 | ---------- | |
|
43 | jd = Julian Date (Scalar or array). | |
|
44 | RA = A scalar o array giving the Right Ascention of interest. | |
|
45 | Dec = A scalar o array giving the Right Ascention of interest. | |
|
46 | ||
|
47 | Return | |
|
48 | ------ | |
|
49 | d_ra = Correction to ra due to nutation. | |
|
50 | d_dec = Correction to dec due to nutation. | |
|
51 | ||
|
52 | Examples | |
|
53 | -------- | |
|
54 | >> Julian = 2462088.7 | |
|
55 | >> Ra = 41.547213 | |
|
56 | >> Dec = 49.348483 | |
|
57 | >> [d_ra,d_dec,eps,d_psi,d_eps] = co_nutate(julian,Ra,Dec) | |
|
58 | >> print d_ra, d_dec, eps, d_psi, d_eps | |
|
59 | [ 15.84276651] [ 6.21641029] [ 0.4090404] [ 14.85990198] [ 2.70408658] | |
|
60 | ||
|
61 | Modification history | |
|
62 | -------------------- | |
|
63 | Written by Chris O'Dell, 2002. | |
|
64 | Converted to Python by Freddy R. Galindo, ROJ, 26 September 2009. | |
|
65 | """ | |
|
66 | ||
|
67 | jd = numpy.atleast_1d(jd) | |
|
68 | ra = numpy.atleast_1d(ra) | |
|
69 | dec = numpy.atleast_1d(dec) | |
|
70 | ||
|
71 | # Useful transformation constants | |
|
72 | d2as = numpy.pi/(180.*3600.) | |
|
73 | ||
|
74 | # Julian centuries from J2000 of jd | |
|
75 | T = (jd - 2451545.0)/36525.0 | |
|
76 | ||
|
77 | # Must calculate obliquity of ecliptic | |
|
78 | [d_psi, d_eps] = self.nutate(jd) | |
|
79 | d_psi = numpy.atleast_1d(d_psi) | |
|
80 | d_eps = numpy.atleast_1d(d_eps) | |
|
81 | ||
|
82 | eps0 = (23.4392911*3600.) - (46.8150*T) - (0.00059*T**2) + (0.001813*T**3) | |
|
83 | # True obliquity of the ecliptic in radians | |
|
84 | eps = (eps0 + d_eps)/3600.*Misc_Routines.CoFactors.d2r | |
|
85 | ||
|
86 | # Useful numbers | |
|
87 | ce = numpy.cos(eps) | |
|
88 | se = numpy.sin(eps) | |
|
89 | ||
|
90 | # Convert Ra-Dec to equatorial rectangular coordinates | |
|
91 | x = numpy.cos(ra*Misc_Routines.CoFactors.d2r)*numpy.cos(dec*Misc_Routines.CoFactors.d2r) | |
|
92 | y = numpy.sin(ra*Misc_Routines.CoFactors.d2r)*numpy.cos(dec*Misc_Routines.CoFactors.d2r) | |
|
93 | z = numpy.sin(dec*Misc_Routines.CoFactors.d2r) | |
|
94 | ||
|
95 | # Apply corrections to each rectangular coordinate | |
|
96 | x2 = x - (y*ce + z*se)*d_psi*Misc_Routines.CoFactors.s2r | |
|
97 | y2 = y + (x*ce*d_psi - z*d_eps)*Misc_Routines.CoFactors.s2r | |
|
98 | z2 = z + (x*se*d_psi + y*d_eps)*Misc_Routines.CoFactors.s2r | |
|
99 | ||
|
100 | # Convert bask to equatorial spherical coordinates | |
|
101 | r = numpy.sqrt(x2**2. + y2**2. + z2**2.) | |
|
102 | xyproj =numpy.sqrt(x2**2. + y2**2.) | |
|
103 | ||
|
104 | ra2 = x2*0.0 | |
|
105 | dec2 = x2*0.0 | |
|
106 | ||
|
107 | xyproj = numpy.atleast_1d(xyproj) | |
|
108 | z = numpy.atleast_1d(z) | |
|
109 | r = numpy.atleast_1d(r) | |
|
110 | x2 = numpy.atleast_1d(x2) | |
|
111 | y2 = numpy.atleast_1d(y2) | |
|
112 | z2 = numpy.atleast_1d(z2) | |
|
113 | ra2 = numpy.atleast_1d(ra2) | |
|
114 | dec2 = numpy.atleast_1d(dec2) | |
|
115 | ||
|
116 | w1 = numpy.where((xyproj==0) & (z!=0)) | |
|
117 | w2 = numpy.where(xyproj!=0) | |
|
118 | ||
|
119 | # Calculate Ra and Dec in radians (later convert to degrees) | |
|
120 | if w1[0].size>0: | |
|
121 | # Places where xyproj=0 (point at NCP or SCP) | |
|
122 | dec2[w1] = numpy.arcsin(z2[w1]/r[w1]) | |
|
123 | ra2[w1] = 0 | |
|
124 | ||
|
125 | if w2[0].size>0: | |
|
126 | # Places other than NCP or SCP | |
|
127 | ra2[w2] = numpy.arctan2(y2[w2],x2[w2]) | |
|
128 | dec2[w2] = numpy.arcsin(z2[w2]/r[w2]) | |
|
129 | ||
|
130 | # Converting to degree | |
|
131 | ra2 = ra2/Misc_Routines.CoFactors.d2r | |
|
132 | dec2 = dec2/Misc_Routines.CoFactors.d2r | |
|
133 | ||
|
134 | w = numpy.where(ra2<0.) | |
|
135 | if w[0].size>0: | |
|
136 | ra2[w] = ra2[w] + 360. | |
|
137 | ||
|
138 | # Return changes in Ra and Dec in arcseconds | |
|
139 | d_ra = (ra2 -ra)*3600. | |
|
140 | d_dec = (dec2 - dec)*3600. | |
|
141 | ||
|
142 | return d_ra, d_dec, eps, d_psi, d_eps | |
|
143 | ||
|
144 | def nutate(self,jd): | |
|
145 | """ | |
|
146 | nutate returns the nutation in longitude and obliquity for a given Julian date. | |
|
147 | ||
|
148 | Parameters | |
|
149 | ---------- | |
|
150 | jd = Julian ephemeris date, scalar or vector. | |
|
151 | ||
|
152 | Return | |
|
153 | ------ | |
|
154 | nut_long = The nutation in longitude. | |
|
155 | nut_obliq = The nutation in latitude. | |
|
156 | ||
|
157 | Example | |
|
158 | ------- | |
|
159 | >> julian = 2446895.5 | |
|
160 | >> [nut_long,nut_obliq] = nutate(julian) | |
|
161 | >> print nut_long, nut_obliq | |
|
162 | -3.78793107711 9.44252069864 | |
|
163 | ||
|
164 | >> julians = 2415020.5 + numpy.arange(50) | |
|
165 | >> [nut_long,nut_obliq] = nutate(julians) | |
|
166 | ||
|
167 | Modification History | |
|
168 | -------------------- | |
|
169 | Written by W.Landsman (Goddard/HSTX), June 1996. | |
|
170 | Converted to Python by Freddy R. Galindo, ROJ, 26 September 2009. | |
|
171 | """ | |
|
172 | ||
|
173 | jd = numpy.atleast_1d(jd) | |
|
174 | ||
|
175 | # Form time in Julian centuries from 1900 | |
|
176 | t = (jd - 2451545.0)/36525.0 | |
|
177 | ||
|
178 | # Mean elongation of the moon | |
|
179 | coeff1 = numpy.array([1/189474.0,-0.0019142,445267.111480,297.85036]) | |
|
180 | d = numpy.poly1d(coeff1) | |
|
181 | d = d(t)*Misc_Routines.CoFactors.d2r | |
|
182 | d = self.cirrange(d,rad=1) | |
|
183 | ||
|
184 | # Sun's mean elongation | |
|
185 | coeff2 = numpy.array([-1./3e5,-0.0001603,35999.050340,357.52772]) | |
|
186 | m = numpy.poly1d(coeff2) | |
|
187 | m = m(t)*Misc_Routines.CoFactors.d2r | |
|
188 | m = self.cirrange(m,rad=1) | |
|
189 | ||
|
190 | # Moon's mean elongation | |
|
191 | coeff3 = numpy.array([1.0/5.625e4,0.0086972,477198.867398,134.96298]) | |
|
192 | mprime = numpy.poly1d(coeff3) | |
|
193 | mprime = mprime(t)*Misc_Routines.CoFactors.d2r | |
|
194 | mprime = self.cirrange(mprime,rad=1) | |
|
195 | ||
|
196 | # Moon's argument of latitude | |
|
197 | coeff4 = numpy.array([-1.0/3.27270e5,-0.0036825,483202.017538,93.27191]) | |
|
198 | f = numpy.poly1d(coeff4) | |
|
199 | f = f(t)*Misc_Routines.CoFactors.d2r | |
|
200 | f = self.cirrange(f,rad=1) | |
|
201 | ||
|
202 | # Longitude fo the ascending node of the Moon's mean orbit on the ecliptic, measu- | |
|
203 | # red from the mean equinox of the date. | |
|
204 | coeff5 = numpy.array([1.0/4.5e5,0.0020708,-1934.136261,125.04452]) | |
|
205 | omega = numpy.poly1d(coeff5) | |
|
206 | omega = omega(t)*Misc_Routines.CoFactors.d2r | |
|
207 | omega = self.cirrange(omega,rad=1) | |
|
208 | ||
|
209 | d_lng = numpy.array([0,-2,0,0,0,0,-2,0,0,-2,-2,-2,0,2,0,2,0,0,-2,0,2,0,0,-2,0,-2,0,0,\ | |
|
210 | 2,-2,0,-2,0,0,2,2,0,-2,0,2,2,-2,-2,2,2,0,-2,-2,0,-2,-2,0,-1,-2,1,0,0,-1,0,\ | |
|
211 | 0,2,0,2]) | |
|
212 | ||
|
213 | m_lng = numpy.array([0,0,0,0,1,0,1,0,0,-1]) | |
|
214 | m_lng = numpy.append(m_lng,numpy.zeros(17)) | |
|
215 | m_lng = numpy.append(m_lng,numpy.array([2,0,2,1,0,-1,0,0,0,1,1,-1,0,0,0,0,0,0,-1,-1,0,0,\ | |
|
216 | 0,1,0,0,1,0,0,0,-1,1,-1,-1,0,-1])) | |
|
217 | ||
|
218 | mp_lng = numpy.array([0,0,0,0,0,1,0,0,1,0,1,0,-1,0,1,-1,-1,1,2,-2,0,2,2,1,0,0, -1, 0,\ | |
|
219 | -1,0,0,1,0,2,-1,1,0,1,0,0,1,2,1,-2,0,1,0,0,2,2,0,1,1,0,0,1,-2,1,1,1,-1,3,0]) | |
|
220 | ||
|
221 | f_lng = numpy.array([0,2,2,0,0,0,2,2,2,2,0,2,2,0,0,2,0,2,0,2,2,2,0,2,2,2,2,0,0,2,0,0,\ | |
|
222 | 0,-2,2,2,2,0,2,2,0,2,2,0,0,0,2,0,2,0,2,-2,0,0,0,2,2,0,0,2,2,2,2]) | |
|
223 | ||
|
224 | om_lng = numpy.array([1,2,2,2,0,0,2,1,2,2,0,1,2,0,1,2,1,1,0,1,2,2,0,2,0,0,1,0,1,2,1, \ | |
|
225 | 1,1,0,1,2,2,0,2,1,0,2,1,1,1,0,1,1,1,1,1,0,0,0,0,0,2,0,0,2,2,2,2]) | |
|
226 | ||
|
227 | sin_lng = numpy.array([-171996,-13187,-2274,2062,1426,712,-517,-386,-301, 217, -158, \ | |
|
228 | 129,123,63,63,-59,-58,-51,48,46,-38,-31,29,29,26,-22,21,17,16,-16,-15,-13,\ | |
|
229 | -12,11,-10,-8,7,-7,-7,-7,6,6,6,-6,-6,5,-5,-5,-5,4,4,4,-4,-4,-4,3,-3,-3,-3,\ | |
|
230 | -3,-3,-3,-3]) | |
|
231 | ||
|
232 | sdelt = numpy.array([-174.2,-1.6,-0.2,0.2,-3.4,0.1,1.2,-0.4,0,-0.5,0, 0.1, 0, 0, 0.1,\ | |
|
233 | 0,-0.1]) | |
|
234 | sdelt = numpy.append(sdelt,numpy.zeros(10)) | |
|
235 | sdelt = numpy.append(sdelt,numpy.array([-0.1, 0, 0.1])) | |
|
236 | sdelt = numpy.append(sdelt,numpy.zeros(33)) | |
|
237 | ||
|
238 | cos_lng = numpy.array([92025,5736,977,-895,54,-7,224,200,129,-95,0,-70,-53,0,-33,26, \ | |
|
239 | 32,27,0,-24,16,13,0,-12,0,0,-10,0,-8,7,9,7,6,0,5,3,-3,0,3,3,0,-3,-3,3,3,0,\ | |
|
240 | 3,3,3]) | |
|
241 | cos_lng = numpy.append(cos_lng,numpy.zeros(14)) | |
|
242 | ||
|
243 | cdelt = numpy.array([8.9,-3.1,-0.5,0.5,-0.1,0.0,-0.6,0.0,-0.1,0.3]) | |
|
244 | cdelt = numpy.append(cdelt,numpy.zeros(53)) | |
|
245 | ||
|
246 | # Sum the periodic terms. | |
|
247 | n = numpy.size(jd) | |
|
248 | nut_long = numpy.zeros(n) | |
|
249 | nut_obliq = numpy.zeros(n) | |
|
250 | ||
|
251 | d_lng = d_lng.reshape(numpy.size(d_lng),1) | |
|
252 | d = d.reshape(numpy.size(d),1) | |
|
253 | matrix_d_lng = numpy.dot(d_lng,d.transpose()) | |
|
254 | ||
|
255 | m_lng = m_lng.reshape(numpy.size(m_lng),1) | |
|
256 | m = m.reshape(numpy.size(m),1) | |
|
257 | matrix_m_lng = numpy.dot(m_lng,m.transpose()) | |
|
258 | ||
|
259 | mp_lng = mp_lng.reshape(numpy.size(mp_lng),1) | |
|
260 | mprime = mprime.reshape(numpy.size(mprime),1) | |
|
261 | matrix_mp_lng = numpy.dot(mp_lng,mprime.transpose()) | |
|
262 | ||
|
263 | f_lng = f_lng.reshape(numpy.size(f_lng),1) | |
|
264 | f = f.reshape(numpy.size(f),1) | |
|
265 | matrix_f_lng = numpy.dot(f_lng,f.transpose()) | |
|
266 | ||
|
267 | om_lng = om_lng.reshape(numpy.size(om_lng),1) | |
|
268 | omega = omega.reshape(numpy.size(omega),1) | |
|
269 | matrix_om_lng = numpy.dot(om_lng,omega.transpose()) | |
|
270 | ||
|
271 | arg = matrix_d_lng + matrix_m_lng + matrix_mp_lng + matrix_f_lng + matrix_om_lng | |
|
272 | ||
|
273 | sarg = numpy.sin(arg) | |
|
274 | carg = numpy.cos(arg) | |
|
275 | ||
|
276 | for ii in numpy.arange(n): | |
|
277 | nut_long[ii] = 0.0001*numpy.sum((sdelt*t[ii] + sin_lng)*sarg[:,ii]) | |
|
278 | nut_obliq[ii] = 0.0001*numpy.sum((cdelt*t[ii] + cos_lng)*carg[:,ii]) | |
|
279 | ||
|
280 | if numpy.size(jd)==1: | |
|
281 | nut_long = nut_long[0] | |
|
282 | nut_obliq = nut_obliq[0] | |
|
283 | ||
|
284 | return nut_long, nut_obliq | |
|
285 | ||
|
286 | def co_aberration(self,jd,ra,dec): | |
|
287 | """ | |
|
288 | co_aberration calculates changes to Ra and Dec due to "the effect of aberration". | |
|
289 | ||
|
290 | Parameters | |
|
291 | ---------- | |
|
292 | jd = Julian Date (Scalar or vector). | |
|
293 | ra = A scalar o vector giving the Right Ascention of interest. | |
|
294 | dec = A scalar o vector giving the Declination of interest. | |
|
295 | ||
|
296 | Return | |
|
297 | ------ | |
|
298 | d_ra = The correction to right ascension due to aberration (must be added to ra to | |
|
299 | get the correct value). | |
|
300 | d_dec = The correction to declination due to aberration (must be added to the dec | |
|
301 | to get the correct value). | |
|
302 | eps = True obliquity of the ecliptic (in radians). | |
|
303 | ||
|
304 | Examples | |
|
305 | -------- | |
|
306 | >> Julian = 2462088.7 | |
|
307 | >> Ra = 41.547213 | |
|
308 | >> Dec = 49.348483 | |
|
309 | >> [d_ra,d_dec,eps] = co_aberration(julian,Ra,Dec) | |
|
310 | >> print d_ra, d_dec, eps | |
|
311 | [ 30.04441796] [ 6.69837858] [ 0.40904059] | |
|
312 | ||
|
313 | Modification history | |
|
314 | -------------------- | |
|
315 | Written by Chris O'Dell , Univ. of Wisconsin, June 2002. | |
|
316 | Converted to Python by Freddy R. Galindo, ROJ, 27 September 2009. | |
|
317 | """ | |
|
318 | ||
|
319 | # Julian centuries from J2000 of jd. | |
|
320 | T = (jd - 2451545.0)/36525.0 | |
|
321 | ||
|
322 | # Getting obliquity of ecliptic | |
|
323 | njd = numpy.size(jd) | |
|
324 | jd = numpy.atleast_1d(jd) | |
|
325 | ra = numpy.atleast_1d(ra) | |
|
326 | dec = numpy.atleast_1d(dec) | |
|
327 | ||
|
328 | d_psi = numpy.zeros(njd) | |
|
329 | d_epsilon = d_psi | |
|
330 | for ii in numpy.arange(njd): | |
|
331 | [dp,de] = self.nutate(jd[ii]) | |
|
332 | d_psi[ii] = dp | |
|
333 | d_epsilon[ii] = de | |
|
334 | ||
|
335 | coeff = 23 + 26/60. + 21.488/3600. | |
|
336 | eps0 = coeff*3600. - 46.8150*T - 0.00059*T**2. + 0.001813*T**3. | |
|
337 | # True obliquity of the ecliptic in radians | |
|
338 | eps = (eps0 + d_epsilon)/3600*Misc_Routines.CoFactors.d2r | |
|
339 | ||
|
340 | celestialbodies = CelestialBodies() | |
|
341 | [sunra,sundec,sunlon,sunobliq] = celestialbodies.sunpos(jd) | |
|
342 | ||
|
343 | # Earth's orbital eccentricity | |
|
344 | e = 0.016708634 - 0.000042037*T - 0.0000001267*T**2. | |
|
345 | ||
|
346 | # longitude of perihelion, in degrees | |
|
347 | pi = 102.93735 + 1.71946*T + 0.00046*T**2 | |
|
348 | ||
|
349 | # Constant of aberration, in arcseconds | |
|
350 | k = 20.49552 | |
|
351 | ||
|
352 | cd = numpy.cos(dec*Misc_Routines.CoFactors.d2r) ; sd = numpy.sin(dec*Misc_Routines.CoFactors.d2r) | |
|
353 | ce = numpy.cos(eps) ; te = numpy.tan(eps) | |
|
354 | cp = numpy.cos(pi*Misc_Routines.CoFactors.d2r) ; sp = numpy.sin(pi*Misc_Routines.CoFactors.d2r) | |
|
355 | cs = numpy.cos(sunlon*Misc_Routines.CoFactors.d2r) ; ss = numpy.sin(sunlon*Misc_Routines.CoFactors.d2r) | |
|
356 | ca = numpy.cos(ra*Misc_Routines.CoFactors.d2r) ; sa = numpy.sin(ra*Misc_Routines.CoFactors.d2r) | |
|
357 | ||
|
358 | term1 = (ca*cs*ce + sa*ss)/cd | |
|
359 | term2 = (ca*cp*ce + sa*sp)/cd | |
|
360 | term3 = (cs*ce*(te*cd - sa*sd) + ca*sd*ss) | |
|
361 | term4 = (cp*ce*(te*cd - sa*sd) + ca*sd*sp) | |
|
362 | ||
|
363 | d_ra = -k*term1 + e*k*term2 | |
|
364 | d_dec = -k*term3 + e*k*term4 | |
|
365 | ||
|
366 | return d_ra, d_dec, eps | |
|
367 | ||
|
368 | def precess(self,ra,dec,equinox1=None,equinox2=None,FK4=0,rad=0): | |
|
369 | """ | |
|
370 | precess coordinates from EQUINOX1 to EQUINOX2 | |
|
371 | ||
|
372 | Parameters | |
|
373 | ----------- | |
|
374 | ra = A scalar o vector giving the Right Ascention of interest. | |
|
375 | dec = A scalar o vector giving the Declination of interest. | |
|
376 | equinox1 = Original equinox of coordinates, numeric scalar. If omitted, the __Pre- | |
|
377 | cess will query for equinox1 and equinox2. | |
|
378 | equinox2 = Original equinox of coordinates. | |
|
379 | FK4 = If this keyword is set and non-zero, the FK4 (B1950) system will be used | |
|
380 | otherwise FK5 (J2000) will be used instead. | |
|
381 | rad = If this keyword is set and non-zero, then the input and output RAD and DEC | |
|
382 | vectors are in radian rather than degree. | |
|
383 | ||
|
384 | Return | |
|
385 | ------ | |
|
386 | ra = Right ascension after precession (scalar or vector) in degrees, unless the rad | |
|
387 | keyword is set. | |
|
388 | dec = Declination after precession (scalar or vector) in degrees, unless the rad | |
|
389 | keyword is set. | |
|
390 | ||
|
391 | Examples | |
|
392 | -------- | |
|
393 | >> Ra = 329.88772 | |
|
394 | >> Dec = -56.992515 | |
|
395 | >> [p_ra,p_dec] = precess(Ra,Dec,1950,1975,FK4=1) | |
|
396 | >> print p_ra, p_dec | |
|
397 | [ 330.31442971] [-56.87186154] | |
|
398 | ||
|
399 | Modification history | |
|
400 | -------------------- | |
|
401 | Written by Wayne Landsman, STI Corporation, August 1986. | |
|
402 | Converted to Python by Freddy R. Galindo, ROJ, 27 September 2009. | |
|
403 | """ | |
|
404 | ||
|
405 | npts = numpy.size(ra) | |
|
406 | ra = numpy.atleast_1d(ra) | |
|
407 | dec = numpy.atleast_1d(dec) | |
|
408 | ||
|
409 | if rad==0: | |
|
410 | ra_rad = ra*Misc_Routines.CoFactors.d2r | |
|
411 | dec_rad = dec*Misc_Routines.CoFactors.d2r | |
|
412 | else: | |
|
413 | ra_rad = ra | |
|
414 | dec_rad = dec | |
|
415 | ||
|
416 | x = numpy.zeros((npts,3)) | |
|
417 | x[:,0] = numpy.cos(dec_rad)*numpy.cos(ra_rad) | |
|
418 | x[:,1] = numpy.cos(dec_rad)*numpy.sin(ra_rad) | |
|
419 | x[:,2] = numpy.sin(dec_rad) | |
|
420 | ||
|
421 | # Use premat function to get precession matrix from equinox1 to equinox2 | |
|
422 | r = self.premat(equinox1,equinox2,FK4) | |
|
423 | ||
|
424 | x2 = numpy.dot(r,x.transpose()) | |
|
425 | ||
|
426 | ra_rad = numpy.arctan2(x2[1,:],x2[0,:]) | |
|
427 | dec_rad = numpy.arcsin(x2[2,:]) | |
|
428 | ||
|
429 | if rad==0: | |
|
430 | ra = ra_rad/Misc_Routines.CoFactors.d2r | |
|
431 | ra = ra + (ra<0)*360. | |
|
432 | dec = dec_rad/Misc_Routines.CoFactors.d2r | |
|
433 | else: | |
|
434 | ra = ra_rad | |
|
435 | ra = ra + (ra<0)*numpy.pi*2. | |
|
436 | dec = dec_rad | |
|
437 | ||
|
438 | return ra, dec | |
|
439 | ||
|
440 | def premat(self,equinox1,equinox2,FK4=0): | |
|
441 | """ | |
|
442 | premat returns the precession matrix needed to go from EQUINOX1 to EQUINOX2. | |
|
443 | ||
|
444 | Parameters | |
|
445 | ---------- | |
|
446 | equinox1 = Original equinox of coordinates, numeric scalar. | |
|
447 | equinox2 = Equinox of precessed coordinates. | |
|
448 | FK4 = If this keyword is set and non-zero, the FK4 (B1950) system precession angles | |
|
449 | are used to compute the precession matrix. The default is to use FK5 (J2000) pre- | |
|
450 | cession angles. | |
|
451 | ||
|
452 | Return | |
|
453 | ------ | |
|
454 | r = Precession matrix, used to precess equatorial rectangular coordinates. | |
|
455 | ||
|
456 | Examples | |
|
457 | -------- | |
|
458 | >> matrix = premat(1950.0,1975.0,FK4=1) | |
|
459 | >> print matrix | |
|
460 | [[ 9.99981438e-01 -5.58774959e-03 -2.42908517e-03] | |
|
461 | [ 5.58774959e-03 9.99984388e-01 -6.78691471e-06] | |
|
462 | [ 2.42908517e-03 -6.78633095e-06 9.99997050e-01]] | |
|
463 | ||
|
464 | Modification history | |
|
465 | -------------------- | |
|
466 | Written by Wayne Landsman, HSTX Corporation, June 1994. | |
|
467 | Converted to Python by Freddy R. Galindo, ROJ, 27 September 2009. | |
|
468 | """ | |
|
469 | ||
|
470 | t = 0.001*(equinox2 - equinox1) | |
|
471 | ||
|
472 | if FK4==0: | |
|
473 | st=0.001*(equinox1 - 2000.) | |
|
474 | # Computing 3 rotation angles. | |
|
475 | A=Misc_Routines.CoFactors.s2r*t*(23062.181+st*(139.656+0.0139*st)+t*(30.188-0.344*st+17.998*t)) | |
|
476 | B=Misc_Routines.CoFactors.s2r*t*t*(79.280+0.410*st+0.205*t)+A | |
|
477 | C=Misc_Routines.CoFactors.s2r*t*(20043.109-st*(85.33+0.217*st)+ t*(-42.665-0.217*st-41.833*t)) | |
|
478 | else: | |
|
479 | st=0.001*(equinox1 - 1900) | |
|
480 | # Computing 3 rotation angles | |
|
481 | A=Misc_Routines.CoFactors.s2r*t*(23042.53+st*(139.75+0.06*st)+t*(30.23-0.27*st+18.0*t)) | |
|
482 | B=Misc_Routines.CoFactors.s2r*t*t*(79.27+0.66*st+0.32*t)+A | |
|
483 | C=Misc_Routines.CoFactors.s2r*t*(20046.85-st*(85.33+0.37*st)+t*(-42.67-0.37*st-41.8*t)) | |
|
484 | ||
|
485 | sina = numpy.sin(A); sinb = numpy.sin(B); sinc = numpy.sin(C) | |
|
486 | cosa = numpy.cos(A); cosb = numpy.cos(B); cosc = numpy.cos(C) | |
|
487 | ||
|
488 | r = numpy.zeros((3,3)) | |
|
489 | r[:,0] = numpy.array([cosa*cosb*cosc-sina*sinb,sina*cosb+cosa*sinb*cosc,cosa*sinc]) | |
|
490 | r[:,1] = numpy.array([-cosa*sinb-sina*cosb*cosc,cosa*cosb-sina*sinb*cosc,-sina*sinc]) | |
|
491 | r[:,2] = numpy.array([-cosb*sinc,-sinb*sinc,cosc]) | |
|
492 | ||
|
493 | return r | |
|
494 | ||
|
495 | def cirrange(self,angle,rad=0): | |
|
496 | """ | |
|
497 | cirrange forces an angle into the range 0<= angle < 360. | |
|
498 | ||
|
499 | Parameters | |
|
500 | ---------- | |
|
501 | angle = The angle to modify, in degrees. Can be scalar or vector. | |
|
502 | rad = Set to 1 if the angle is specified in radians rather than degrees. It is for- | |
|
503 | ced into the range 0 <= angle < 2 PI | |
|
504 | ||
|
505 | Return | |
|
506 | ------ | |
|
507 | angle = The angle after the modification. | |
|
508 | ||
|
509 | Example | |
|
510 | ------- | |
|
511 | >> angle = cirrange(numpy.array([420,400,361])) | |
|
512 | >> print angle | |
|
513 | >> [60, 40, 1] | |
|
514 | ||
|
515 | Modification History | |
|
516 | -------------------- | |
|
517 | Written by Michael R. Greason, Hughes STX, 10 February 1994. | |
|
518 | Converted to Python by Freddy R. Galindo, ROJ, 26 September 2009. | |
|
519 | """ | |
|
520 | ||
|
521 | angle = numpy.atleast_1d(angle) | |
|
522 | ||
|
523 | if rad==1: | |
|
524 | cnst = numpy.pi*2. | |
|
525 | elif rad==0: | |
|
526 | cnst = 360. | |
|
527 | ||
|
528 | # Deal with the lower limit. | |
|
529 | angle = angle % cnst | |
|
530 | ||
|
531 | # Deal with negative values, if way | |
|
532 | neg = numpy.where(angle<0.0) | |
|
533 | if neg[0].size>0: angle[neg] = angle[neg] + cnst | |
|
534 | ||
|
535 | return angle | |
|
536 | ||
|
537 | ||
|
538 | class CelestialBodies(EquatorialCorrections): | |
|
539 | def __init__(self): | |
|
540 | """ | |
|
541 | CelestialBodies class creates a object to call methods of celestial bodies location. | |
|
542 | ||
|
543 | Modification History | |
|
544 | -------------------- | |
|
545 | Converted to Object-oriented Programming by Freddy Galindo, ROJ, 27 September 2009. | |
|
546 | """ | |
|
547 | ||
|
548 | EquatorialCorrections.__init__(self) | |
|
549 | ||
|
550 | def sunpos(self,jd,rad=0): | |
|
551 | """ | |
|
552 | sunpos method computes the RA and Dec of the Sun at a given date. | |
|
553 | ||
|
554 | Parameters | |
|
555 | ---------- | |
|
556 | jd = The julian date of the day (and time), scalar or vector. | |
|
557 | rad = If this keyword is set and non-zero, then the input and output RAD and DEC | |
|
558 | vectors are in radian rather than degree. | |
|
559 | ||
|
560 | Return | |
|
561 | ------ | |
|
562 | ra = The right ascension of the sun at that date in degrees. | |
|
563 | dec = The declination of the sun at that date in degrees. | |
|
564 | elong = Ecliptic longitude of the sun at that date in degrees. | |
|
565 | obliquity = The declination of the sun at that date in degrees. | |
|
566 | ||
|
567 | Examples | |
|
568 | -------- | |
|
569 | >> jd = 2466880 | |
|
570 | >> [ra,dec,elong,obliquity] = sunpos(jd) | |
|
571 | >> print ra, dec, elong, obliquity | |
|
572 | [ 275.53499556] [-23.33840558] [ 275.08917968] [ 23.43596165] | |
|
573 | ||
|
574 | >> [ra,dec,elong,obliquity] = sunpos(jd,rad=1) | |
|
575 | >> print ra, dec, elong, obliquity | |
|
576 | [ 4.80899288] [-0.40733202] [ 4.80121192] [ 0.40903469] | |
|
577 | ||
|
578 | >> jd = 2450449.5 + numpy.arange(365) | |
|
579 | >> [ra,dec,elong,obliquity] = sunpos(jd) | |
|
580 | ||
|
581 | Modification history | |
|
582 | -------------------- | |
|
583 | Written by Micheal R. Greason, STX Corporation, 28 October 1988. | |
|
584 | Converted to Python by Freddy R. Galindo, ROJ, 27 September 2009. | |
|
585 | """ | |
|
586 | ||
|
587 | jd = numpy.atleast_1d(jd) | |
|
588 | ||
|
589 | # Form time in Julian centuries from 1900. | |
|
590 | t = (jd -2415020.0)/36525.0 | |
|
591 | ||
|
592 | # Form sun's mean longitude | |
|
593 | l = (279.696678+((36000.768925*t) % 360.0))*3600.0 | |
|
594 | ||
|
595 | # Allow for ellipticity of the orbit (equation of centre) using the Earth's mean | |
|
596 | # anomoly ME | |
|
597 | me = 358.475844 + ((35999.049750*t) % 360.0) | |
|
598 | ellcor = (6910.1 - 17.2*t)*numpy.sin(me*Misc_Routines.CoFactors.d2r) + 72.3*numpy.sin(2.0*me*Misc_Routines.CoFactors.d2r) | |
|
599 | l = l + ellcor | |
|
600 | ||
|
601 | # Allow for the Venus perturbations using the mean anomaly of Venus MV | |
|
602 | mv = 212.603219 + ((58517.803875*t) % 360.0) | |
|
603 | vencorr = 4.8*numpy.cos((299.1017 + mv - me)*Misc_Routines.CoFactors.d2r) + \ | |
|
604 | 5.5*numpy.cos((148.3133 + 2.0*mv - 2.0*me )*Misc_Routines.CoFactors.d2r) + \ | |
|
605 | 2.5*numpy.cos((315.9433 + 2.0*mv - 3.0*me )*Misc_Routines.CoFactors.d2r) + \ | |
|
606 | 1.6*numpy.cos((345.2533 + 3.0*mv - 4.0*me )*Misc_Routines.CoFactors.d2r) + \ | |
|
607 | 1.0*numpy.cos((318.15 + 3.0*mv - 5.0*me )*Misc_Routines.CoFactors.d2r) | |
|
608 | l = l + vencorr | |
|
609 | ||
|
610 | # Allow for the Mars perturbations using the mean anomaly of Mars MM | |
|
611 | mm = 319.529425 + ((19139.858500*t) % 360.0) | |
|
612 | marscorr = 2.0*numpy.cos((343.8883 - 2.0*mm + 2.0*me)*Misc_Routines.CoFactors.d2r ) + \ | |
|
613 | 1.8*numpy.cos((200.4017 - 2.0*mm + me)*Misc_Routines.CoFactors.d2r) | |
|
614 | l = l + marscorr | |
|
615 | ||
|
616 | # Allow for the Jupiter perturbations using the mean anomaly of Jupiter MJ | |
|
617 | mj = 225.328328 + ((3034.6920239*t) % 360.0) | |
|
618 | jupcorr = 7.2*numpy.cos((179.5317 - mj + me )*Misc_Routines.CoFactors.d2r) + \ | |
|
619 | 2.6*numpy.cos((263.2167 - mj)*Misc_Routines.CoFactors.d2r) + \ | |
|
620 | 2.7*numpy.cos((87.1450 - 2.0*mj + 2.0*me)*Misc_Routines.CoFactors.d2r) + \ | |
|
621 | 1.6*numpy.cos((109.4933 - 2.0*mj + me)*Misc_Routines.CoFactors.d2r) | |
|
622 | l = l + jupcorr | |
|
623 | ||
|
624 | # Allow for Moons perturbations using mean elongation of the Moon from the Sun D | |
|
625 | d = 350.7376814 + ((445267.11422*t) % 360.0) | |
|
626 | mooncorr = 6.5*numpy.sin(d*Misc_Routines.CoFactors.d2r) | |
|
627 | l = l + mooncorr | |
|
628 | ||
|
629 | # Allow for long period terms | |
|
630 | longterm = + 6.4*numpy.sin((231.19 + 20.20*t)*Misc_Routines.CoFactors.d2r) | |
|
631 | l = l + longterm | |
|
632 | l = (l + 2592000.0) % 1296000.0 | |
|
633 | longmed = l/3600.0 | |
|
634 | ||
|
635 | # Allow for Aberration | |
|
636 | l = l - 20.5 | |
|
637 | ||
|
638 | # Allow for Nutation using the longitude of the Moons mean node OMEGA | |
|
639 | omega = 259.183275 - ((1934.142008*t) % 360.0) | |
|
640 | l = l - 17.2*numpy.sin(omega*Misc_Routines.CoFactors.d2r) | |
|
641 | ||
|
642 | # Form the True Obliquity | |
|
643 | oblt = 23.452294 - 0.0130125*t + (9.2*numpy.cos(omega*Misc_Routines.CoFactors.d2r))/3600.0 | |
|
644 | ||
|
645 | # Form Right Ascension and Declination | |
|
646 | l = l/3600.0 | |
|
647 | ra = numpy.arctan2((numpy.sin(l*Misc_Routines.CoFactors.d2r)*numpy.cos(oblt*Misc_Routines.CoFactors.d2r)),numpy.cos(l*Misc_Routines.CoFactors.d2r)) | |
|
648 | ||
|
649 | neg = numpy.where(ra < 0.0) | |
|
650 | if neg[0].size > 0: ra[neg] = ra[neg] + 2.0*numpy.pi | |
|
651 | ||
|
652 | dec = numpy.arcsin(numpy.sin(l*Misc_Routines.CoFactors.d2r)*numpy.sin(oblt*Misc_Routines.CoFactors.d2r)) | |
|
653 | ||
|
654 | if rad==1: | |
|
655 | oblt = oblt*Misc_Routines.CoFactors.d2r | |
|
656 | longmed = longmed*Misc_Routines.CoFactors.d2r | |
|
657 | else: | |
|
658 | ra = ra/Misc_Routines.CoFactors.d2r | |
|
659 | dec = dec/Misc_Routines.CoFactors.d2r | |
|
660 | ||
|
661 | return ra, dec, longmed, oblt | |
|
662 | ||
|
663 | def moonpos(self,jd,rad=0): | |
|
664 | """ | |
|
665 | moonpos method computes the RA and Dec of the Moon at specified Julian date(s). | |
|
666 | ||
|
667 | Parameters | |
|
668 | ---------- | |
|
669 | jd = The julian date of the day (and time), scalar or vector. | |
|
670 | rad = If this keyword is set and non-zero, then the input and output RAD and DEC | |
|
671 | vectors are in radian rather than degree. | |
|
672 | ||
|
673 | Return | |
|
674 | ------ | |
|
675 | ra = The right ascension of the sun at that date in degrees. | |
|
676 | dec = The declination of the sun at that date in degrees. | |
|
677 | dist = The Earth-moon distance in kilometers (between the center of the Earth and | |
|
678 | the center of the moon). | |
|
679 | geolon = Apparent longitude of the moon in degrees, referred to the ecliptic of the | |
|
680 | specified date(s). | |
|
681 | geolat = Apparent latitude the moon in degrees, referred to the ecliptic of the | |
|
682 | specified date(s). | |
|
683 | ||
|
684 | Examples | |
|
685 | -------- | |
|
686 | >> jd = 2448724.5 | |
|
687 | >> [ra,dec,dist,geolon,geolat] = sunpos(jd) | |
|
688 | >> print ra, dec, dist, geolon, geolat | |
|
689 | [ 134.68846855] [ 13.76836663] [ 368409.68481613] [ 133.16726428] [-3.22912642] | |
|
690 | ||
|
691 | >> [ra,dec,dist,geolon, geolat] = sunpos(jd,rad=1) | |
|
692 | >> print ra, dec, dist, geolon, geolat | |
|
693 | [ 2.35075724] [ 0.24030333] [ 368409.68481613] [ 2.32420722] [-0.05635889] | |
|
694 | ||
|
695 | >> jd = 2450449.5 + numpy.arange(365) | |
|
696 | >> [ra,dec,dist,geolon, geolat] = sunpos(jd) | |
|
697 | ||
|
698 | Modification history | |
|
699 | -------------------- | |
|
700 | Written by Micheal R. Greason, STX Corporation, 31 October 1988. | |
|
701 | Converted to Python by Freddy R. Galindo, ROJ, 06 October 2009. | |
|
702 | """ | |
|
703 | ||
|
704 | jd = numpy.atleast_1d(jd) | |
|
705 | ||
|
706 | # Form time in Julian centuries from 1900. | |
|
707 | t = (jd - 2451545.0)/36525.0 | |
|
708 | ||
|
709 | d_lng = numpy.array([0,2,2,0,0,0,2,2,2,2,0,1,0,2,0,0,4,0,4,2,2,1,1,2,2,4,2,0,2,2,1,2,\ | |
|
710 | 0,0,2,2,2,4,0,3,2,4,0,2,2,2,4,0,4,1,2,0,1,3,4,2,0,1,2,2]) | |
|
711 | ||
|
712 | m_lng = numpy.array([0,0,0,0,1,0,0,-1,0,-1,1,0,1,0,0,0,0,0,0,1,1,0,1,-1,0,0,0,1,0,-1,\ | |
|
713 | 0,-2,1,2,-2,0,0,-1,0,0,1,-1,2,2,1,-1,0,0,-1,0,1,0,1,0,0,-1,2,1,0,0]) | |
|
714 | ||
|
715 | mp_lng = numpy.array([1,-1,0,2,0,0,-2,-1,1,0,-1,0,1,0,1,1,-1,3,-2,-1,0,-1,0,1,2,0,-3,\ | |
|
716 | -2,-1,-2,1,0,2,0,-1,1,0,-1,2,-1,1,-2,-1,-1,-2,0,1,4,0,-2,0,2,1,-2,-3,2,1,-1,3,-1]) | |
|
717 | ||
|
718 | f_lng = numpy.array([0,0,0,0,0,2,0,0,0,0,0,0,0,-2,2,-2,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,\ | |
|
719 | 0,0,0,0,-2,2,0,2,0,0,0,0,0,0,-2,0,0,0,0,-2,-2,0,0,0,0,0,0,0,-2]) | |
|
720 | ||
|
721 | sin_lng = numpy.array([6288774,1274027,658314,213618,-185116,-114332,58793,57066,\ | |
|
722 | 53322,45758,-40923,-34720,-30383,15327,-12528,10980,10675,10034,8548,-7888,\ | |
|
723 | -6766,-5163,4987,4036,3994,3861,3665,-2689,-2602,2390,-2348,2236,-2120,-2069,\ | |
|
724 | 2048,-1773,-1595,1215,-1110,-892,-810,759,-713,-700,691,596,549,537,520,-487,\ | |
|
725 | -399,-381,351,-340,330,327,-323,299,294,0.0]) | |
|
726 | ||
|
727 | cos_lng = numpy.array([-20905355,-3699111,-2955968,-569925,48888,-3149,246158,-152138,\ | |
|
728 | -170733,-204586,-129620,108743,104755,10321,0,79661,-34782,-23210,-21636,24208,\ | |
|
729 | 30824,-8379,-16675,-12831,-10445,-11650,14403,-7003,0,10056,6322, -9884,5751,0,\ | |
|
730 | -4950,4130,0,-3958,0,3258,2616,-1897,-2117,2354,0,0,-1423,-1117,-1571,-1739,0, \ | |
|
731 | -4421,0,0,0,0,1165,0,0,8752.0]) | |
|
732 | ||
|
733 | d_lat = numpy.array([0,0,0,2,2,2,2,0,2,0,2,2,2,2,2,2,2,0,4,0,0,0,1,0,0,0,1,0,4,4,0,4,\ | |
|
734 | 2,2,2,2,0,2,2,2,2,4,2,2,0,2,1,1,0,2,1,2,0,4,4,1,4,1,4,2]) | |
|
735 | ||
|
736 | m_lat = numpy.array([0,0,0,0,0,0,0,0,0,0,-1,0,0,1,-1,-1,-1,1,0,1,0,1,0,1,1,1,0,0,0,0,\ | |
|
737 | 0,0,0,0,-1,0,0,0,0,1,1,0,-1,-2,0,1,1,1,1,1,0,-1,1,0,-1,0,0,0,-1,-2]) | |
|
738 | ||
|
739 | mp_lat = numpy.array([0,1,1,0,-1,-1,0,2,1,2,0,-2,1,0,-1,0,-1,-1,-1,0,0,-1,0,1,1,0,0,\ | |
|
740 | 3,0,-1,1,-2,0,2,1,-2,3,2,-3,-1,0,0,1,0,1,1,0,0,-2,-1,1,-2,2,-2,-1,1,1,-1,0,0]) | |
|
741 | ||
|
742 | f_lat = numpy.array([1,1,-1,-1,1,-1,1,1,-1,-1,-1,-1,1,-1,1,1,-1,-1,-1,1,3,1,1,1,-1,\ | |
|
743 | -1,-1,1,-1,1,-3,1,-3,-1,-1,1,-1,1,-1,1,1,1,1,-1,3,-1,-1,1,-1,-1,1,-1,1,-1,-1, \ | |
|
744 | -1,-1,-1,-1,1]) | |
|
745 | ||
|
746 | sin_lat = numpy.array([5128122,280602,277693,173237,55413,46271, 32573, 17198, 9266, \ | |
|
747 | 8822,8216,4324,4200,-3359,2463,2211,2065,-1870,1828,-1794, -1749, -1565, -1491, \ | |
|
748 | -1475,-1410,-1344,-1335,1107,1021,833,777,671,607,596,491,-451,439,422,421,-366,\ | |
|
749 | -351,331,315,302,-283,-229,223,223,-220,-220,-185,181,-177,176, 166, -164, 132, \ | |
|
750 | -119,115,107.0]) | |
|
751 | ||
|
752 | # Mean longitude of the moon refered to mean equinox of the date. | |
|
753 | coeff0 = numpy.array([-1./6.5194e7,1./538841.,-0.0015786,481267.88123421,218.3164477]) | |
|
754 | lprimed = numpy.poly1d(coeff0) | |
|
755 | lprimed = lprimed(t) | |
|
756 | lprimed = self.cirrange(lprimed,rad=0) | |
|
757 | lprime = lprimed*Misc_Routines.CoFactors.d2r | |
|
758 | ||
|
759 | # Mean elongation of the moon | |
|
760 | coeff1 = numpy.array([-1./1.13065e8,1./545868.,-0.0018819,445267.1114034,297.8501921]) | |
|
761 | d = numpy.poly1d(coeff1) | |
|
762 | d = d(t)*Misc_Routines.CoFactors.d2r | |
|
763 | d = self.cirrange(d,rad=1) | |
|
764 | ||
|
765 | # Sun's mean anomaly | |
|
766 | coeff2 = numpy.array([1.0/2.449e7,-0.0001536,35999.0502909,357.5291092]) | |
|
767 | M = numpy.poly1d(coeff2) | |
|
768 | M = M(t)*Misc_Routines.CoFactors.d2r | |
|
769 | M = self.cirrange(M,rad=1) | |
|
770 | ||
|
771 | # Moon's mean anomaly | |
|
772 | coeff3 = numpy.array([-1.0/1.4712e7,1.0/6.9699e4,0.0087414,477198.8675055,134.9633964]) | |
|
773 | Mprime = numpy.poly1d(coeff3) | |
|
774 | Mprime = Mprime(t)*Misc_Routines.CoFactors.d2r | |
|
775 | Mprime = self.cirrange(Mprime,rad=1) | |
|
776 | ||
|
777 | # Moon's argument of latitude | |
|
778 | coeff4 = numpy.array([1.0/8.6331e8,-1.0/3.526e7,-0.0036539,483202.0175233,93.2720950]) | |
|
779 | F = numpy.poly1d(coeff4) | |
|
780 | F = F(t)*Misc_Routines.CoFactors.d2r | |
|
781 | F = self.cirrange(F,rad=1) | |
|
782 | ||
|
783 | # Eccentricity of Earth's orbit around the sun | |
|
784 | e = 1 - 0.002516*t - 7.4e-6*(t**2.) | |
|
785 | e2 = e**2. | |
|
786 | ||
|
787 | ecorr1 = numpy.where((numpy.abs(m_lng))==1) | |
|
788 | ecorr2 = numpy.where((numpy.abs(m_lat))==1) | |
|
789 | ecorr3 = numpy.where((numpy.abs(m_lng))==2) | |
|
790 | ecorr4 = numpy.where((numpy.abs(m_lat))==2) | |
|
791 | ||
|
792 | # Additional arguments. | |
|
793 | A1 = (119.75 + 131.849*t)*Misc_Routines.CoFactors.d2r | |
|
794 | A2 = (53.09 + 479264.290*t)*Misc_Routines.CoFactors.d2r | |
|
795 | A3 = (313.45 + 481266.484*t)*Misc_Routines.CoFactors.d2r | |
|
796 | suml_add = 3958.*numpy.sin(A1) + 1962.*numpy.sin(lprime - F) + 318*numpy.sin(A2) | |
|
797 | sumb_add = -2235.*numpy.sin(lprime) + 382.*numpy.sin(A3) + 175.*numpy.sin(A1-F) + \ | |
|
798 | 175.*numpy.sin(A1 + F) + 127.*numpy.sin(lprime - Mprime) - 115.*numpy.sin(lprime + Mprime) | |
|
799 | ||
|
800 | # Sum the periodic terms | |
|
801 | geolon = numpy.zeros(jd.size) | |
|
802 | geolat = numpy.zeros(jd.size) | |
|
803 | dist = numpy.zeros(jd.size) | |
|
804 | ||
|
805 | for i in numpy.arange(jd.size): | |
|
806 | sinlng = sin_lng | |
|
807 | coslng = cos_lng | |
|
808 | sinlat = sin_lat | |
|
809 | ||
|
810 | sinlng[ecorr1] = e[i]*sinlng[ecorr1] | |
|
811 | coslng[ecorr1] = e[i]*coslng[ecorr1] | |
|
812 | sinlat[ecorr2] = e[i]*sinlat[ecorr2] | |
|
813 | sinlng[ecorr3] = e2[i]*sinlng[ecorr3] | |
|
814 | coslng[ecorr3] = e2[i]*coslng[ecorr3] | |
|
815 | sinlat[ecorr4] = e2[i]*sinlat[ecorr4] | |
|
816 | ||
|
817 | arg = d_lng*d[i] + m_lng*M[i] + mp_lng*Mprime[i] + f_lng*F[i] | |
|
818 | geolon[i] = lprimed[i] + (numpy.sum(sinlng*numpy.sin(arg)) + suml_add[i] )/1.e6 | |
|
819 | dist[i] = 385000.56 + numpy.sum(coslng*numpy.cos(arg))/1.e3 | |
|
820 | arg = d_lat*d[i] + m_lat*M[i] + mp_lat*Mprime[i] + f_lat*F[i] | |
|
821 | geolat[i] = (numpy.sum(sinlat*numpy.sin(arg)) + sumb_add[i])/1.e6 | |
|
822 | ||
|
823 | [nlon, elon] = self.nutate(jd) | |
|
824 | geolon = geolon + nlon/3.6e3 | |
|
825 | geolon = self.cirrange(geolon,rad=0) | |
|
826 | lamb = geolon*Misc_Routines.CoFactors.d2r | |
|
827 | beta = geolat*Misc_Routines.CoFactors.d2r | |
|
828 | ||
|
829 | # Find mean obliquity and convert lamb, beta to RA, Dec | |
|
830 | c = numpy.array([2.45,5.79,27.87,7.12,-39.05,-249.67,-51.38,1999.25,-1.55,-4680.93, \ | |
|
831 | 21.448]) | |
|
832 | junk = numpy.poly1d(c); | |
|
833 | epsilon = 23. + (26./60.) + (junk(t/1.e2)/3600.) | |
|
834 | # True obliquity in radians | |
|
835 | eps = (epsilon + elon/3600. )*Misc_Routines.CoFactors.d2r | |
|
836 | ||
|
837 | ra = numpy.arctan2(numpy.sin(lamb)*numpy.cos(eps)-numpy.tan(beta)*numpy.sin(eps),numpy.cos(lamb)) | |
|
838 | ra = self.cirrange(ra,rad=1) | |
|
839 | ||
|
840 | dec = numpy.arcsin(numpy.sin(beta)*numpy.cos(eps) + numpy.cos(beta)*numpy.sin(eps)*numpy.sin(lamb)) | |
|
841 | ||
|
842 | if rad==1: | |
|
843 | geolon = lamb | |
|
844 | geolat = beta | |
|
845 | else: | |
|
846 | ra = ra/Misc_Routines.CoFactors.d2r | |
|
847 | dec = dec/Misc_Routines.CoFactors.d2r | |
|
848 | ||
|
849 | return ra, dec, dist, geolon, geolat | |
|
850 | ||
|
851 | def hydrapos(self): | |
|
852 | """ | |
|
853 | hydrapos method returns RA and Dec provided by Bill Coles (Oct 2003). | |
|
854 | ||
|
855 | Parameters | |
|
856 | ---------- | |
|
857 | None | |
|
858 | ||
|
859 | Return | |
|
860 | ------ | |
|
861 | ra = The right ascension of the sun at that date in degrees. | |
|
862 | dec = The declination of the sun at that date in degrees. | |
|
863 | Examples | |
|
864 | -------- | |
|
865 | >> [ra,dec] = hydrapos() | |
|
866 | >> print ra, dec | |
|
867 | 139.45 -12.0833333333 | |
|
868 | ||
|
869 | Modification history | |
|
870 | -------------------- | |
|
871 | Converted to Python by Freddy R. Galindo, ROJ, 06 October 2009. | |
|
872 | """ | |
|
873 | ||
|
874 | ra = (9. + 17.8/60.)*15. | |
|
875 | dec = -(12. + 5./60.) | |
|
876 | ||
|
877 | return ra, dec | |
|
878 | ||
|
879 | ||
|
880 | def skynoise_jro(self,dec_cut=-11.95,filename='skynoise_jro.dat',filepath=None): | |
|
881 | """ | |
|
882 | hydrapos returns RA and Dec provided by Bill Coles (Oct 2003). | |
|
883 | ||
|
884 | Parameters | |
|
885 | ---------- | |
|
886 | dec_cut = A scalar giving the declination to get a cut of the skynoise over Jica- | |
|
887 | marca. The default value is -11.95. | |
|
888 | filename = A string to specify name the skynoise file. The default value is skynoi- | |
|
889 | se_jro.dat | |
|
890 | ||
|
891 | Return | |
|
892 | ------ | |
|
893 | maxra = The maximum right ascension to the declination used to get a cut. | |
|
894 | ra = The right ascension. | |
|
895 | Examples | |
|
896 | -------- | |
|
897 | >> [maxra,ra] = skynoise_jro() | |
|
898 | >> print maxra, ra | |
|
899 | 139.45 -12.0833333333 | |
|
900 | ||
|
901 | Modification history | |
|
902 | -------------------- | |
|
903 | Converted to Python by Freddy R. Galindo, ROJ, 06 October 2009. | |
|
904 | """ | |
|
905 | ||
|
906 | if filepath==None:filepath = './resource' | |
|
907 | ||
|
908 | f = open(os.path.join(filepath,filename),'rb') | |
|
909 | ||
|
910 | # Reading SkyNoise Power (lineal scale) | |
|
911 | ha_sky = numpy.fromfile(f,numpy.dtype([('var','<f4')]),480*20) | |
|
912 | ha_sky = ha_sky['var'].reshape(20,480).transpose() | |
|
913 | ||
|
914 | dec_sky = numpy.fromfile(f,numpy.dtype([('var','<f4')]),480*20) | |
|
915 | dec_sky = dec_sky['var'].reshape((20,480)).transpose() | |
|
916 | ||
|
917 | tmp_sky = numpy.fromfile(f,numpy.dtype([('var','<f4')]),480*20) | |
|
918 | tmp_sky = tmp_sky['var'].reshape((20,480)).transpose() | |
|
919 | ||
|
920 | f.close() | |
|
921 | ||
|
922 | nha = 480 | |
|
923 | tmp_cut = numpy.zeros(nha) | |
|
924 | for iha in numpy.arange(nha): | |
|
925 | tck = scipy.interpolate.splrep(dec_sky[iha,:],tmp_sky[iha,:],s=0) | |
|
926 | tmp_cut[iha] = scipy.interpolate.splev(dec_cut,tck,der=0) | |
|
927 | ||
|
928 | ptr = numpy.nanargmax(tmp_cut) | |
|
929 | ||
|
930 | maxra = ha_sky[ptr,0] | |
|
931 | ra = ha_sky[:,0] | |
|
932 | ||
|
933 | return maxra, ra | |
|
934 | ||
|
935 | def skyNoise(self,jd,ut=-5.0,longitude=-76.87,filename='galaxy.txt',filepath=None): | |
|
936 | """ | |
|
937 | hydrapos returns RA and Dec provided by Bill Coles (Oct 2003). | |
|
938 | ||
|
939 | Parameters | |
|
940 | ---------- | |
|
941 | jd = The julian date of the day (and time), scalar or vector. | |
|
942 | ||
|
943 | dec_cut = A scalar giving the declination to get a cut of the skynoise over Jica- | |
|
944 | marca. The default value is -11.95. | |
|
945 | filename = A string to specify name the skynoise file. The default value is skynoi- | |
|
946 | se_jro.dat | |
|
947 | ||
|
948 | Return | |
|
949 | ------ | |
|
950 | maxra = The maximum right ascension to the declination used to get a cut. | |
|
951 | ra = The right ascension. | |
|
952 | ||
|
953 | Examples | |
|
954 | -------- | |
|
955 | >> [maxra,ra] = skynoise_jro() | |
|
956 | >> print maxra, ra | |
|
957 | 139.45 -12.0833333333 | |
|
958 | ||
|
959 | Modification history | |
|
960 | -------------------- | |
|
961 | Converted to Python by Freddy R. Galindo, ROJ, 06 October 2009. | |
|
962 | """ | |
|
963 | ||
|
964 | # Defining date to compute SkyNoise. | |
|
965 | [year, month, dom, hour, mis, secs] = TimeTools.Julian(jd).change2time() | |
|
966 | is_dom = (month==9) & (dom==21) | |
|
967 | if is_dom: | |
|
968 | tmp = jd | |
|
969 | jd = TimeTools.Time(year,9,22).change2julian() | |
|
970 | dom = 22 | |
|
971 | ||
|
972 | # Reading SkyNoise | |
|
973 | if filepath==None:filepath='./resource' | |
|
974 | f = open(os.path.join(filepath,filename)) | |
|
975 | ||
|
976 | lines = f.read() | |
|
977 | f.close() | |
|
978 | ||
|
979 | nlines = 99 | |
|
980 | lines = lines.split('\n') | |
|
981 | data = numpy.zeros((2,nlines))*numpy.float32(0.) | |
|
982 | for ii in numpy.arange(nlines): | |
|
983 | line = numpy.array([lines[ii][0:6],lines[ii][6:]]) | |
|
984 | data[:,ii] = numpy.float32(line) | |
|
985 | ||
|
986 | # Getting SkyNoise to the date desired. | |
|
987 | otime = data[0,:]*60.0 | |
|
988 | opowr = data[1,:] | |
|
989 | ||
|
990 | hour = numpy.array([0,23]); | |
|
991 | mins = numpy.array([0,59]); | |
|
992 | secs = numpy.array([0,59]); | |
|
993 | LTrange = TimeTools.Time(year,month,dom,hour,mins,secs).change2julday() | |
|
994 | LTtime = LTrange[0] + numpy.arange(1440)*((LTrange[1] - LTrange[0])/(1440.-1)) | |
|
995 | lst = TimeTools.Julian(LTtime + (-3600.*ut/86400.)).change2lst() | |
|
996 | ||
|
997 | ipowr = lst*0.0 | |
|
998 | # Interpolating using scipy (inside max and min "x") | |
|
999 | otime = otime/3600. | |
|
1000 | val = numpy.where((lst>numpy.min(otime)) & (lst<numpy.max(otime))); val = val[0] | |
|
1001 | tck = scipy.interpolate.interp1d(otime,opowr) | |
|
1002 | ipowr[val] = tck(lst[val]) | |
|
1003 | ||
|
1004 | # Extrapolating above maximum time data (23.75). | |
|
1005 | uval = numpy.where(lst>numpy.max(otime)) | |
|
1006 | if uval[0].size>0: | |
|
1007 | ii = numpy.min(uval[0]) | |
|
1008 | m = (ipowr[ii-1] - ipowr[ii-2])/(lst[ii-1] - lst[ii-2]) | |
|
1009 | b = ipowr[ii-1] - m*lst[ii-1] | |
|
1010 | ipowr[uval] = m*lst[uval] + b | |
|
1011 | ||
|
1012 | if is_dom: | |
|
1013 | lst = numpy.roll(lst,4) | |
|
1014 | ipowr = numpy.roll(ipowr,4) | |
|
1015 | ||
|
1016 | new_lst = numpy.int32(lst*3600.) | |
|
1017 | new_pow = ipowr | |
|
1018 | ||
|
1019 | return ipowr, LTtime, lst | |
|
1020 | ||
|
1021 | ||
|
1022 | class AltAz(EquatorialCorrections): | |
|
1023 | def __init__(self,alt,az,jd,lat=-11.95,lon=-76.8667,WS=0,altitude=500,nutate_=0,precess_=0,\ | |
|
1024 | aberration_=0,B1950=0): | |
|
1025 | """ | |
|
1026 | The AltAz class creates an object which represents the target position in horizontal | |
|
1027 | coordinates (alt-az) and allows to convert (using the methods) from this coordinate | |
|
1028 | system to others (e.g. Equatorial). | |
|
1029 | ||
|
1030 | Parameters | |
|
1031 | ---------- | |
|
1032 | alt = Altitude in degrees. Scalar or vector. | |
|
1033 | az = Azimuth angle in degrees (measured EAST from NORTH, but see keyword WS). Sca- | |
|
1034 | lar or vector. | |
|
1035 | jd = Julian date. Scalar or vector. | |
|
1036 | lat = North geodetic latitude of location in degrees. The default value is -11.95. | |
|
1037 | lon = East longitude of location in degrees. The default value is -76.8667. | |
|
1038 | WS = Set this to 1 to get the azimuth measured westward from south. | |
|
1039 | altitude = The altitude of the observing location, in meters. The default 500. | |
|
1040 | nutate_ = Set this to 1 to force nutation, 0 for no nutation. | |
|
1041 | precess_ = Set this to 1 to force precession, 0 for no precession. | |
|
1042 | aberration_ = Set this to 1 to force aberration correction, 0 for no correction. | |
|
1043 | B1950 = Set this if your RA and DEC are specified in B1950, FK4 coordinates (ins- | |
|
1044 | tead of J2000, FK5) | |
|
1045 | ||
|
1046 | Modification History | |
|
1047 | -------------------- | |
|
1048 | Converted to Object-oriented Programming by Freddy Galindo, ROJ, 26 September 2009. | |
|
1049 | """ | |
|
1050 | ||
|
1051 | EquatorialCorrections.__init__(self) | |
|
1052 | ||
|
1053 | self.alt = numpy.atleast_1d(alt) | |
|
1054 | self.az = numpy.atleast_1d(az) | |
|
1055 | self.jd = numpy.atleast_1d(jd) | |
|
1056 | self.lat = lat | |
|
1057 | self.lon = lon | |
|
1058 | self.WS = WS | |
|
1059 | self.altitude = altitude | |
|
1060 | ||
|
1061 | self.nutate_ = nutate_ | |
|
1062 | self.aberration_ = aberration_ | |
|
1063 | self.precess_ = precess_ | |
|
1064 | self.B1950 = B1950 | |
|
1065 | ||
|
1066 | def change2equatorial(self): | |
|
1067 | """ | |
|
1068 | change2equatorial method converts horizon (Alt-Az) coordinates to equatorial coordi- | |
|
1069 | nates (ra-dec). | |
|
1070 | ||
|
1071 | Return | |
|
1072 | ------ | |
|
1073 | ra = Right ascension of object (J2000) in degrees (FK5). Scalar or vector. | |
|
1074 | dec = Declination of object (J2000), in degrees (FK5). Scalar or vector. | |
|
1075 | ha = Hour angle in degrees. | |
|
1076 | ||
|
1077 | Example | |
|
1078 | ------- | |
|
1079 | >> alt = 88.5401 | |
|
1080 | >> az = -128.990 | |
|
1081 | >> jd = 2452640.5 | |
|
1082 | >> ObjAltAz = AltAz(alt,az,jd) | |
|
1083 | >> [ra, dec, ha] = ObjAltAz.change2equatorial() | |
|
1084 | >> print ra, dec, ha | |
|
1085 | [ 22.20280632] [-12.86610025] [ 1.1638927] | |
|
1086 | ||
|
1087 | Modification History | |
|
1088 | -------------------- | |
|
1089 | Written Chris O'Dell Univ. of Wisconsin-Madison, May 2002. | |
|
1090 | Converted to Python by Freddy R. Galindo, ROJ, 26 September 2009. | |
|
1091 | """ | |
|
1092 | ||
|
1093 | az = self.az | |
|
1094 | alt = self.alt | |
|
1095 | if self.WS>0:az = az -180. | |
|
1096 | ra_tmp = numpy.zeros(numpy.size(self.jd)) + 45. | |
|
1097 | dec_tmp = numpy.zeros(numpy.size(self.jd)) + 45. | |
|
1098 | [dra1,ddec1,eps,d_psi,d_eps] = self.co_nutate(self.jd,ra_tmp, dec_tmp) | |
|
1099 | ||
|
1100 | # Getting local mean sidereal time (lmst) | |
|
1101 | lmst = TimeTools.Julian(self.jd[0]).change2lst() | |
|
1102 | lmst = lmst*Misc_Routines.CoFactors.h2d | |
|
1103 | # Getting local apparent sidereal time (last) | |
|
1104 | last = lmst + d_psi*numpy.cos(eps)/3600. | |
|
1105 | ||
|
1106 | # Now do the spherical trig to get APPARENT hour angle and declination (Degrees). | |
|
1107 | [ha, dec] = self.change2HaDec() | |
|
1108 | ||
|
1109 | # Finding Right Ascension (in degrees, from 0 to 360.) | |
|
1110 | ra = (last - ha + 360.) % 360. | |
|
1111 | ||
|
1112 | # Calculate NUTATION and ABERRATION Correction to Ra-Dec | |
|
1113 | [dra1, ddec1,eps,d_psi,d_eps] = self.co_nutate(self.jd,ra,dec) | |
|
1114 | [dra2,ddec2,eps] = self.co_aberration(self.jd,ra,dec) | |
|
1115 | ||
|
1116 | # Make Nutation and Aberration correction (if wanted) | |
|
1117 | ra = ra - (dra1*self.nutate_ + dra2*self.aberration_)/3600. | |
|
1118 | dec = dec - (ddec1*self.nutate_ + ddec2*self.aberration_)/3600. | |
|
1119 | ||
|
1120 | # Computing current equinox | |
|
1121 | j_now = (self.jd - 2451545.)/365.25 + 2000 | |
|
1122 | ||
|
1123 | # Precess coordinates to current date | |
|
1124 | if self.precess_==1: | |
|
1125 | njd = numpy.size(self.jd) | |
|
1126 | for ii in numpy.arange(njd): | |
|
1127 | ra_i = ra[ii] | |
|
1128 | dec_i = dec[ii] | |
|
1129 | now = j_now[ii] | |
|
1130 | ||
|
1131 | if self.B1950==1: | |
|
1132 | [ra_i,dec_i] = self.precess(ra_i,dec_i,now,1950.,FK4=1) | |
|
1133 | elif self.B1950==0: | |
|
1134 | [ra_i,dec_i] = self.precess(ra_i,dec_i,now,2000.,FK4=0) | |
|
1135 | ||
|
1136 | ra[ii] = ra_i | |
|
1137 | dec[ii] = dec_i | |
|
1138 | ||
|
1139 | return ra, dec, ha | |
|
1140 | ||
|
1141 | def change2HaDec(self): | |
|
1142 | """ | |
|
1143 | change2HaDec method converts from horizon (Alt-Az) coordinates to hour angle and de- | |
|
1144 | clination. | |
|
1145 | ||
|
1146 | Return | |
|
1147 | ------ | |
|
1148 | ha = The local apparent hour angle, in degrees. The hour angle is the time that ri- | |
|
1149 | ght ascension of 0 hours crosses the local meridian. It is unambiguisoly defined. | |
|
1150 | dec = The local apparent declination, in degrees. | |
|
1151 | ||
|
1152 | Example | |
|
1153 | ------- | |
|
1154 | >> alt = 88.5401 | |
|
1155 | >> az = -128.990 | |
|
1156 | >> jd = 2452640.5 | |
|
1157 | >> ObjAltAz = AltAz(alt,az,jd) | |
|
1158 | >> [ha, dec] = ObjAltAz.change2HaDec() | |
|
1159 | >> print ha, dec | |
|
1160 | [ 1.1638927] [-12.86610025] | |
|
1161 | ||
|
1162 | Modification History | |
|
1163 | -------------------- | |
|
1164 | Written Chris O'Dell Univ. of Wisconsin-Madison, May 2002. | |
|
1165 | Converted to Python by Freddy R. Galindo, ROJ, 26 September 2009. | |
|
1166 | """ | |
|
1167 | ||
|
1168 | alt_r = numpy.atleast_1d(self.alt*Misc_Routines.CoFactors.d2r) | |
|
1169 | az_r = numpy.atleast_1d(self.az*Misc_Routines.CoFactors.d2r) | |
|
1170 | lat_r = numpy.atleast_1d(self.lat*Misc_Routines.CoFactors.d2r) | |
|
1171 | ||
|
1172 | # Find local hour angle (in degrees, from 0 to 360.) | |
|
1173 | y_ha = -1*numpy.sin(az_r)*numpy.cos(alt_r) | |
|
1174 | x_ha = -1*numpy.cos(az_r)*numpy.sin(lat_r)*numpy.cos(alt_r) + numpy.sin(alt_r)*numpy.cos(lat_r) | |
|
1175 | ||
|
1176 | ha = numpy.arctan2(y_ha,x_ha) | |
|
1177 | ha = ha/Misc_Routines.CoFactors.d2r | |
|
1178 | ||
|
1179 | w = numpy.where(ha<0.) | |
|
1180 | if w[0].size>0:ha[w] = ha[w] + 360. | |
|
1181 | ha = ha % 360. | |
|
1182 | ||
|
1183 | # Find declination (positive if north of celestial equatorial, negative if south) | |
|
1184 | sindec = numpy.sin(lat_r)*numpy.sin(alt_r) + numpy.cos(lat_r)*numpy.cos(alt_r)*numpy.cos(az_r) | |
|
1185 | dec = numpy.arcsin(sindec)/Misc_Routines.CoFactors.d2r | |
|
1186 | ||
|
1187 | return ha, dec | |
|
1188 | ||
|
1189 | ||
|
1190 | class Equatorial(EquatorialCorrections): | |
|
1191 | def __init__(self,ra,dec,jd,lat=-11.95,lon=-76.8667,WS=0,altitude=500,nutate_=0,precess_=0,\ | |
|
1192 | aberration_=0,B1950=0): | |
|
1193 | """ | |
|
1194 | The Equatorial class creates an object which represents the target position in equa- | |
|
1195 | torial coordinates (ha-dec) and allows to convert (using the class methods) from | |
|
1196 | this coordinate system to others (e.g. AltAz). | |
|
1197 | ||
|
1198 | Parameters | |
|
1199 | ---------- | |
|
1200 | ra = Right ascension of object (J2000) in degrees (FK5). Scalar or vector. | |
|
1201 | dec = Declination of object (J2000), in degrees (FK5). Scalar or vector. | |
|
1202 | jd = Julian date. Scalar or vector. | |
|
1203 | lat = North geodetic latitude of location in degrees. The default value is -11.95. | |
|
1204 | lon = East longitude of location in degrees. The default value is -76.8667. | |
|
1205 | WS = Set this to 1 to get the azimuth measured westward from south. | |
|
1206 | altitude = The altitude of the observing location, in meters. The default 500. | |
|
1207 | nutate = Set this to 1 to force nutation, 0 for no nutation. | |
|
1208 | precess = Set this to 1 to force precession, 0 for no precession. | |
|
1209 | aberration = Set this to 1 to force aberration correction, 0 for no correction. | |
|
1210 | B1950 = Set this if your RA and DEC are specified in B1950, FK4 coordinates (ins- | |
|
1211 | tead of J2000, FK5) | |
|
1212 | ||
|
1213 | Modification History | |
|
1214 | -------------------- | |
|
1215 | Converted to Object-oriented Programming by Freddy Galindo, ROJ, 29 September 2009. | |
|
1216 | """ | |
|
1217 | ||
|
1218 | EquatorialCorrections.__init__(self) | |
|
1219 | ||
|
1220 | self.ra = numpy.atleast_1d(ra) | |
|
1221 | self.dec = numpy.atleast_1d(dec) | |
|
1222 | self.jd = numpy.atleast_1d(jd) | |
|
1223 | self.lat = lat | |
|
1224 | self.lon = lon | |
|
1225 | self.WS = WS | |
|
1226 | self.altitude = altitude | |
|
1227 | ||
|
1228 | self.nutate_ = nutate_ | |
|
1229 | self.aberration_ = aberration_ | |
|
1230 | self.precess_ = precess_ | |
|
1231 | self.B1950 = B1950 | |
|
1232 | ||
|
1233 | def change2AltAz(self): | |
|
1234 | """ | |
|
1235 | change2AltAz method converts from equatorial coordinates (ha-dec) to horizon coordi- | |
|
1236 | nates (alt-az). | |
|
1237 | ||
|
1238 | Return | |
|
1239 | ------ | |
|
1240 | alt = Altitude in degrees. Scalar or vector. | |
|
1241 | az = Azimuth angle in degrees (measured EAST from NORTH, but see keyword WS). Sca- | |
|
1242 | lar or vector. | |
|
1243 | ha = Hour angle in degrees. | |
|
1244 | ||
|
1245 | Example | |
|
1246 | ------- | |
|
1247 | >> ra = 43.370609 | |
|
1248 | >> dec = -28.0000 | |
|
1249 | >> jd = 2452640.5 | |
|
1250 | >> ObjEq = Equatorial(ra,dec,jd) | |
|
1251 | >> [alt, az, ha] = ObjEq.change2AltAz() | |
|
1252 | >> print alt, az, ha | |
|
1253 | [ 65.3546497] [ 133.58753124] [ 339.99609002] | |
|
1254 | ||
|
1255 | Modification History | |
|
1256 | -------------------- | |
|
1257 | Written Chris O'Dell Univ. of Wisconsin-Madison. May 2002 | |
|
1258 | Converted to Python by Freddy R. Galindo, ROJ, 29 September 2009. | |
|
1259 | """ | |
|
1260 | ||
|
1261 | ra = self.ra | |
|
1262 | dec = self.dec | |
|
1263 | ||
|
1264 | # Computing current equinox | |
|
1265 | j_now = (self.jd - 2451545.)/365.25 + 2000 | |
|
1266 | ||
|
1267 | # Precess coordinates to current date | |
|
1268 | if self.precess_==1: | |
|
1269 | njd = numpy.size(self.jd) | |
|
1270 | for ii in numpy.arange(njd): | |
|
1271 | ra_i = ra[ii] | |
|
1272 | dec_i = dec[ii] | |
|
1273 | now = j_now[ii] | |
|
1274 | ||
|
1275 | if self.B1950==1: | |
|
1276 | [ra_i,dec_i] = self.precess(ra_i,dec_i,now,1950.,FK4=1) | |
|
1277 | elif self.B1950==0: | |
|
1278 | [ra_i,dec_i] = self.precess(ra_i,dec_i,now,2000.,FK4=0) | |
|
1279 | ||
|
1280 | ra[ii] = ra_i | |
|
1281 | dec[ii] = dec_i | |
|
1282 | ||
|
1283 | # Calculate NUTATION and ABERRATION Correction to Ra-Dec | |
|
1284 | [dra1, ddec1,eps,d_psi,d_eps] = self.co_nutate(self.jd,ra,dec) | |
|
1285 | [dra2,ddec2,eps] = self.co_aberration(self.jd,ra,dec) | |
|
1286 | ||
|
1287 | # Make Nutation and Aberration correction (if wanted) | |
|
1288 | ra = ra + (dra1*self.nutate_ + dra2*self.aberration_)/3600. | |
|
1289 | dec = dec + (ddec1*self.nutate_ + ddec2*self.aberration_)/3600. | |
|
1290 | ||
|
1291 | # Getting local mean sidereal time (lmst) | |
|
1292 | lmst = TimeTools.Julian(self.jd).change2lst() | |
|
1293 | ||
|
1294 | lmst = lmst*Misc_Routines.CoFactors.h2d | |
|
1295 | # Getting local apparent sidereal time (last) | |
|
1296 | last = lmst + d_psi*numpy.cos(eps)/3600. | |
|
1297 | ||
|
1298 | # Finding Hour Angle (in degrees, from 0 to 360.) | |
|
1299 | ha = last - ra | |
|
1300 | w = numpy.where(ha<0.) | |
|
1301 | if w[0].size>0:ha[w] = ha[w] + 360. | |
|
1302 | ha = ha % 360. | |
|
1303 | ||
|
1304 | # Now do the spherical trig to get APPARENT hour angle and declination (Degrees). | |
|
1305 | [alt, az] = self.HaDec2AltAz(ha,dec) | |
|
1306 | ||
|
1307 | return alt, az, ha | |
|
1308 | ||
|
1309 | def HaDec2AltAz(self,ha,dec): | |
|
1310 | """ | |
|
1311 | HaDec2AltAz convert hour angle and declination (ha-dec) to horizon coords (alt-az). | |
|
1312 | ||
|
1313 | Parameters | |
|
1314 | ---------- | |
|
1315 | ha = The local apparent hour angle, in DEGREES, scalar or vector. | |
|
1316 | dec = The local apparent declination, in DEGREES, scalar or vector. | |
|
1317 | ||
|
1318 | Return | |
|
1319 | ------ | |
|
1320 | alt = Altitude in degrees. Scalar or vector. | |
|
1321 | az = Azimuth angle in degrees (measured EAST from NORTH, but see keyword WS). Sca- | |
|
1322 | lar or vector. | |
|
1323 | ||
|
1324 | Modification History | |
|
1325 | -------------------- | |
|
1326 | Written Chris O'Dell Univ. of Wisconsin-Madison, May 2002. | |
|
1327 | Converted to Python by Freddy R. Galindo, ROJ, 26 September 2009. | |
|
1328 | """ | |
|
1329 | ||
|
1330 | sh = numpy.sin(ha*Misc_Routines.CoFactors.d2r) ; ch = numpy.cos(ha*Misc_Routines.CoFactors.d2r) | |
|
1331 | sd = numpy.sin(dec*Misc_Routines.CoFactors.d2r) ; cd = numpy.cos(dec*Misc_Routines.CoFactors.d2r) | |
|
1332 | sl = numpy.sin(self.lat*Misc_Routines.CoFactors.d2r) ; cl = numpy.cos(self.lat*Misc_Routines.CoFactors.d2r) | |
|
1333 | ||
|
1334 | x = -1*ch*cd*sl + sd*cl | |
|
1335 | y = -1*sh*cd | |
|
1336 | z = ch*cd*cl + sd*sl | |
|
1337 | r = numpy.sqrt(x**2. + y**2.) | |
|
1338 | ||
|
1339 | az = numpy.arctan2(y,x)/Misc_Routines.CoFactors.d2r | |
|
1340 | alt = numpy.arctan2(z,r)/Misc_Routines.CoFactors.d2r | |
|
1341 | ||
|
1342 | # correct for negative az. | |
|
1343 | w = numpy.where(az<0.) | |
|
1344 | if w[0].size>0:az[w] = az[w] + 360. | |
|
1345 | ||
|
1346 | # Convert az to West from South, if desired | |
|
1347 | if self.WS==1: az = (az + 180.) % 360. | |
|
1348 | ||
|
1349 | return alt, az | |
|
1350 | ||
|
1351 | ||
|
1352 | class Geodetic(): | |
|
1353 | def __init__(self,lat=-11.95,alt=0): | |
|
1354 | """ | |
|
1355 | The Geodetic class creates an object which represents the real position on earth of | |
|
1356 | a target (Geodetic Coordinates: lat-alt) and allows to convert (using the class me- | |
|
1357 | thods) from this coordinate system to others (e.g. geocentric). | |
|
1358 | ||
|
1359 | Parameters | |
|
1360 | ---------- | |
|
1361 | lat = Geodetic latitude of location in degrees. The default value is -11.95. | |
|
1362 | ||
|
1363 | alt = Geodetic altitude (km). The default value is 0. | |
|
1364 | ||
|
1365 | Modification History | |
|
1366 | -------------------- | |
|
1367 | Converted to Object-oriented Programming by Freddy R. Galindo, ROJ, 02 October 2009. | |
|
1368 | """ | |
|
1369 | ||
|
1370 | self.lat = numpy.atleast_1d(lat) | |
|
1371 | self.alt = numpy.atleast_1d(alt) | |
|
1372 | ||
|
1373 | self.a = 6378.16 | |
|
1374 | self.ab2 = 1.0067397 | |
|
1375 | self.ep2 = 0.0067397 | |
|
1376 | ||
|
1377 | def change2geocentric(self): | |
|
1378 | """ | |
|
1379 | change2geocentric method converts from Geodetic to Geocentric coordinates. The re- | |
|
1380 | ference geoid is that adopted by the IAU in 1964. | |
|
1381 | ||
|
1382 | Return | |
|
1383 | ------ | |
|
1384 | gclat = Geocentric latitude (in degrees), scalar or vector. | |
|
1385 | gcalt = Geocentric radial distance (km), scalar or vector. | |
|
1386 | ||
|
1387 | Example | |
|
1388 | ------- | |
|
1389 | >> ObjGeoid = Geodetic(lat=-11.95,alt=0) | |
|
1390 | >> [gclat, gcalt] = ObjGeoid.change2geocentric() | |
|
1391 | >> print gclat, gcalt | |
|
1392 | [-11.87227742] [ 6377.25048195] | |
|
1393 | ||
|
1394 | Modification History | |
|
1395 | -------------------- | |
|
1396 | Converted to Python by Freddy R. Galindo, ROJ, 02 October 2009. | |
|
1397 | """ | |
|
1398 | ||
|
1399 | gdl = self.lat*Misc_Routines.CoFactors.d2r | |
|
1400 | slat = numpy.sin(gdl) | |
|
1401 | clat = numpy.cos(gdl) | |
|
1402 | slat2 = slat**2. | |
|
1403 | clat2 = (self.ab2*clat)**2. | |
|
1404 | ||
|
1405 | sbet = slat/numpy.sqrt(slat2 + clat2) | |
|
1406 | sbet2 = (sbet**2.) # < 1 | |
|
1407 | noval = numpy.where(sbet2>1) | |
|
1408 | if noval[0].size>0:sbet2[noval] = 1 | |
|
1409 | cbet = numpy.sqrt(1. - sbet2) | |
|
1410 | ||
|
1411 | rgeoid = self.a/numpy.sqrt(1. + self.ep2*sbet2) | |
|
1412 | ||
|
1413 | x = rgeoid*cbet + self.alt*clat | |
|
1414 | y = rgeoid*sbet + self.alt*slat | |
|
1415 | ||
|
1416 | gcalt = numpy.sqrt(x**2. + y**2.) | |
|
1417 | gclat = numpy.arctan2(y,x)/Misc_Routines.CoFactors.d2r | |
|
1418 | ||
|
1419 | return gclat, gcalt |
@@ -0,0 +1,18 | |||
|
1 | ''' | |
|
2 | Created on Jun 19, 2013 | |
|
3 | ||
|
4 | @author: Jose Antonio Sal y Rosas Celi | |
|
5 | @contact: jose.salyrosas@jro.igp.gob.pe | |
|
6 | ''' | |
|
7 | ||
|
8 | from datetime import datetime | |
|
9 | ||
|
10 | class Files(object): | |
|
11 | ||
|
12 | def setFilename(self): | |
|
13 | return datetime.today().strftime("%Y%m%d%H%M%S%f") | |
|
14 | ||
|
15 | def save(self, filename, contentFile): | |
|
16 | f = open(filename, 'a+') | |
|
17 | f.write(contentFile) | |
|
18 | f.close() |
@@ -0,0 +1,51 | |||
|
1 | """ | |
|
2 | The GRAPHICS_MISC.py module gathers classes and/or functions useful for generation of plots. | |
|
3 | ||
|
4 | MODULES CALLED: | |
|
5 | NUMPY, OS | |
|
6 | ||
|
7 | MODIFICATION HISTORY: | |
|
8 | Created by Ing. Freddy Galindo (frederickgalindo@gmail.com). ROJ, 13 August 2009. | |
|
9 | """ | |
|
10 | ||
|
11 | import os | |
|
12 | import numpy | |
|
13 | import sys | |
|
14 | ||
|
15 | ||
|
16 | class ColorTable: | |
|
17 | def __init__(self,table=1,filepath=None): | |
|
18 | self.table = table | |
|
19 | #set to path for data folder, file: col_koki.dat | |
|
20 | if filepath==None: | |
|
21 | filepath= './data/' | |
|
22 | self.filepath = filepath | |
|
23 | ||
|
24 | def readTable(self): | |
|
25 | if self.table>0: | |
|
26 | if self.table==1: | |
|
27 | f = open(os.path.join(self.filepath,'col_koki.dat'),'rb') | |
|
28 | ||
|
29 | #f = open('./col_koki.dat','rb') | |
|
30 | ||
|
31 | # Reading SkyNoise Power (lineal scale) | |
|
32 | blue = numpy.fromfile(f,numpy.dtype([('var','b')]),256) | |
|
33 | blue = numpy.int32(blue['var']) | |
|
34 | val = numpy.where(blue<0) | |
|
35 | if val[0].size:blue[val] = blue[val] + numpy.int32(256) | |
|
36 | ||
|
37 | green = numpy.fromfile(f,numpy.dtype([('var','b')]),256) | |
|
38 | green = numpy.int32(green['var']) | |
|
39 | val = numpy.where(green<0) | |
|
40 | if val[0].size:green[val] = green[val] + numpy.int32(256) | |
|
41 | ||
|
42 | red = numpy.fromfile(f,numpy.dtype([('var','b')]),256) | |
|
43 | red = numpy.int32(red['var']) | |
|
44 | val = numpy.where(red<0) | |
|
45 | if val[0].size:red[val] = red[val] + numpy.int32(256) | |
|
46 | ||
|
47 | f.close() | |
|
48 | ||
|
49 | colortable = numpy.array([red/255.,green/255.,blue/255.]) | |
|
50 | ||
|
51 | return colortable |
This diff has been collapsed as it changes many lines, (563 lines changed) Show them Hide them | |||
@@ -0,0 +1,563 | |||
|
1 | """ | |
|
2 | The module GRAPHICS_OVERJRO.py gathers classes or/and functions to create graphics from OVER-JRO | |
|
3 | project (e.g. antenna patterns, skynoise, ...). | |
|
4 | ||
|
5 | MODULES CALLED: | |
|
6 | TIME, NUMPY, MATPLOTLIB, TIMETOOLS | |
|
7 | ||
|
8 | MODIFICATION HISTORY: | |
|
9 | Created by Ing. Freddy Galindo (frederickgalindo@gmail.com). ROJ Oct 18, 2009. | |
|
10 | """ | |
|
11 | ||
|
12 | import time | |
|
13 | import numpy | |
|
14 | import sys | |
|
15 | import os | |
|
16 | ||
|
17 | # set HOME environment variable to a directory the httpd server can write to | |
|
18 | #os.environ[ 'HOME' ] = '/usr/local/www/htdocs/overJro/tempReports' | |
|
19 | #os.environ[ 'HOME' ] = '/home/dsuarez/Pictures' | |
|
20 | #os.environ[ 'HOME' ] = '/tmp/' | |
|
21 | import matplotlib | |
|
22 | #if ide==1: | |
|
23 | # matplotlib.use('Qt4Agg') | |
|
24 | #elif ide==2: | |
|
25 | # matplotlib.use("Agg") | |
|
26 | #else: | |
|
27 | # matplotlib.use('TKAgg') | |
|
28 | #matplotlib.use("Agg") | |
|
29 | #matplotlib.interactive(1) | |
|
30 | import matplotlib.pyplot | |
|
31 | #import Numeric | |
|
32 | #import scipy | |
|
33 | import scipy.interpolate | |
|
34 | ||
|
35 | import Astro_Coords | |
|
36 | import TimeTools | |
|
37 | import Graphics_Miscens | |
|
38 | ||
|
39 | import Misc_Routines | |
|
40 | ||
|
41 | class AntPatternPlot: | |
|
42 | def __init__(self): | |
|
43 | """ | |
|
44 | AntPatternPlot creates an object to call methods to plot the antenna pattern. | |
|
45 | ||
|
46 | Modification History | |
|
47 | -------------------- | |
|
48 | Created by Freddy Galindo, ROJ, 06 October 2009. | |
|
49 | """ | |
|
50 | self.figure = None | |
|
51 | pass | |
|
52 | ||
|
53 | def contPattern(self,iplot=0,gpath='',filename='',mesg='',amp=None ,x=None ,y=None ,getCut=None,title=''): | |
|
54 | """ | |
|
55 | contPattern plots a contour map of the antenna pattern. | |
|
56 | ||
|
57 | Parameters | |
|
58 | ---------- | |
|
59 | iplot = A integer to specify if the plot is the first, second, ... The default va- | |
|
60 | lue is 0. | |
|
61 | ||
|
62 | Examples | |
|
63 | -------- | |
|
64 | >> Over_Jro.JroPattern(pattern=2).contPattern() | |
|
65 | ||
|
66 | Modification history | |
|
67 | -------------------- | |
|
68 | Converted to Python by Freddy R. Galindo, ROJ, 06 October 2009. | |
|
69 | """ | |
|
70 | ||
|
71 | if getCut == 1: | |
|
72 | return | |
|
73 | ||
|
74 | xmax = numpy.max(x) | |
|
75 | xmin = numpy.min(x) | |
|
76 | ymax = numpy.max(y) | |
|
77 | ymin = numpy.min(y) | |
|
78 | ||
|
79 | levels = numpy.array([1e-3,1e-2,1e-1,0.5,1.0]) | |
|
80 | tmp = numpy.round(10*numpy.log10(levels),decimals=1) | |
|
81 | labels = range(5) | |
|
82 | for i in numpy.arange(5):labels[i] = str(numpy.int(tmp[i])) | |
|
83 | ||
|
84 | if iplot==0: | |
|
85 | xsize = 8.0 | |
|
86 | if matplotlib.get_backend()=='QT4Agg':xsize = 6.0 | |
|
87 | ysize = 8.0 | |
|
88 | self.figure = matplotlib.pyplot.figure(num=2,figsize=(xsize,ysize)) | |
|
89 | matplotlib.pyplot.clf() | |
|
90 | ||
|
91 | colors = ((0,0,1.),(0,170/255.,0),(127/255.,1.,0),(1.,109/255.,0),(128/255.,0,0)) | |
|
92 | CS = matplotlib.pyplot.contour(x,y,amp.transpose(),levels,colors=colors) | |
|
93 | fmt = {} | |
|
94 | for l,s in zip(CS.levels,labels):fmt[l] = s | |
|
95 | ||
|
96 | matplotlib.pyplot.annotate('Ng',xy=(-0.05,1.04),xytext=(0.01,0.962),xycoords='axes fraction',arrowprops=dict(facecolor='black', width=1.,shrink=0.2),fontsize=15.) | |
|
97 | matplotlib.pyplot.annotate(mesg,xy=(0,0),xytext=(0.01,0.01),xycoords='figure fraction') | |
|
98 | matplotlib.pyplot.clabel(CS,CS.levels,inline=True,fmt=fmt,fontsize=10) | |
|
99 | matplotlib.pyplot.xlim(xmin,xmax) | |
|
100 | matplotlib.pyplot.ylim(ymin,ymax) | |
|
101 | matplotlib.pyplot.title("Total Pattern" + title) | |
|
102 | matplotlib.pyplot.xlabel("West to South") | |
|
103 | matplotlib.pyplot.ylabel("West to North") | |
|
104 | matplotlib.pyplot.grid(True) | |
|
105 | print "SAVE_FIG" | |
|
106 | print gpath | |
|
107 | print filename | |
|
108 | save_fig = os.path.join(gpath,filename) | |
|
109 | matplotlib.pyplot.savefig(save_fig,format='png') | |
|
110 | ||
|
111 | def plotRaDec(self,gpath=None,filename=None,jd=2452640.5,ra_obs=None,xg=None,yg=None,x=None,y=None): | |
|
112 | """ | |
|
113 | plotRaDec draws right ascension and declination lines on a JRO plane. This function | |
|
114 | must call after conPattern. | |
|
115 | ||
|
116 | Parameters | |
|
117 | ---------- | |
|
118 | jd = A scalar giving the Julian date. | |
|
119 | ra_obs = Scalar giving the right ascension of the observatory. | |
|
120 | xg = A 3-element array to specify .. | |
|
121 | yg = A 3-element array to specify .. | |
|
122 | ||
|
123 | Examples | |
|
124 | -------- | |
|
125 | >> Over_Jro.JroPattern(pattern=2).contPattern() | |
|
126 | >> Over_Jro.JroPattern(pattern=2).plotRaDec(jd=jd,ra_obs=ra_obs,xg=xg,yg=yg) | |
|
127 | ||
|
128 | Modification history | |
|
129 | -------------------- | |
|
130 | Converted to Python by Freddy R. Galindo, ROJ, 06 October 2009. | |
|
131 | """ | |
|
132 | ||
|
133 | # Finding RA of observatory for a specific date | |
|
134 | if ra_obs==None:ra_obs = numpy.array([23.37060849]) | |
|
135 | if xg==None:xg = numpy.array([0.62918474,-0.77725579,0.]) | |
|
136 | if yg==None:yg = numpy.array([0.77700346,0.62898048,0.02547905]) | |
|
137 | ||
|
138 | # Getting HA and DEC axes | |
|
139 | mindec = -28; maxdec = 4; incdec = 2. | |
|
140 | ndec = numpy.int((maxdec - mindec)/incdec) + 1 | |
|
141 | ||
|
142 | minha = -20; maxha = 20; incha = 2. | |
|
143 | nha = numpy.int((maxha - minha)/incha) + 1 | |
|
144 | ||
|
145 | mcosx = numpy.zeros((nha,ndec)) | |
|
146 | mcosy = numpy.zeros((nha,ndec)) | |
|
147 | ||
|
148 | ha_axes = numpy.reshape(numpy.arange(nha)*incha + minha,(nha,1)) | |
|
149 | ones_dec = numpy.reshape(numpy.zeros(ndec) + 1,(ndec,1)) | |
|
150 | ha_axes = numpy.dot(ha_axes,ones_dec.transpose()) | |
|
151 | ha_axes2 = numpy.array(ra_obs - ha_axes) | |
|
152 | ||
|
153 | dec_axes = numpy.reshape(numpy.arange(ndec)*incdec + mindec,(ndec,1)) | |
|
154 | ones_ra = numpy.reshape(numpy.zeros(nha) + 1,(nha,1)) | |
|
155 | dec_axes = numpy.dot(ones_ra,dec_axes.transpose()) | |
|
156 | dec_axes2 = numpy.array(dec_axes) | |
|
157 | ||
|
158 | ObjHor = Astro_Coords.Equatorial(ha_axes2,dec_axes2,jd) | |
|
159 | [alt,az,ha] = ObjHor.change2AltAz() | |
|
160 | ||
|
161 | z = numpy.transpose(alt)*Misc_Routines.CoFactors.d2r ; z = z.flatten() | |
|
162 | az = numpy.transpose(az)*Misc_Routines.CoFactors.d2r ; az = az.flatten() | |
|
163 | ||
|
164 | vect = numpy.array([numpy.cos(z)*numpy.sin(az),numpy.cos(z)*numpy.cos(az),numpy.sin(z)]) | |
|
165 | ||
|
166 | xg = numpy.atleast_2d(xg) | |
|
167 | dcosx = numpy.array(numpy.dot(xg,vect)) | |
|
168 | yg = numpy.atleast_2d(yg) | |
|
169 | dcosy = numpy.array(numpy.dot(yg,vect)) | |
|
170 | ||
|
171 | mcosx = dcosx.reshape(ndec,nha) | |
|
172 | mcosy = dcosy.reshape(ndec,nha) | |
|
173 | ||
|
174 | # Defining NAN for points outof limits. | |
|
175 | xmax = numpy.max(x) | |
|
176 | xmin = numpy.min(x) | |
|
177 | ymax = numpy.max(y) | |
|
178 | ymin = numpy.min(y) | |
|
179 | ||
|
180 | factor = 1.3 | |
|
181 | noval = numpy.where((mcosx>(xmax*factor)) | (mcosx<(xmin*factor))) | |
|
182 | if noval[0].size>0:mcosx[noval] = numpy.nan | |
|
183 | noval = numpy.where((mcosy>(ymax*factor)) | (mcosy<(ymin*factor))) | |
|
184 | if noval[0].size>0:mcosy[noval] = numpy.nan | |
|
185 | ||
|
186 | # Plotting HA and declination grid. | |
|
187 | iha0 = numpy.int((0 - minha)/incha) | |
|
188 | idec0 = numpy.int((-14 - mindec)/incdec) | |
|
189 | ||
|
190 | colorgrid = (1.,109/255.,0) | |
|
191 | matplotlib.pyplot.plot(mcosx.transpose(),mcosy.transpose(),color=colorgrid,linestyle='--') | |
|
192 | for idec in numpy.arange(ndec): | |
|
193 | if idec != idec0: | |
|
194 | valx = (mcosx[idec,iha0]<=xmax) & (mcosx[idec,iha0]>=xmin) | |
|
195 | valy = (mcosy[idec,iha0]<=ymax) & (mcosy[idec,iha0]>=ymin) | |
|
196 | if valx & valy: | |
|
197 | text = str(numpy.int(mindec + incdec*idec))+'$^o$' | |
|
198 | matplotlib.pyplot.text(mcosx[idec,iha0],mcosy[idec,iha0],text) | |
|
199 | ||
|
200 | matplotlib.pyplot.plot(mcosx,mcosy,color=colorgrid,linestyle='--') | |
|
201 | for iha in numpy.arange(nha): | |
|
202 | if iha != iha0: | |
|
203 | valx = (mcosx[idec0,iha]<=xmax) & (mcosx[idec0,iha]>=xmin) | |
|
204 | valy = (mcosy[idec0,iha]<=ymax) & (mcosy[idec0,iha]>=ymin) | |
|
205 | if valx & valy: | |
|
206 | text = str(4*numpy.int(minha + incha*iha))+"'" | |
|
207 | matplotlib.pyplot.text(mcosx[idec0,iha],mcosy[idec0,iha],text) | |
|
208 | ||
|
209 | matplotlib.pyplot.xlim(xmin,xmax) | |
|
210 | matplotlib.pyplot.ylim(ymin,ymax) | |
|
211 | ||
|
212 | save_fig = os.path.join(gpath,filename) | |
|
213 | matplotlib.pyplot.savefig(save_fig,format='png') | |
|
214 | ||
|
215 | ||
|
216 | class BFieldPlot: | |
|
217 | def __init__(self): | |
|
218 | """ | |
|
219 | BFieldPlot creates an object for drawing magnetic Field lines over Jicamarca. | |
|
220 | ||
|
221 | Modification History | |
|
222 | -------------------- | |
|
223 | Created by Freddy Galindo, ROJ, 07 October 2009. | |
|
224 | """ | |
|
225 | ||
|
226 | self.alpha_location = 1 | |
|
227 | # pass | |
|
228 | ||
|
229 | def plotBField(self,gpath,filename,dcos,alpha, nlon, nlat, dcosxrange, dcosyrange, heights, alpha_i): | |
|
230 | """ | |
|
231 | plotBField draws the magnetic field in a directional cosines plot. | |
|
232 | ||
|
233 | Parameters | |
|
234 | ---------- | |
|
235 | dcos = An 4-dimensional array giving the directional cosines of the magnetic field | |
|
236 | over the desired place. | |
|
237 | alpha = An 3-dimensional array giving the angle of the magnetic field over the desi- | |
|
238 | red place. | |
|
239 | nlon = An integer to specify the number of elements per longitude. | |
|
240 | nlat = An integer to specify the number of elements per latitude. | |
|
241 | dcosxrange = A 2-element array giving the range of the directional cosines in the | |
|
242 | "x" axis. | |
|
243 | dcosyrange = A 2-element array giving the range of the directional cosines in the | |
|
244 | "y" axis. | |
|
245 | heights = An array giving the heights (km) where the magnetic field will be modeled By default the magnetic field will be computed at 100, 500 and 1000km. | |
|
246 | alpha_i = Angle to interpolate the magnetic field. | |
|
247 | Modification History | |
|
248 | -------------------- | |
|
249 | Converted to Python by Freddy R. Galindo, ROJ, 07 October 2009. | |
|
250 | """ | |
|
251 | ||
|
252 | handles = [] | |
|
253 | objects = [] | |
|
254 | colors = ['k','m','c','b','g','r','y'] | |
|
255 | marker = ['-+','-*','-D','-x','-s','->','-o','-^'] | |
|
256 | ||
|
257 | alpha_location = numpy.zeros((nlon,2,heights.size)) | |
|
258 | ||
|
259 | for ih in numpy.arange(heights.size): | |
|
260 | alpha_location[:,0,ih] = dcos[:,0,ih,0] | |
|
261 | for ilon in numpy.arange(nlon): | |
|
262 | myx = (alpha[ilon,:,ih])[::-1] | |
|
263 | myy = (dcos[ilon,:,ih,0])[::-1] | |
|
264 | tck = scipy.interpolate.splrep(myx,myy,s=0) | |
|
265 | mydcosx = scipy.interpolate.splev(alpha_i,tck,der=0) | |
|
266 | ||
|
267 | myx = (alpha[ilon,:,ih])[::-1] | |
|
268 | myy = (dcos[ilon,:,ih,1])[::-1] | |
|
269 | tck = scipy.interpolate.splrep(myx,myy,s=0) | |
|
270 | mydcosy = scipy.interpolate.splev(alpha_i,tck,der=0) | |
|
271 | alpha_location[ilon,:,ih] = numpy.array([mydcosx, mydcosy]) | |
|
272 | ||
|
273 | ||
|
274 | ObjFig, = matplotlib.pyplot.plot(alpha_location[:,0,ih],alpha_location[:,1,ih], \ | |
|
275 | marker[ih % 8],color=colors[numpy.int(ih/8)],ms=4.5,lw=0.5) | |
|
276 | handles.append(ObjFig) | |
|
277 | objects.append(numpy.str(heights[ih]) + ' km') | |
|
278 | ||
|
279 | matplotlib.pyplot.xlim(dcosxrange[0],dcosxrange[1]) | |
|
280 | matplotlib.pyplot.ylim(dcosyrange[0],dcosyrange[1]) | |
|
281 | ||
|
282 | try: | |
|
283 | ObjlegB = matplotlib.pyplot.legend(handles,objects,loc="lower right", numpoints=1, handlelength=0.3, \ | |
|
284 | handletextpad=0.02, borderpad=0.3, labelspacing=0.1) | |
|
285 | except: | |
|
286 | ObjlegB = matplotlib.pyplot.legend(handles,objects,loc=[0.01,0.75], numpoints=1, handlelength=0, \ | |
|
287 | pad=0.015, handletextsep=0.02,labelsep=0.01) | |
|
288 | ||
|
289 | matplotlib.pyplot.setp(ObjlegB.get_texts(),fontsize='small') | |
|
290 | matplotlib.pyplot.gca().add_artist(ObjlegB) | |
|
291 | ||
|
292 | save_fig = os.path.join(gpath,filename) | |
|
293 | matplotlib.pyplot.savefig(save_fig,format='png') | |
|
294 | self.alpha_location = alpha_location | |
|
295 | ||
|
296 | ||
|
297 | class CelestialObjectsPlot: | |
|
298 | def __init__(self,jd,dec,tod,maxha_min,show_object=None): | |
|
299 | ||
|
300 | self.jd = jd | |
|
301 | self.dec = dec | |
|
302 | self.tod = tod | |
|
303 | self.maxha_min = maxha_min | |
|
304 | ||
|
305 | if show_object==None:show_object=numpy.zeros(4)+2 | |
|
306 | self.show_object = show_object | |
|
307 | ||
|
308 | self.dcosx_sun = 1 | |
|
309 | self.dcosy_sun = 1 | |
|
310 | self.ha_sun = 1 | |
|
311 | self.time_sun = 1 | |
|
312 | ||
|
313 | self.dcosx_moon = 1 | |
|
314 | self.dcosy_moon = 1 | |
|
315 | self.ha_moon = 1 | |
|
316 | self.time_moon = 1 | |
|
317 | ||
|
318 | self.dcosx_hydra = 1 | |
|
319 | self.dcosy_hydra = 1 | |
|
320 | self.ha_hydra = 1 | |
|
321 | self.time_hydra = 1 | |
|
322 | ||
|
323 | self.dcosx_galaxy = 1 | |
|
324 | self.dcosy_galaxy = 1 | |
|
325 | self.ha_galaxy = 1 | |
|
326 | self.time_galaxy = 1 | |
|
327 | ||
|
328 | def drawObject(self,glat,glon,xg,yg,dcosxrange,dcosyrange,gpath='',filename=''): | |
|
329 | ||
|
330 | jd = self.jd | |
|
331 | main_dec = self.dec | |
|
332 | tod = self.tod | |
|
333 | maxha_min = self.maxha_min | |
|
334 | ||
|
335 | mesg = "Drawing celestial objects over Observatory" | |
|
336 | # print mesg | |
|
337 | # if textid!=None:textid.append(mesg) | |
|
338 | ||
|
339 | maxlev = 24; minlev = 0; maxcol = 39; mincol = 10 | |
|
340 | handles = [] | |
|
341 | objects = ['$Sun$','$Moon$','$Hydra$','$Galaxy$'] | |
|
342 | marker = ['--^','--s','--*','--o'] | |
|
343 | ||
|
344 | # Getting RGB table to plot celestial object over Jicamarca | |
|
345 | colortable = Graphics_Miscens.ColorTable(table=1).readTable() | |
|
346 | ||
|
347 | for io in (numpy.arange(4)+1): | |
|
348 | if self.show_object[io]!=0: | |
|
349 | ObjBodies = Astro_Coords.CelestialBodies() | |
|
350 | if io==1: | |
|
351 | [ra,dec,sunlon,sunobliq] = ObjBodies.sunpos(jd) | |
|
352 | elif io==2: | |
|
353 | [ra,dec,dist,moonlon,moonlat] = ObjBodies.moonpos(jd) | |
|
354 | elif io==3: | |
|
355 | [ra,dec] = ObjBodies.hydrapos() | |
|
356 | elif io==4: | |
|
357 | [maxra,ra] = ObjBodies.skynoise_jro(dec_cut=main_dec) | |
|
358 | ra = maxra*15. | |
|
359 | dec = main_dec | |
|
360 | ||
|
361 | ObjEq = Astro_Coords.Equatorial(ra,dec,jd,lat=glat,lon=glon) | |
|
362 | [alt, az, ha] = ObjEq.change2AltAz() | |
|
363 | vect = numpy.array([az,alt]).transpose() | |
|
364 | vect = Misc_Routines.Vector(vect,direction=0).Polar2Rect() | |
|
365 | ||
|
366 | dcosx = numpy.array(numpy.dot(vect,xg)) | |
|
367 | dcosy = numpy.array(numpy.dot(vect,yg)) | |
|
368 | wrap = numpy.where(ha>=180.) | |
|
369 | if wrap[0].size>0:ha[wrap] = ha[wrap] - 360. | |
|
370 | ||
|
371 | val = numpy.where((numpy.abs(ha))<=(maxha_min*0.25)) | |
|
372 | if val[0].size>2: | |
|
373 | tod_1 = tod*1. | |
|
374 | shift_1 = numpy.where(tod>12.) | |
|
375 | tod_1[shift_1] = tod_1[shift_1] - 24. | |
|
376 | tod_2 = tod*1. | |
|
377 | shift_2 = numpy.where(tod<12.) | |
|
378 | tod_2[shift_2] = tod_2[shift_2] + 24. | |
|
379 | ||
|
380 | diff0 = numpy.nanmax(tod[val]) - numpy.nanmin(tod[val]) | |
|
381 | diff1 = numpy.nanmax(tod_1[val]) - numpy.nanmin(tod_1[val]) | |
|
382 | diff2 = numpy.nanmax(tod_2[val]) - numpy.nanmin(tod_2[val]) | |
|
383 | ||
|
384 | if ((diff0<=diff1) & (diff0<=diff2)): | |
|
385 | tod_0 = tod | |
|
386 | elif ((diff1<diff0) & (diff1<diff2)): | |
|
387 | tod_0 = tod_1 | |
|
388 | else: | |
|
389 | tod_0 = tod_2 | |
|
390 | ||
|
391 | if io==1: | |
|
392 | self.dcosx_sun = dcosx[val] | |
|
393 | self.dcosy_sun = dcosy[val] | |
|
394 | self.ha_sun = ha[val] | |
|
395 | self.time_sun = numpy.median(tod_0[val]) | |
|
396 | elif io==2: | |
|
397 | self.dcosx_moon = dcosx[val] | |
|
398 | self.dcosy_moon = dcosy[val] | |
|
399 | self.ha_moon = ha[val] | |
|
400 | self.time_moon = numpy.median(tod_0[val]) | |
|
401 | elif io==3: | |
|
402 | self.dcosx_hydra = dcosx[val] | |
|
403 | self.dcosy_hydra = dcosy[val] | |
|
404 | self.ha_hydra = ha[val] | |
|
405 | self.time_hydra = numpy.mean(tod_0[val]) | |
|
406 | elif io==4: | |
|
407 | self.dcosx_galaxy = dcosx[val] | |
|
408 | self.dcosy_galaxy = dcosy[val] | |
|
409 | self.ha_galaxy = ha[val] | |
|
410 | self.time_galaxy = numpy.mean(tod_0[val]) | |
|
411 | ||
|
412 | index = numpy.mean(tod_0[val]) - minlev | |
|
413 | index = (index*(maxcol - mincol)/(maxlev - minlev)) + mincol | |
|
414 | index = numpy.int(index) | |
|
415 | figobjects, = matplotlib.pyplot.plot(dcosx[val],dcosy[val],marker[io-1],\ | |
|
416 | lw=1,ms=7,mew=0,color=tuple(colortable[:,index])) | |
|
417 | handles.append(figobjects) | |
|
418 | ||
|
419 | xmax = numpy.max(dcosxrange[1]) | |
|
420 | xmin = numpy.min(dcosxrange[0]) | |
|
421 | ymax = numpy.max(dcosyrange[1]) | |
|
422 | ymin = numpy.min(dcosyrange[0]) | |
|
423 | matplotlib.pyplot.xlim(xmin,xmax) | |
|
424 | matplotlib.pyplot.ylim(ymin,ymax) | |
|
425 | ||
|
426 | val = numpy.where(self.show_object[1:]>0) | |
|
427 | objects = numpy.array(objects) | |
|
428 | objects = list(objects[val]) | |
|
429 | try: | |
|
430 | ObjlegC = matplotlib.pyplot.legend(handles,objects,loc="lower left", numpoints=1, handlelength=0.3, \ | |
|
431 | borderpad=0.3, handletextpad=0.02,labelspacing=0.1) | |
|
432 | except: | |
|
433 | ObjlegC = matplotlib.pyplot.legend(handles,objects,loc=[0.01,0.75], numpoints=1, handlelength=0, \ | |
|
434 | pad=0.015, handletextsep=0.02,labelsep=0.01) | |
|
435 | ||
|
436 | matplotlib.pyplot.setp(ObjlegC.get_texts(),fontsize='small') | |
|
437 | ObjlegC.isaxes = False | |
|
438 | save_fig = os.path.join(gpath,filename) | |
|
439 | matplotlib.pyplot.savefig(save_fig,format='png') | |
|
440 | ||
|
441 | ||
|
442 | class PatternCutPlot: | |
|
443 | def __init__(self,nsubplots): | |
|
444 | self.nsubplots = nsubplots | |
|
445 | ||
|
446 | self.fig = None | |
|
447 | ||
|
448 | self.__plot_width = 8 | |
|
449 | ||
|
450 | if self.nsubplots == 5: | |
|
451 | self.__plot_height = 11 | |
|
452 | ||
|
453 | if self.nsubplots == 4: | |
|
454 | self.__plot_height = 9 | |
|
455 | ||
|
456 | if self.nsubplots == 3: | |
|
457 | self.__plot_height = 7 | |
|
458 | ||
|
459 | if self.nsubplots == 2: | |
|
460 | self.__plot_height = 5 | |
|
461 | ||
|
462 | if self.nsubplots == 1: | |
|
463 | self.__plot_height = 3 | |
|
464 | ||
|
465 | self.fig = matplotlib.pyplot.figure(num = 4,figsize = (self.__plot_width, self.__plot_height)) | |
|
466 | ||
|
467 | if self.nsubplots < 5: | |
|
468 | self.__height_inch = 1.1 #altura de los subplots (pulgadas) | |
|
469 | top_inch = 1.5/2.7 #espacio entre el primer subplot y el limite superior del plot | |
|
470 | self.__vspace_plot_inch = 1.0#1.5/2 # espacio vertical entre subplots | |
|
471 | self.__left = 0.1 | |
|
472 | else: | |
|
473 | self.__height_inch = 1.1 #altura de los subplots (pulgadas) | |
|
474 | top_inch = 1.5/2.7 #espacio entre el primer subplot y el limite superior del plot | |
|
475 | self.__vspace_plot_inch = 1.0 # espacio vertical entre subplots | |
|
476 | self.__left = 0.1 | |
|
477 | ||
|
478 | self.__bottom_inch = self.__plot_height - (self.__height_inch + top_inch) | |
|
479 | self.__height = self.__height_inch/self.__plot_height | |
|
480 | ||
|
481 | self.__width = 0.8 | |
|
482 | ||
|
483 | ||
|
484 | def drawCut(self,io,patterns,npatterns,ha,otitle,subtitle,ptitle): | |
|
485 | ||
|
486 | t_cuts = ['B','Sun','Moon','Hydra','Galaxy'] | |
|
487 | self.__bottom = self.__bottom_inch/self.__plot_height | |
|
488 | ||
|
489 | ||
|
490 | subp = self.fig.add_axes([self.__left,self.__bottom,self.__width,self.__height]) | |
|
491 | ||
|
492 | on_axis_angle = -4.65562 | |
|
493 | for icut in numpy.arange(npatterns): | |
|
494 | # Getting Antenna cut. | |
|
495 | pattern = patterns[icut] | |
|
496 | power = numpy.abs(pattern/numpy.nanmax(pattern)) | |
|
497 | max_power_db = numpy.round(10.*numpy.log10(numpy.nanmax(pattern)),2) | |
|
498 | ||
|
499 | bval = numpy.where(power[:,0]==numpy.nanmax(power)) | |
|
500 | beta = -0.25*(ha[bval[0]] + on_axis_angle) | |
|
501 | # print 'Angle (deg): '+"%f"%(beta) | |
|
502 | ||
|
503 | subp.plot(ha,power) | |
|
504 | ||
|
505 | ||
|
506 | xmax = numpy.max(numpy.nanmin(ha)) | |
|
507 | xmin = numpy.min(numpy.nanmax(ha)) | |
|
508 | ymax = numpy.max(1) | |
|
509 | ymin = numpy.min(0) | |
|
510 | ||
|
511 | ||
|
512 | subp.set_xlim(xmin, xmax) | |
|
513 | ||
|
514 | subp.set_ylim(ymin, ymax) | |
|
515 | ||
|
516 | subp.set_title(otitle + ' ' + ptitle,size="medium") | |
|
517 | ||
|
518 | subp.text(0.5, 1.26,subtitle[0], | |
|
519 | horizontalalignment='center', | |
|
520 | verticalalignment='center', | |
|
521 | transform = subp.transAxes) | |
|
522 | ||
|
523 | xlabels = subp.get_xticks() | |
|
524 | ||
|
525 | subp.set_xticklabels(xlabels,size="small") | |
|
526 | ||
|
527 | ylabels = subp.get_yticks() | |
|
528 | ||
|
529 | subp.set_yticklabels(ylabels,size="small") | |
|
530 | ||
|
531 | subp.set_xlabel('Hour angle (min) (+ve to West)',size="small") | |
|
532 | ||
|
533 | subp.set_ylabel("Power [Max: " + str(max_power_db) + ' dB]',size="small") | |
|
534 | ||
|
535 | subp.grid() | |
|
536 | ||
|
537 | ||
|
538 | self.__bottom_inch = self.__bottom_inch - (self.__height_inch + self.__vspace_plot_inch) | |
|
539 | ||
|
540 | ||
|
541 | class SkyNoisePlot: | |
|
542 | def __init__(self,date,powr,time,time_lst): | |
|
543 | """ | |
|
544 | SkyNoisePlot class creates an object which represents the SkyNoise Object to genera- | |
|
545 | te a SkyNoise map. | |
|
546 | ||
|
547 | Parameters | |
|
548 | ---------- | |
|
549 | date = A List of 3 elements to define the desired date ([year, month, day]). | |
|
550 | powr = An array giving the SkyNoise power for the desired time. | |
|
551 | time = An array giving the number of seconds since 1970 to the desired time. | |
|
552 | time_lst = Set this input to an array to define the Local Sidereal Time of the desi- | |
|
553 | red time. | |
|
554 | ||
|
555 | Modification History | |
|
556 | -------------------- | |
|
557 | Created by Freddy Galindo, ROJ, 18 October 2009. | |
|
558 | """ | |
|
559 | ||
|
560 | self.date = date | |
|
561 | self.powr = powr | |
|
562 | self.time = time | |
|
563 | self.time_lst = time_lst |
This diff has been collapsed as it changes many lines, (1035 lines changed) Show them Hide them | |||
@@ -0,0 +1,1035 | |||
|
1 | ''' | |
|
2 | The module JroAntSetup contains the pre-defined parameters for beam modelling of the Jicamarca ante- | |
|
3 | nna. Any new configuration must be added in this module (if the user decides that) using a specific | |
|
4 | ID (pattern value) or it would be read from a file using pattern=None. | |
|
5 | ||
|
6 | MODULES CALLED: | |
|
7 | OS, NUMPY | |
|
8 | ||
|
9 | MODIFICATION HISTORY: | |
|
10 | Created by Ing. Freddy Galindo (frederickgalindo@gmail.com). ROJ Sep 20, 2009. | |
|
11 | ''' | |
|
12 | ||
|
13 | import os | |
|
14 | import numpy | |
|
15 | ||
|
16 | def ReturnSetup(path=None,filename=None,pattern=0): | |
|
17 | """ | |
|
18 | ReturnSetup is a pre-defined list of Jicamarca antenna configurations which returns a dic- | |
|
19 | tionary giving the configuration parameters (e.g. transmitted phases). To choose one, the | |
|
20 | user must define the input "pattern" (See valid values below). | |
|
21 | ||
|
22 | Parameters: | |
|
23 | ----------- | |
|
24 | ||
|
25 | pattern = A integer (>=0) to specify the setup to choose. The default value is zero. If the | |
|
26 | antenna configuration is user-defined pattern must be None. | |
|
27 | ||
|
28 | path = Set this input a string to specifiy the folder path where the user-defined configu- | |
|
29 | ration file is placed. If this value is not defined ReturnSetup will return None. | |
|
30 | ||
|
31 | file = Set this input a string to specifiy the name of the user-defined configuration file | |
|
32 | (*.txt). if this value is not defined ReturnSEtup will return None. | |
|
33 | ||
|
34 | Examples: | |
|
35 | --------- | |
|
36 | ||
|
37 | Choosing a pre-defined antenna configuration | |
|
38 | setup = ReturnSetup(pattern=1) | |
|
39 | ||
|
40 | Reading a user-defined antenna configuration | |
|
41 | setup = ReturnSetup(path="/users/users/Progs/Patterns/",file="ExpSep232009.txt") | |
|
42 | """ | |
|
43 | ||
|
44 | ||
|
45 | if pattern == 0: | |
|
46 | title = "for module (rx)" | |
|
47 | ||
|
48 | ues = numpy.array([1.,2.,2.,1.]) | |
|
49 | phase = numpy.zeros([8,8]) | |
|
50 | phase[0:4,:] = 4 | |
|
51 | phase[4:8,:] = 5 | |
|
52 | ||
|
53 | gaintx = numpy.zeros([8,8]) | |
|
54 | gaintx[0,0] = 1 | |
|
55 | ||
|
56 | gainrx = numpy.zeros([8,8]) | |
|
57 | gainrx[0,0] = 1 | |
|
58 | ||
|
59 | justrx = 1 | |
|
60 | ||
|
61 | elif pattern==1: | |
|
62 | # Configuration 1/16 on-axis (rx) | |
|
63 | title = " for 1/16 on-axis (rx)" | |
|
64 | ||
|
65 | ues = numpy.array([1.,2.,2.,1.]) | |
|
66 | phase = numpy.zeros([8,8]) | |
|
67 | phase[0:4,:] = 4 | |
|
68 | phase[4:8,:] = 5 | |
|
69 | ||
|
70 | gaintx = numpy.zeros([8,8]) | |
|
71 | gaintx[0:2,0:2] = 1 | |
|
72 | ||
|
73 | gainrx = numpy.zeros([8,8]) | |
|
74 | gainrx[0:2,0:2] = 1 | |
|
75 | ||
|
76 | justrx = 1 | |
|
77 | ||
|
78 | elif pattern == 2: | |
|
79 | # Configuration for On-Axis | |
|
80 | title = " for 1/4 on-axis (rx)" | |
|
81 | ||
|
82 | ues = numpy.array([1.,2.,2.,1.]) | |
|
83 | phase = numpy.zeros([8,8]) | |
|
84 | phase[0:4,:] = 4 | |
|
85 | phase[4:8,:] = 5 | |
|
86 | ||
|
87 | gaintx = numpy.zeros([8,8]) | |
|
88 | gaintx[0:4,0:4] = 1 | |
|
89 | ||
|
90 | gainrx = numpy.zeros([8,8]) | |
|
91 | gainrx[0:4,0:4] = 1 | |
|
92 | ||
|
93 | justrx = 1 | |
|
94 | ||
|
95 | elif pattern == 3: | |
|
96 | # Configuration for On-Axis | |
|
97 | title = " for all on-axis (rx)" | |
|
98 | ||
|
99 | ues = numpy.array([1.,2.,2.,1.]) | |
|
100 | phase = numpy.zeros([8,8]) | |
|
101 | phase[0:4,:] = 4 | |
|
102 | phase[4:8,:] = 5 | |
|
103 | ||
|
104 | gaintx = numpy.zeros([8,8]) | |
|
105 | gaintx[:,:] = 1 | |
|
106 | ||
|
107 | gainrx = numpy.zeros([8,8]) | |
|
108 | gainrx[:,:] = 1 | |
|
109 | ||
|
110 | justrx = 0 | |
|
111 | ||
|
112 | elif pattern == 4: | |
|
113 | # Configuration for oblique ISR On-Axis | |
|
114 | title = " for Oblique ISR On-axis" | |
|
115 | ||
|
116 | ues = numpy.array([1.,2.,2.,1.]) | |
|
117 | phase = numpy.zeros([8,8]) | |
|
118 | phase[0:4,:] = 4 | |
|
119 | phase[4:8,:] = 5 | |
|
120 | ||
|
121 | gaintx = numpy.zeros([8,8]) | |
|
122 | gaintx[:,:] = 1 | |
|
123 | ||
|
124 | gainrx = numpy.zeros([8,8]) | |
|
125 | gainrx[:,:] = 1 | |
|
126 | ||
|
127 | justrx = 0 | |
|
128 | ||
|
129 | elif pattern == 5: | |
|
130 | # Configuration for oblique ISR "4.5" | |
|
131 | title = " for Oblique ISR '4.5'" | |
|
132 | ||
|
133 | ues = numpy.array([1.,2.,2.,1.]) | |
|
134 | phase = numpy.array([[4,4,5,5,2,2,3,3], | |
|
135 | [4,5,5,2,2,3,3,4], | |
|
136 | [5,5,2,2,3,3,4,4], | |
|
137 | [5,2,2,3,3,4,4,5], | |
|
138 | [3,3,4,4,5,5,2,2], | |
|
139 | [3,4,4,5,5,2,2,3], | |
|
140 | [4,4,5,5,2,2,3,3], | |
|
141 | [4,5,5,2,2,3,3,4]],dtype=float) | |
|
142 | ||
|
143 | gaintx = numpy.zeros([8,8]) | |
|
144 | gaintx[:,:] = 1 | |
|
145 | ||
|
146 | gainrx = numpy.zeros([8,8]) | |
|
147 | gainrx[:,:] = 1 | |
|
148 | ||
|
149 | justrx = 0 | |
|
150 | ||
|
151 | elif pattern == 6: | |
|
152 | # Configuration for oblique ISR "6.0S" | |
|
153 | title = " for Oblique ISR '6.0S'" | |
|
154 | ||
|
155 | ues = numpy.array([1.,2.,2.,1.]) | |
|
156 | phase = numpy.array([[4,5,2,3,4,5,2,3], | |
|
157 | [5,2,3,4,5,2,3,4], | |
|
158 | [2,3,4,5,2,3,4,5], | |
|
159 | [3,4,5,2,3,4,5,2], | |
|
160 | [5,2,3,4,5,2,3,4], | |
|
161 | [2,3,4,5,2,3,4,5], | |
|
162 | [3,4,5,2,3,4,5,2], | |
|
163 | [4,5,2,3,4,5,2,3]],dtype=float) | |
|
164 | ||
|
165 | gaintx = numpy.zeros([8,8]) | |
|
166 | gaintx[:,:] = 1 | |
|
167 | ||
|
168 | gainrx = numpy.zeros([8,8]) | |
|
169 | gainrx[:,:] = 1 | |
|
170 | ||
|
171 | justrx = 0 | |
|
172 | ||
|
173 | elif pattern == 7: | |
|
174 | # Configuration for oblique ISR "3.0N" | |
|
175 | title = " for Oblique ISR '3.0N'" | |
|
176 | ||
|
177 | ues = numpy.array([1.,2.,2.,1.]) | |
|
178 | phase = numpy.array([[4,3,2,5,4,3,2,5], | |
|
179 | [3,2,5,4,3,2,5,4], | |
|
180 | [2,5,4,3,2,5,4,3], | |
|
181 | [5,4,3,2,5,4,3,2], | |
|
182 | [5,4,3,2,5,4,3,2], | |
|
183 | [4,3,2,5,4,3,2,5], | |
|
184 | [3,2,5,4,3,2,5,4], | |
|
185 | [2,5,4,3,2,5,4,3]],dtype=float) | |
|
186 | ||
|
187 | gaintx = numpy.zeros([8,8]) | |
|
188 | gaintx[:,:] = 1 | |
|
189 | ||
|
190 | gainrx = numpy.zeros([8,8]) | |
|
191 | gainrx[:,:] = 1 | |
|
192 | ||
|
193 | justrx = 0 | |
|
194 | ||
|
195 | elif pattern == 8: | |
|
196 | # Configuration for North Fritts" | |
|
197 | title = " for North (Fritts)" | |
|
198 | ||
|
199 | ues = numpy.array([2.513, 1.0, 3.0, 0.413]) | |
|
200 | phase = numpy.array([[4.29, 3.55, 2.82, 2.08, 4.20, 3.47, 2.73, 2.00], | |
|
201 | [2.94, 2.20, 5.44, 4.70, 4.32, 3.59, 2.85, 2.12], | |
|
202 | [5.56, 4.82, 4.09, 3.35, 4.44, 3.71, 2.97, 2.24], | |
|
203 | [4.20, 3.47, 2.73, 2.00, 4.56, 3.82, 3.09, 2.35], | |
|
204 | [4.20, 3.47, 2.73, 2.00, 4.56, 3.82, 3.09, 2.35], | |
|
205 | [4.32, 3.59, 2.85, 2.12, 2.94, 2.20, 5.44, 4.70], | |
|
206 | [4.44, 3.71, 2.97, 2.24, 5.56, 4.82, 4.09, 3.35], | |
|
207 | [4.56, 3.82, 3.09, 2.35, 4.20, 3.47, 2.73, 2.00]],dtype=float) | |
|
208 | ||
|
209 | gaintx = numpy.zeros([8,8]) | |
|
210 | gaintx[0:4,0:4] = 1 | |
|
211 | gaintx[4:8,4:8] = 1 | |
|
212 | ||
|
213 | gainrx = numpy.zeros([8,8]) | |
|
214 | gainrx[0:4,0:4] = 1 | |
|
215 | gainrx[4:8,4:8] = 1 | |
|
216 | ||
|
217 | justrx = 0 | |
|
218 | ||
|
219 | elif pattern == 9: | |
|
220 | # Configuration for West Fritts" | |
|
221 | title = " for West (Fritts)" | |
|
222 | ||
|
223 | ues = numpy.array([2.513, 1.0, 3.0, 0.413]) | |
|
224 | phase = numpy.array([[4.29, 3.55, 2.82, 2.08, 4.20, 3.47, 2.73, 2.00], | |
|
225 | [2.94, 2.20, 5.44, 4.70, 4.32, 3.59, 2.85, 2.12], | |
|
226 | [5.56, 4.82, 4.09, 3.35, 4.44, 3.71, 2.97, 2.24], | |
|
227 | [4.20, 3.47, 2.73, 2.00, 4.56, 3.82, 3.09, 2.35], | |
|
228 | [4.20, 3.47, 2.73, 2.00, 4.56, 3.82, 3.09, 2.35], | |
|
229 | [4.32, 3.59, 2.85, 2.12, 2.94, 2.20, 5.44, 4.70], | |
|
230 | [4.44, 3.71, 2.97, 2.24, 5.56, 4.82, 4.09, 3.35], | |
|
231 | [4.56, 3.82, 3.09, 2.35, 4.20, 3.47, 2.73, 2.00]],dtype=float) | |
|
232 | ||
|
233 | gaintx = numpy.zeros([8,8]) | |
|
234 | gaintx[4:8,0:4] = 1 | |
|
235 | gaintx[4:8,0:4] = 1 | |
|
236 | ||
|
237 | gainrx = numpy.zeros([8,8]) | |
|
238 | gainrx[4:8,0:4] = 1 | |
|
239 | gainrx[4:8,0:4] = 1 | |
|
240 | ||
|
241 | justrx = 0 | |
|
242 | ||
|
243 | elif pattern == 10: | |
|
244 | # Configuration for South Fritts" | |
|
245 | title = " for South (Fritts)" | |
|
246 | ||
|
247 | ues = numpy.array([0.413, 2.0, 1.0, 1.513]) | |
|
248 | phase = numpy.array([[2.0 , 2.73, 3.47, 4.2 , 2.08, 2.82, 3.55, 4.29], | |
|
249 | [2.12, 2.85, 3.59, 4.32, 4.7 , 5.44, 2.20, 2.94], | |
|
250 | [2.24, 2.97, 3.71, 4.44, 3.35, 4.09, 4.82, 5.56], | |
|
251 | [2.35, 3.09, 3.82, 4.56, 2.0 , 2.73, 3.47, 4.20], | |
|
252 | [2.08, 2.82, 3.55, 4.29, 2.0 , 2.73, 3.47, 4.20], | |
|
253 | [4.70, 5.44, 2.20, 2.94, 2.12, 2.85, 3.59, 4.32], | |
|
254 | [3.35, 4.09, 4.82, 5.56, 2.24, 2.97, 3.71, 4.44], | |
|
255 | [2.00, 2.73, 3.47, 4.20, 2.35, 3.09, 3.82, 4.56]],dtype=float) | |
|
256 | ||
|
257 | gaintx = numpy.zeros([8,8]) | |
|
258 | gaintx[0:4,0:4] = 1 | |
|
259 | gaintx[4:8,4:8] = 1 | |
|
260 | ||
|
261 | gainrx = numpy.zeros([8,8]) | |
|
262 | gainrx[0:4,0:4] = 1 | |
|
263 | gainrx[4:8,4:8] = 1 | |
|
264 | ||
|
265 | justrx = 0 | |
|
266 | ||
|
267 | elif pattern == 11: | |
|
268 | # Configuration for East Fritts" | |
|
269 | title = " for East (Fritts)" | |
|
270 | ||
|
271 | ues = numpy.array([0.413, 2.0, 1.0, 1.513]) | |
|
272 | phase = numpy.array([[2.0 , 2.73, 3.47, 4.2 , 2.08, 2.82, 3.55, 4.29], | |
|
273 | [2.12, 2.85, 3.59, 4.32, 4.7 , 5.44, 2.20, 2.94], | |
|
274 | [2.24, 2.97, 3.71, 4.44, 3.35, 4.09, 4.82, 5.56], | |
|
275 | [2.35, 3.09, 3.82, 4.56, 2.0 , 2.73, 3.47, 4.20], | |
|
276 | [2.08, 2.82, 3.55, 4.29, 2.0 , 2.73, 3.47, 4.20], | |
|
277 | [4.70, 5.44, 2.20, 2.94, 2.12, 2.85, 3.59, 4.32], | |
|
278 | [3.35, 4.09, 4.82, 5.56, 2.24, 2.97, 3.71, 4.44], | |
|
279 | [2.00, 2.73, 3.47, 4.20, 2.35, 3.09, 3.82, 4.56]],dtype=float) | |
|
280 | ||
|
281 | gaintx = numpy.zeros([8,8]) | |
|
282 | gaintx[4:8,0:4] = 1 | |
|
283 | gaintx[4:8,0:4] = 1 | |
|
284 | ||
|
285 | gainrx = numpy.zeros([8,8]) | |
|
286 | gainrx[4:8,0:4] = 1 | |
|
287 | gainrx[4:8,0:4] = 1 | |
|
288 | ||
|
289 | justrx = 0 | |
|
290 | ||
|
291 | elif pattern == 12: | |
|
292 | # Configuration for DEWD position (2009) | |
|
293 | title = " for DEWD position (2009) East Beam" | |
|
294 | ||
|
295 | ues = numpy.array([0.,0.,0.75,0.75]) | |
|
296 | phase = numpy.array([[2,3,3,3,3,4,4,4], | |
|
297 | [5,2,2,2,2,3,3,3], | |
|
298 | [3,4,4,4,4,5,5,5], | |
|
299 | [2,3,3,3,3,4,4,4], | |
|
300 | [4,5,5,5,5,2,2,2], | |
|
301 | [3,4,4,4,4,5,5,5], | |
|
302 | [5,2,2,2,2,3,3,3], | |
|
303 | [4,5,5,5,5,2,2,2]],dtype=float) | |
|
304 | ||
|
305 | gaintx = numpy.zeros([8,8]) | |
|
306 | gaintx[:,:] = 1 | |
|
307 | ||
|
308 | gainrx = numpy.zeros([8,8]) | |
|
309 | gainrx[:,0:4] = 1 | |
|
310 | ||
|
311 | justrx = 0 | |
|
312 | ||
|
313 | elif pattern == 13: | |
|
314 | # Configuration for DEWD position (2009) | |
|
315 | title = " for DEWD position (2009) West Beam" | |
|
316 | ||
|
317 | ues = numpy.array([1.0,0.5,1.5,2.0]) | |
|
318 | phase = numpy.array([[5,4,2,5,3,2,4,3], | |
|
319 | [2,5,3,2,4,3,5,4], | |
|
320 | [2,5,3,2,4,3,5,4], | |
|
321 | [3,2,4,3,5,4,2,5], | |
|
322 | [3,2,4,3,5,4,2,5], | |
|
323 | [4,3,5,4,2,5,3,2], | |
|
324 | [4,3,5,4,2,5,3,2], | |
|
325 | [5,4,2,5,3,2,4,3]],dtype=float) | |
|
326 | ||
|
327 | gaintx = numpy.zeros([8,8]) | |
|
328 | gaintx[:,:] = 1 | |
|
329 | ||
|
330 | gainrx = numpy.zeros([8,8]) | |
|
331 | gainrx[4:8,:] = 1 | |
|
332 | ||
|
333 | justrx = 0 | |
|
334 | ||
|
335 | elif pattern == 14: | |
|
336 | # Configuration for DVD position (2009) | |
|
337 | title = " for DVD position (2009)" | |
|
338 | ||
|
339 | ues = numpy.array([1.0,2.0,2.0,1.25]) | |
|
340 | phase = numpy.array([[2,2,5,5,4,4,3,3], | |
|
341 | [2,5,5,4,4,3,3,2], | |
|
342 | [5,5,4,4,3,3,2,2], | |
|
343 | [5,4,4,3,3,2,2,5], | |
|
344 | [5,5,4,4,3,3,2,2], | |
|
345 | [5,4,4,3,3,2,2,5], | |
|
346 | [4,4,3,3,2,2,5,5], | |
|
347 | [4,3,3,2,2,5,5,4]],dtype=float) | |
|
348 | ||
|
349 | gaintx = numpy.zeros([8,8]) | |
|
350 | gaintx[:,:] = 1 | |
|
351 | ||
|
352 | gainrx = numpy.zeros([8,8]) | |
|
353 | gainrx[0:4,0:4] = 1 | |
|
354 | ||
|
355 | justrx = 0 | |
|
356 | ||
|
357 | elif pattern == 15: | |
|
358 | # Configuration for Julia CP2 | |
|
359 | title = " for Julia CP2 Ew" | |
|
360 | ||
|
361 | ues = numpy.array([0.0,1.0,1.0,0.0]) | |
|
362 | phase = numpy.array([[2,2,5,4,3,3,2,5], | |
|
363 | [2,5,4,4,3,2,5,5], | |
|
364 | [5,4,3,3,2,5,4,4], | |
|
365 | [4,4,3,2,5,5,4,3], | |
|
366 | [4,4,3,2,5,5,4,3], | |
|
367 | [4,3,2,2,5,4,3,3], | |
|
368 | [3,2,5,5,4,3,2,2], | |
|
369 | [2,2,5,4,3,3,2,5]],dtype=float) | |
|
370 | ||
|
371 | gaintx = numpy.zeros([8,8]) | |
|
372 | gaintx[0:4,4:8] = 1 | |
|
373 | gaintx[4:8,0:4] = 1 | |
|
374 | ||
|
375 | gainrx = numpy.zeros([8,8]) | |
|
376 | gainrx[0,0] = 1 | |
|
377 | ||
|
378 | justrx = 0 | |
|
379 | ||
|
380 | elif pattern == 16: | |
|
381 | # Configuration for Julia CP2 | |
|
382 | title = " for Julia CP2 NS" | |
|
383 | ||
|
384 | ues = numpy.array([1.0,2.0,2.0,1.0]) | |
|
385 | phase = numpy.array([[4,4,3,2,5,5,4,3], | |
|
386 | [4,3,2,2,5,4,3,3], | |
|
387 | [3,2,5,5,4,3,2,2], | |
|
388 | [2,2,5,4,3,3,2,5], | |
|
389 | [2,2,5,4,3,3,2,5], | |
|
390 | [2,5,4,4,3,2,5,5], | |
|
391 | [5,4,3,3,2,5,4,4], | |
|
392 | [4,4,3,2,5,5,4,3]],dtype=float) | |
|
393 | ||
|
394 | gaintx = numpy.zeros([8,8]) | |
|
395 | gaintx[0:4,0:4] = 1 | |
|
396 | gaintx[4:8,4:8] = 1 | |
|
397 | ||
|
398 | gainrx = numpy.zeros([8,8]) | |
|
399 | gainrx[0:4,0:4] = 1 | |
|
400 | ||
|
401 | justrx = 0 | |
|
402 | ||
|
403 | elif pattern == 17: | |
|
404 | # Configuration for Julia CP3 | |
|
405 | title = " for Julia CP3 NS" | |
|
406 | ||
|
407 | ues = numpy.array([1.0,1.0,1.0,1.0]) | |
|
408 | phase = numpy.array([[4,4,3,2,5,5,4,3], | |
|
409 | [4,3,2,2,5,4,3,3], | |
|
410 | [3,2,5,5,4,3,2,2], | |
|
411 | [2,2,5,4,3,3,2,5], | |
|
412 | [2,2,5,4,3,3,2,5], | |
|
413 | [2,5,4,4,3,2,5,5], | |
|
414 | [5,4,3,3,2,5,4,4], | |
|
415 | [4,4,3,2,5,5,4,3]],dtype=float) | |
|
416 | ||
|
417 | gaintx = numpy.zeros([8,8]) | |
|
418 | gaintx[0:4,0:4] = 1 | |
|
419 | gaintx[4:8,4:8] = 1 | |
|
420 | ||
|
421 | gainrx = numpy.zeros([8,8]) | |
|
422 | gainrx[0:4,0:4] = 1 | |
|
423 | ||
|
424 | justrx = 0 | |
|
425 | ||
|
426 | elif pattern == 18: | |
|
427 | # Configuration for Julia V | |
|
428 | title = " for Julia V" | |
|
429 | ||
|
430 | ues = (2/3.)*numpy.array([1.5,3.0+0.75,3.0,1.5-0.75]) | |
|
431 | phase = numpy.array([[4,4,3,3,2,2,5,5], | |
|
432 | [4,3,3,2,2,5,5,4], | |
|
433 | [3,3,2,2,5,5,4,4], | |
|
434 | [3,2,2,5,5,4,4,3], | |
|
435 | [3,3,2,2,5,5,4,4], | |
|
436 | [3,2,2,5,5,4,4,3], | |
|
437 | [2,2,5,5,4,4,3,3], | |
|
438 | [2,5,5,4,4,3,3,2]],dtype=float) | |
|
439 | ||
|
440 | gaintx = numpy.zeros([8,8]) | |
|
441 | gaintx[0:4,0:4] = 1 | |
|
442 | gaintx[4:8,4:8] = 1 | |
|
443 | ||
|
444 | gainrx = numpy.zeros([8,8]) | |
|
445 | gainrx[0:4,0:4] = 1 | |
|
446 | ||
|
447 | justrx = 0 | |
|
448 | ||
|
449 | elif pattern == 19: | |
|
450 | # Configuration for Julia V | |
|
451 | title = " for Julia EW 2006-2007 (W)" | |
|
452 | ||
|
453 | ues = numpy.array([1.0+0.66,2.0+0.66,2.0,1.0]) | |
|
454 | phase = numpy.array([[4,3,2,5,4,3,2,5], | |
|
455 | [4,3,2,5,4,3,2,5], | |
|
456 | [4,3,2,5,4,3,2,5], | |
|
457 | [4,3,2,5,4,3,2,5], | |
|
458 | [5,4,3,2,5,4,3,2], | |
|
459 | [5,4,3,2,5,4,3,2], | |
|
460 | [5,4,3,2,5,4,3,2], | |
|
461 | [5,4,3,2,5,4,3,2]],dtype=float) | |
|
462 | ||
|
463 | gaintx = numpy.zeros([8,8]) | |
|
464 | gaintx[:,:] = 1 | |
|
465 | ||
|
466 | gainrx = numpy.zeros([8,8]) | |
|
467 | gainrx[:,:] = 1 | |
|
468 | ||
|
469 | justrx = 0 | |
|
470 | ||
|
471 | elif pattern == 20: | |
|
472 | # Configuration for Julia V | |
|
473 | title = " for Julia EW 2006-2007 (E)" | |
|
474 | ||
|
475 | ues = numpy.array([1.0,1.0,1.0,1.0]) | |
|
476 | phase = numpy.array([[4,4,4,4,5,5,5,5], | |
|
477 | [3,3,3,3,4,4,4,4], | |
|
478 | [5,5,5,5,2,2,2,2], | |
|
479 | [4,4,4,4,5,5,5,5], | |
|
480 | [2,2,2,2,3,3,3,3], | |
|
481 | [5,5,5,5,2,2,2,2], | |
|
482 | [3,3,3,3,4,4,4,4], | |
|
483 | [2,2,2,2,3,3,3,3]],dtype=float) | |
|
484 | ||
|
485 | gaintx = numpy.zeros([8,8]) | |
|
486 | gaintx[:,:] = 1 | |
|
487 | ||
|
488 | gainrx = numpy.zeros([8,8]) | |
|
489 | gainrx[0:4,0:4] = 1 | |
|
490 | gainrx[4:8,4:8] = 1 | |
|
491 | ||
|
492 | justrx = 0 | |
|
493 | ||
|
494 | elif pattern == 21: | |
|
495 | # Configuration for EW Imaging 1996 | |
|
496 | title = " for EW Imaging 1996" | |
|
497 | ||
|
498 | ues = numpy.array([1.0,2.0,2.0,1.0]) | |
|
499 | phase = numpy.array([[4,4,3,2,5,5,4,3], | |
|
500 | [4,3,2,2,5,4,3,3], | |
|
501 | [3,2,5,5,4,3,2,2], | |
|
502 | [2,2,5,4,3,3,2,5], | |
|
503 | [2,2,5,4,3,3,2,5], | |
|
504 | [2,5,4,4,3,2,5,5], | |
|
505 | [5,4,3,3,2,5,4,4], | |
|
506 | [4,4,3,2,5,5,4,3]],dtype=float) | |
|
507 | ||
|
508 | gaintx = numpy.zeros([8,8]) | |
|
509 | gaintx[0:4,0:4] = 1 | |
|
510 | gaintx[4:8,4:8] = 1 | |
|
511 | ||
|
512 | gainrx = numpy.zeros([8,8]) | |
|
513 | gainrx[0,0] = 1 | |
|
514 | ||
|
515 | justrx = 0 | |
|
516 | ||
|
517 | elif pattern == 22: | |
|
518 | # Configuration for EW Imaging 2003 | |
|
519 | title = " for EW Imaging 2003" | |
|
520 | ||
|
521 | ues = numpy.array([1.0,1.0,1.0,1.0]) | |
|
522 | phase = numpy.array([[4,4,3,2,0,0,0,0], | |
|
523 | [2,3,2,2,0,0,0,0], | |
|
524 | [5,0,2,5,0,0,0,0], | |
|
525 | [2,4,3,4,0,0,0,0], | |
|
526 | [0,0,0,0,3,3,2,5], | |
|
527 | [0,0,0,0,2,2,5,5], | |
|
528 | [0,0,0,0,4,3,5,4], | |
|
529 | [0,0,0,0,5,3,2,3]],dtype=float) | |
|
530 | ||
|
531 | gaintx = numpy.zeros([8,8]) | |
|
532 | gaintx[0:4,0:4] = 1 | |
|
533 | gaintx[4:8,4:8] = 1 | |
|
534 | ||
|
535 | gainrx = numpy.zeros([8,8]) | |
|
536 | gainrx[0,0] = 1 | |
|
537 | ||
|
538 | justrx = 0 | |
|
539 | ||
|
540 | elif pattern == 23: | |
|
541 | # Configuration for EW Imaging 2003 | |
|
542 | title = " for EW Imaging 2006-2008" | |
|
543 | ||
|
544 | ues = numpy.array([1.0,1.0,1.0,2.0]) | |
|
545 | phase = numpy.array([[4,4,3,2,0,0,0,0], | |
|
546 | [2,3,2,2,0,0,0,0], | |
|
547 | [5,0,2,5,0,0,0,0], | |
|
548 | [2,4,3,4,0,0,0,0], | |
|
549 | [0,0,0,0,3,3,2,5], | |
|
550 | [0,0,0,0,2,2,5,5], | |
|
551 | [0,0,0,0,4,3,5,4], | |
|
552 | [0,0,0,0,5,3,2,3]],dtype=float) | |
|
553 | ||
|
554 | gaintx = numpy.zeros([8,8]) | |
|
555 | gaintx[0:4,0:4] = 1 | |
|
556 | gaintx[4:8,4:8] = 1 | |
|
557 | ||
|
558 | gainrx = numpy.zeros([8,8]) | |
|
559 | gainrx[0,0] = 1 | |
|
560 | ||
|
561 | justrx = 0 | |
|
562 | ||
|
563 | elif pattern == 50: | |
|
564 | # Configuration for vertical drift 1996 | |
|
565 | title = " for Vertical drift 1996" | |
|
566 | ||
|
567 | ues = (2/3.)*numpy.array([0.,1.5,1.5,0.]) | |
|
568 | phase = numpy.array([[4,4,3,2,5,5,4,3], | |
|
569 | [4,3,2,2,5,4,3,3], | |
|
570 | [3,2,5,5,4,3,2,2], | |
|
571 | [2,2,5,4,3,3,2,5], | |
|
572 | [2,2,5,4,3,3,2,5], | |
|
573 | [2,5,4,4,3,2,5,5], | |
|
574 | [5,4,3,3,2,5,4,4], | |
|
575 | [4,4,3,2,5,5,4,3]],dtype=float) | |
|
576 | ||
|
577 | gaintx = numpy.zeros([8,8]) | |
|
578 | gaintx[:,:] = 1 | |
|
579 | ||
|
580 | gainrx = numpy.zeros([8,8]) | |
|
581 | gainrx[:,:] = 1 | |
|
582 | ||
|
583 | justrx = 0 | |
|
584 | ||
|
585 | elif pattern == 51: | |
|
586 | # Configuration for vertical drift 1996 | |
|
587 | title = " for East-West Drifts 1996 (W beam)" | |
|
588 | ||
|
589 | ues = numpy.array([0.0,1.0,2.0,1.0]) | |
|
590 | phase = numpy.array([[4,3,5,4,2,5,3,2], | |
|
591 | [4,3,5,4,2,5,3,2], | |
|
592 | [4,3,5,4,2,5,3,2], | |
|
593 | [4,3,5,4,2,5,3,2], | |
|
594 | [5,4,2,5,3,2,4,3], | |
|
595 | [5,4,2,5,3,2,4,3], | |
|
596 | [5,4,2,5,3,2,4,3], | |
|
597 | [5,4,2,5,3,2,4,3]],dtype=float) | |
|
598 | ||
|
599 | gaintx = numpy.zeros([8,8]) | |
|
600 | gaintx[:,:] = 1 | |
|
601 | ||
|
602 | gainrx = numpy.zeros([8,8]) | |
|
603 | gainrx[4:8,:] = 1 | |
|
604 | ||
|
605 | justrx = 0 | |
|
606 | ||
|
607 | elif pattern == 52: | |
|
608 | # Configuration for vertical drift 1996 | |
|
609 | title = " for East-West Drifts 1996 (E Beam)" | |
|
610 | ||
|
611 | ues = numpy.array([1.0,1.0,0.0,0.0]) | |
|
612 | phase = numpy.array([[4,4,4,4,5,5,5,5], | |
|
613 | [3,3,3,3,4,4,4,4], | |
|
614 | [5,5,5,5,2,2,2,2], | |
|
615 | [4,4,4,4,5,5,5,5], | |
|
616 | [2,2,2,2,3,3,3,3], | |
|
617 | [5,5,5,5,2,2,2,2], | |
|
618 | [3,3,3,3,4,4,4,4], | |
|
619 | [2,2,2,2,3,3,3,3]],dtype=float) | |
|
620 | ||
|
621 | gaintx = numpy.zeros([8,8]) | |
|
622 | gaintx[:,:] = 1 | |
|
623 | ||
|
624 | gainrx = numpy.zeros([8,8]) | |
|
625 | gainrx[:,0:4] = 1 | |
|
626 | ||
|
627 | justrx = 0 | |
|
628 | ||
|
629 | elif pattern == 53: | |
|
630 | # Configuration for vertical drift 1996 | |
|
631 | title = " for DVD position 3 (2006-2008)" | |
|
632 | ||
|
633 | ues = numpy.array([1.,2,2,1]) | |
|
634 | phase = numpy.array([[4,4,3,3,2,2,5,5], | |
|
635 | [4,3,3,2,2,5,5,4], | |
|
636 | [3,3,2,2,5,5,4,4], | |
|
637 | [3,2,2,5,5,4,4,3], | |
|
638 | [3,3,2,2,5,5,4,4], | |
|
639 | [3,2,2,5,5,4,4,3], | |
|
640 | [2,2,5,5,4,4,3,3], | |
|
641 | [2,5,5,4,4,3,3,2]],dtype=float) | |
|
642 | ||
|
643 | gaintx = numpy.zeros([8,8]) | |
|
644 | gaintx[:,:] = 1 | |
|
645 | ||
|
646 | gainrx = numpy.zeros([8,8]) | |
|
647 | gainrx[0:4,4:8] = 1 | |
|
648 | ||
|
649 | justrx = 0 | |
|
650 | ||
|
651 | elif pattern == 54: | |
|
652 | # Configuration for vertical drift 1996 | |
|
653 | title = " for DEWD (Mar 2005)" | |
|
654 | ||
|
655 | ues = numpy.array([0.,1.,1/3.,1]) | |
|
656 | phase = numpy.array([[4,3,2,5,3,3,3,3], | |
|
657 | [4,3,2,5,2,2,2,2], | |
|
658 | [4,3,2,4,5,5,5,5], | |
|
659 | [4,3,2,4,4,4,3,3], | |
|
660 | [5,4,3,2,2,2,2,2], | |
|
661 | [5,4,3,2,5,5,5,5], | |
|
662 | [5,4,3,5,4,4,4,4], | |
|
663 | [5,4,3,5,3,3,2,2]],dtype=float) | |
|
664 | ||
|
665 | gaintx = numpy.zeros([8,8]) | |
|
666 | gaintx[:,:] = 1 | |
|
667 | ||
|
668 | gainrx = numpy.zeros([8,8]) | |
|
669 | gainrx[:,0:4] = 1 | |
|
670 | ||
|
671 | justrx = 0 | |
|
672 | ||
|
673 | elif pattern == 55: | |
|
674 | # Configuration for vertical drift 1996 | |
|
675 | title = " for DEWD (Mar 2005)" | |
|
676 | ||
|
677 | ues = numpy.array([0.,1.,1/3.,1]) | |
|
678 | phase = numpy.array([[4,3,2,5,3,3,3,3], | |
|
679 | [4,3,2,5,2,2,2,2], | |
|
680 | [4,3,2,4,5,5,5,5], | |
|
681 | [4,3,2,4,4,4,3,3], | |
|
682 | [5,4,3,2,2,2,2,2], | |
|
683 | [5,4,3,2,5,5,5,5], | |
|
684 | [5,4,3,5,4,4,4,4], | |
|
685 | [5,4,3,5,3,3,2,2]],dtype=float) | |
|
686 | ||
|
687 | gaintx = numpy.zeros([8,8]) | |
|
688 | gaintx[:,:] = 1 | |
|
689 | ||
|
690 | gainrx = numpy.zeros([8,8]) | |
|
691 | gainrx[0:4:,4:8] = 1 | |
|
692 | ||
|
693 | justrx = 0 | |
|
694 | ||
|
695 | elif pattern ==56: | |
|
696 | # Configuration using antenna compression | |
|
697 | title = " for antenna compression AA*" | |
|
698 | ||
|
699 | ues = numpy.array([0.0,0.0,0.0,0.0]) | |
|
700 | phase = numpy.array([[4,4,4,2,4,4,2,4], | |
|
701 | [4,4,4,2,4,4,2,4], | |
|
702 | [2,2,2,4,2,2,4,2], | |
|
703 | [4,4,4,2,4,4,2,4], | |
|
704 | [2,2,2,4,2,2,4,2], | |
|
705 | [2,2,2,4,2,2,4,2], | |
|
706 | [4,4,4,2,4,4,2,4], | |
|
707 | [2,2,2,4,2,2,4,2]],dtype=float) | |
|
708 | ||
|
709 | gaintx = numpy.zeros([8,8]) | |
|
710 | gaintx[:,:] = 1 | |
|
711 | ||
|
712 | gainrx = numpy.zeros([8,8]) | |
|
713 | gainrx[0:4,0:4] = 1 | |
|
714 | ||
|
715 | justrx = 0 | |
|
716 | ||
|
717 | elif pattern ==57: | |
|
718 | # Configuration using antenna compression | |
|
719 | title = " for antenna compression AB*" | |
|
720 | ||
|
721 | ues = numpy.array([0.0,0.0,0.0,0.0]) | |
|
722 | phase = numpy.array([[4,4,2,4,2,2,4,2], | |
|
723 | [4,4,2,4,2,2,4,2], | |
|
724 | [2,2,4,2,4,4,2,4], | |
|
725 | [4,4,2,4,2,2,4,2], | |
|
726 | [2,2,4,2,4,4,2,4], | |
|
727 | [2,2,4,2,4,4,2,4], | |
|
728 | [4,4,2,4,2,2,4,2], | |
|
729 | [2,2,4,2,4,4,2,4]],dtype=float) | |
|
730 | ||
|
731 | gaintx = numpy.zeros([8,8]) | |
|
732 | gaintx[:,:] = 1 | |
|
733 | ||
|
734 | gainrx = numpy.zeros([8,8]) | |
|
735 | gainrx[0:4,0:4] = 1 | |
|
736 | ||
|
737 | justrx = 0 | |
|
738 | ||
|
739 | elif pattern ==58: | |
|
740 | # Configuration using in Oblique ISR 4.5 | |
|
741 | title = " for Oblique ISR 4.5" | |
|
742 | ||
|
743 | ues = numpy.array([1.0,2.0,2.0,1.0]) | |
|
744 | phase = numpy.array([[4,4,5,5,2,2,3,3], | |
|
745 | [4,5,5,2,2,3,3,4], | |
|
746 | [5,5,2,2,3,3,4,4], | |
|
747 | [5,2,2,3,3,4,4,5], | |
|
748 | [3,3,4,4,5,5,2,2], | |
|
749 | [3,4,4,5,5,2,2,3], | |
|
750 | [4,4,5,5,2,2,3,3], | |
|
751 | [4,5,5,2,2,3,3,4]],dtype=float) | |
|
752 | ||
|
753 | gaintx = numpy.zeros([8,8]) | |
|
754 | gaintx[:,:] = 1 | |
|
755 | ||
|
756 | gainrx = numpy.zeros([8,8]) | |
|
757 | gainrx[:,:] = 1 | |
|
758 | ||
|
759 | justrx = 1 | |
|
760 | ||
|
761 | elif pattern == 60: | |
|
762 | title=" for Differential phase 2000" | |
|
763 | ues = (2/3.)*numpy.array([0.,1.5-0.5,1.5,0.+0.5]) | |
|
764 | ||
|
765 | phase = numpy.array([[4,4,3,2,5,5,4,3], | |
|
766 | [4,3,2,2,5,4,3,3], | |
|
767 | [3,2,5,5,4,3,2,2], | |
|
768 | [2,2,5,4,3,3,2,5], | |
|
769 | [2,2,5,4,3,3,2,5], | |
|
770 | [2,5,4,4,3,2,5,5], | |
|
771 | [5,4,3,3,2,5,4,4], | |
|
772 | [4,4,3,2,5,5,4,3]],dtype=float) | |
|
773 | ||
|
774 | gaintx = numpy.zeros([8,8]) | |
|
775 | gaintx[:,:] = 1 | |
|
776 | ||
|
777 | gainrx = numpy.zeros([8,8]) | |
|
778 | gainrx[0:4,0:4] = 1 | |
|
779 | ||
|
780 | justrx = 0 | |
|
781 | ||
|
782 | elif pattern == 61: | |
|
783 | #for East-West 2003 W | |
|
784 | title=" for East-West 2003" | |
|
785 | ||
|
786 | ues = numpy.array([1.+0.66,2.+0.66,2.,1.]) | |
|
787 | ||
|
788 | phase = numpy.array([[4,3,2,5,4,3,2,5], | |
|
789 | [4,3,2,5,4,3,2,5], | |
|
790 | [4,3,2,5,4,3,2,5], | |
|
791 | [4,3,2,5,4,3,2,5], | |
|
792 | [5,4,3,2,5,4,3,2], | |
|
793 | [5,4,3,2,5,4,3,2], | |
|
794 | [5,4,3,2,5,4,3,2], | |
|
795 | [5,4,3,2,5,4,3,2]],dtype=float) | |
|
796 | ||
|
797 | gaintx = numpy.zeros([8,8]) | |
|
798 | gaintx[:,:] = 1 | |
|
799 | ||
|
800 | gainrx = numpy.zeros([8,8]) | |
|
801 | gainrx[4:8,:] = 1 | |
|
802 | ||
|
803 | justrx = 0 | |
|
804 | ||
|
805 | elif pattern == 62: | |
|
806 | #for East-West 2003 E | |
|
807 | title=" for East-West 2003" | |
|
808 | ||
|
809 | ues = numpy.array([1.,1.,0.+1.0,0.+1.0]) | |
|
810 | ||
|
811 | phase = numpy.array([[4,4,4,4,5,5,5,5], | |
|
812 | [3,3,3,3,4,4,4,4], | |
|
813 | [5,5,5,5,2,2,2,2], | |
|
814 | [4,4,4,4,5,5,5,5], | |
|
815 | [2,2,2,2,3,3,3,3], | |
|
816 | [5,5,5,5,2,2,2,2], | |
|
817 | [3,3,3,3,4,4,4,4], | |
|
818 | [2,2,2,2,3,3,3,3]],dtype=float) | |
|
819 | ||
|
820 | gaintx = numpy.zeros([8,8]) | |
|
821 | gaintx[:,:] = 1 | |
|
822 | ||
|
823 | gainrx = numpy.zeros([8,8]) | |
|
824 | gainrx[:,0:4] = 1 | |
|
825 | ||
|
826 | justrx = 0 | |
|
827 | ||
|
828 | elif pattern == 63: | |
|
829 | ||
|
830 | title=" for Differential phase 2004 High Alt." | |
|
831 | ||
|
832 | ues = (2/3.)*numpy.array([0.,1.5-1.0,1.5,0.+1.0]) | |
|
833 | ||
|
834 | phase = numpy.array([[4,4,3,2,5,5,4,3], | |
|
835 | [4,3,2,2,5,4,3,3], | |
|
836 | [3,2,5,5,4,3,2,2], | |
|
837 | [2,2,5,4,3,3,2,5], | |
|
838 | [2,2,5,4,3,3,2,5], | |
|
839 | [2,5,4,4,3,2,5,5], | |
|
840 | [5,4,3,3,2,5,4,4], | |
|
841 | [4,4,3,2,5,5,4,3]],dtype=float) | |
|
842 | ||
|
843 | gaintx = numpy.zeros([8,8]) | |
|
844 | gaintx[:,:] = 1 | |
|
845 | ||
|
846 | gainrx = numpy.zeros([8,8]) | |
|
847 | gainrx[:,:] = 1 | |
|
848 | ||
|
849 | justrx = 0 | |
|
850 | ||
|
851 | elif pattern == 64: | |
|
852 | ||
|
853 | title=" for Differential Phase Perp to B 2005-2006" | |
|
854 | ||
|
855 | ues = (2/3.)*numpy.array([1.5,3.0+0.75,3.0,1.5-0.75]) | |
|
856 | ||
|
857 | phase = numpy.array([[4,4,3,3,2,2,5,5], | |
|
858 | [4,3,3,2,2,5,5,4], | |
|
859 | [3,3,2,2,5,5,4,4], | |
|
860 | [3,2,2,5,5,4,4,3], | |
|
861 | [3,3,2,2,5,5,4,4], | |
|
862 | [3,2,2,5,5,4,4,3], | |
|
863 | [2,2,5,5,4,4,3,3], | |
|
864 | [2,5,5,4,4,3,3,2]],dtype=float) | |
|
865 | ||
|
866 | gaintx = numpy.zeros([8,8]) | |
|
867 | gaintx[:,:] = 1 | |
|
868 | ||
|
869 | gainrx = numpy.zeros([8,8]) | |
|
870 | gainrx[0:4,4:8] = 1 | |
|
871 | ||
|
872 | justrx = 0 | |
|
873 | ||
|
874 | elif pattern == 65: | |
|
875 | #for JULIA EW 2003 W | |
|
876 | title=" for JULIA EW 2003" | |
|
877 | ||
|
878 | ues = numpy.array([1+0.66,2+0.66,2.,1.]) | |
|
879 | ||
|
880 | phase = numpy.array([[4,3,2,5,4,3,2,5], | |
|
881 | [4,3,2,5,4,3,2,5], | |
|
882 | [4,3,2,5,4,3,2,5], | |
|
883 | [4,3,2,5,4,3,2,5], | |
|
884 | [5,4,3,2,5,4,3,2], | |
|
885 | [5,4,3,2,5,4,3,2], | |
|
886 | [5,4,3,2,5,4,3,2], | |
|
887 | [5,4,3,2,5,4,3,2]],dtype=float) | |
|
888 | ||
|
889 | gaintx = numpy.zeros([8,8]) | |
|
890 | gaintx[:,:] = 1 | |
|
891 | ||
|
892 | gainrx = numpy.zeros([8,8]) | |
|
893 | gainrx[4:8,:] = 1 | |
|
894 | ||
|
895 | justrx = 0 | |
|
896 | ||
|
897 | elif pattern == 66: | |
|
898 | #for JULIA EW 2003 E | |
|
899 | title=" for JULIA EW 2003" | |
|
900 | ||
|
901 | ues = numpy.array([1.,1.,0.,0.]) | |
|
902 | ||
|
903 | phase = numpy.array([[4,4,4,4,5,5,5,5], | |
|
904 | [3,3,3,3,4,4,4,4], | |
|
905 | [5,5,5,5,2,2,2,2], | |
|
906 | [4,4,4,4,5,5,5,5], | |
|
907 | [2,2,2,2,3,3,3,3], | |
|
908 | [5,5,5,5,2,2,2,2], | |
|
909 | [3,3,3,3,4,4,4,4], | |
|
910 | [2,2,2,2,3,3,3,3]],dtype=float) | |
|
911 | ||
|
912 | gaintx = numpy.zeros([8,8]) | |
|
913 | gaintx[:,:] = 1 | |
|
914 | ||
|
915 | gainrx = numpy.zeros([8,8]) | |
|
916 | gainrx[:,0:4] = 1 | |
|
917 | ||
|
918 | justrx = 0 | |
|
919 | ||
|
920 | elif pattern == 67: | |
|
921 | ||
|
922 | title=" for Vertical (Yellow Cables)" | |
|
923 | ||
|
924 | ues = numpy.array([0.25, 0.25, 0.25, 0.25]) | |
|
925 | ||
|
926 | phase = numpy.array([[3.41, 3.41, 3.41, 3.41, 3.41, 3.41, 3.41, 3.41], | |
|
927 | [2.78, 2.78, 2.78, 2.78, 2.78, 2.78, 2.78, 2.78], | |
|
928 | [2.15, 2.15, 2.15, 2.15, 2.15, 2.15, 2.15, 2.15], | |
|
929 | [5.52, 5.52, 5.52, 5.52, 5.52, 5.52, 5.52, 5.52], | |
|
930 | [4.89, 4.89, 4.89, 4.89, 4.89, 4.89, 4.89, 4.89], | |
|
931 | [4.26, 4.26, 4.26, 4.26, 4.26, 4.26, 4.26, 4.26], | |
|
932 | [3.63, 3.63, 3.63, 3.63, 3.63, 3.63, 3.63, 3.63], | |
|
933 | [3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00]],dtype=float) | |
|
934 | ||
|
935 | gaintx = numpy.zeros([8,8]) | |
|
936 | gaintx[:,:] = 1 | |
|
937 | ||
|
938 | gainrx = numpy.zeros([8,8]) | |
|
939 | gainrx[:,:] = 1 | |
|
940 | ||
|
941 | justrx = 0 | |
|
942 | ||
|
943 | elif pattern == 100: | |
|
944 | ||
|
945 | title=" for High Altitude Drift" | |
|
946 | ||
|
947 | ues = numpy.array([ 2.0,0.8,1.0,2.2]) | |
|
948 | ||
|
949 | phase = numpy.array([[5,5,4,4, 4,4,3,3], | |
|
950 | [5,4,4,4, 4,3,3,3], | |
|
951 | [4,4,4,4, 3,3,3,3], | |
|
952 | [4,4,4,3, 3,3,3,2], | |
|
953 | [3,3,2,2, 2,2,5,5], | |
|
954 | [3,2,2,2, 2,5,5,5], | |
|
955 | [2,2,2,2, 5,5,5,5], | |
|
956 | [2,2,2,5, 5,5,5,4]],dtype=float) | |
|
957 | ||
|
958 | gaintx = numpy.zeros([8,8]) | |
|
959 | gaintx[:,:] = 1 | |
|
960 | ||
|
961 | gainrx = numpy.zeros([8,8]) | |
|
962 | gainrx[:,:] = 1 | |
|
963 | ||
|
964 | justrx = 0 | |
|
965 | ||
|
966 | ||
|
967 | elif pattern==None: | |
|
968 | ||
|
969 | inputs = numpy.array(["title","ues_tx","phase_tx","gain_tx","gain_rx","just_rx"]) | |
|
970 | ||
|
971 | # Reading user-defined configuration. | |
|
972 | if path==None:path = os.getcwd() + os.sep + "patterns" + os.sep | |
|
973 | if filename==None:filename = "jropattern.txt" | |
|
974 | ||
|
975 | ff = open(os.path.join(path,filename),'r') | |
|
976 | ||
|
977 | while 1: | |
|
978 | # Checking EOF. | |
|
979 | init = ff.tell() | |
|
980 | if not ff.readline():break | |
|
981 | else:ff.seek(init) | |
|
982 | ||
|
983 | line = ff.readline().lstrip() | |
|
984 | if line.__len__()!=0: | |
|
985 | if line[0]!='#': | |
|
986 | keys = line.split("=") | |
|
987 | key = keys[0].lstrip().rstrip().lower() | |
|
988 | vv = numpy.where(inputs==key) | |
|
989 | if vv[0][0]==0: | |
|
990 | title = keys[1].lstrip().rstrip() | |
|
991 | elif vv[0][0]==1: | |
|
992 | ues = (keys[1].lstrip().rstrip()) | |
|
993 | ues = numpy.float32(ues[1:-1].split(",")) | |
|
994 | elif vv[0][0]==2: | |
|
995 | phase = numpy.zeros([8,8]) | |
|
996 | tx = (keys[1].lstrip().rstrip()) | |
|
997 | tx = numpy.float32(tx[2:-3].split(",")) | |
|
998 | phase[0,:] = tx | |
|
999 | for ii in numpy.arange(7): | |
|
1000 | tx = ff.readline().lstrip().rstrip() | |
|
1001 | tx = numpy.float32(tx[1:-3+(ii==6)].split(",")) | |
|
1002 | phase[ii+1,:] = tx | |
|
1003 | elif vv[0][0]==3: | |
|
1004 | gaintx = numpy.zeros([8,8]) | |
|
1005 | gg = (keys[1].lstrip().rstrip()) | |
|
1006 | gg = numpy.float32(gg[2:-3].split(",")) | |
|
1007 | gaintx[0,:] = gg | |
|
1008 | for ii in numpy.arange(7): | |
|
1009 | gg = ff.readline().lstrip().rstrip() | |
|
1010 | gg = numpy.float32(gg[1:-3+(ii==6)].split(",")) | |
|
1011 | gaintx[ii+1,:] = gg | |
|
1012 | elif vv[0][0]==4: | |
|
1013 | gainrx = numpy.zeros([8,8]) | |
|
1014 | gg = (keys[1].lstrip().rstrip()) | |
|
1015 | gg = numpy.float32(gg[2:-3].split(",")) | |
|
1016 | gainrx[0,:] = gg | |
|
1017 | for ii in numpy.arange(7): | |
|
1018 | gg = ff.readline().lstrip().rstrip() | |
|
1019 | gg = numpy.float32(gg[1:-3+(ii==6)].split(",")) | |
|
1020 | gainrx[ii+1,:] = gg | |
|
1021 | elif vv[0][0]==5: | |
|
1022 | justrx = numpy.float(keys[1].lstrip().rstrip()) | |
|
1023 | ||
|
1024 | ff.close() | |
|
1025 | ||
|
1026 | ||
|
1027 | ||
|
1028 | setup = {"ues":ues, "phase":phase, "gaintx":gaintx, "gainrx":gainrx, "justrx":justrx, \ | |
|
1029 | "title":title} | |
|
1030 | ||
|
1031 | return setup | |
|
1032 | ||
|
1033 | ||
|
1034 | ||
|
1035 | No newline at end of file |
@@ -0,0 +1,81 | |||
|
1 | """ | |
|
2 | The module MISC_ROUTINES gathers classes and functions which are useful for daily processing. As an | |
|
3 | example we have conversion factor or universal constants. | |
|
4 | ||
|
5 | MODULES CALLED: | |
|
6 | NUMPY, SYS | |
|
7 | ||
|
8 | MODIFICATION HISTORY: | |
|
9 | Created by Ing. Freddy Galindo (frederickgalindo@gmail.com). ROJ, 21 October 2009. | |
|
10 | """ | |
|
11 | ||
|
12 | import numpy | |
|
13 | import sys | |
|
14 | ||
|
15 | class CoFactors(): | |
|
16 | """ | |
|
17 | CoFactor class used to call pre-defined conversion factor (e.g. degree to radian). The cu- | |
|
18 | The current available factor are: | |
|
19 | ||
|
20 | d2r = degree to radian. | |
|
21 | s2r = seconds to radian?, degree to arcsecond.? | |
|
22 | h2r = hour to radian. | |
|
23 | h2d = hour to degree | |
|
24 | """ | |
|
25 | ||
|
26 | d2r = numpy.pi/180. | |
|
27 | s2r = numpy.pi/(180.*3600.) | |
|
28 | h2r = numpy.pi/12. | |
|
29 | h2d = 15. | |
|
30 | ||
|
31 | class Redirect: | |
|
32 | def __init__(self,stdout): | |
|
33 | self.stdout = stdout | |
|
34 | ||
|
35 | def write(self,message): | |
|
36 | self.stdout.insertPlainText(message) | |
|
37 | ||
|
38 | class WidgetPrint: | |
|
39 | """ | |
|
40 | WidgetPrint class allows to define the standard output. | |
|
41 | """ | |
|
42 | def __init__(self,textid=None): | |
|
43 | self.__stdout = sys.stdout | |
|
44 | self.textid = textid | |
|
45 | self.wPrint() | |
|
46 | ||
|
47 | def wPrint(self): | |
|
48 | if self.textid == None: sys.stdout = self.__stdout | |
|
49 | if self.textid != None: sys.stdout = Redirect(self.textid) | |
|
50 | print ("") | |
|
51 | ||
|
52 | class Vector: | |
|
53 | """ | |
|
54 | direction = 0 Polar to rectangular; direction=1 rectangular to polar | |
|
55 | """ | |
|
56 | def __init__(self,vect,direction=0): | |
|
57 | nsize = numpy.size(vect) | |
|
58 | if nsize <= 3: | |
|
59 | vect = vect.reshape(1,nsize) | |
|
60 | ||
|
61 | self.vect = vect | |
|
62 | self.dirc = direction | |
|
63 | ||
|
64 | ||
|
65 | ||
|
66 | def Polar2Rect(self): | |
|
67 | if self.dirc == 0: | |
|
68 | jvect = self.vect*numpy.pi/180. | |
|
69 | mmx = numpy.cos(jvect[:,1])*numpy.sin(jvect[:,0]) | |
|
70 | mmy = numpy.cos(jvect[:,1])*numpy.cos(jvect[:,0]) | |
|
71 | mmz = numpy.sin(jvect[:,1]) | |
|
72 | mm = numpy.array([mmx,mmy,mmz]).transpose() | |
|
73 | ||
|
74 | elif self.dirc == 1: | |
|
75 | mm = [numpy.arctan2(self.vect[:,0],self.vect[:,1]),numpy.arcsin(self.vect[:,2])] | |
|
76 | mm = numpy.array(mm)*180./numpy.pi | |
|
77 | ||
|
78 | return mm | |
|
79 | ||
|
80 | ||
|
81 |
@@ -0,0 +1,97 | |||
|
1 | ''' | |
|
2 | Created on May 8, 2013 | |
|
3 | ||
|
4 | @author: Jose Antonio Sal y Rosas Celi | |
|
5 | @contact: jose.salyrosas@jro.igp.gob.pe | |
|
6 | ''' | |
|
7 | ||
|
8 | import os | |
|
9 | from Files import Files | |
|
10 | ||
|
11 | class OverJRO(Files): | |
|
12 | ||
|
13 | __scriptName = "OverJRO.py" | |
|
14 | ||
|
15 | def __init__(self): | |
|
16 | pass | |
|
17 | ||
|
18 | def setParameters(self, path, exp_name, phase_tx, gain_tx, gain_rx, ues_tx, just_rx): | |
|
19 | self.path = path | |
|
20 | self.exp_name = exp_name | |
|
21 | self.phase_tx = phase_tx | |
|
22 | self.gain_tx = gain_tx | |
|
23 | self.gain_rx = gain_rx | |
|
24 | self.ues_tx = ues_tx | |
|
25 | self.just_rx = just_rx | |
|
26 | ||
|
27 | def saveFile(self, contentFile): | |
|
28 | filename = self.setFilename() | |
|
29 | finalpath = os.path.join(self.path, self.setFileExtension(filename)) | |
|
30 | print "HAHAH" | |
|
31 | finalpath = "apps/abs/static/data/"+finalpath | |
|
32 | self.save(finalpath, contentFile) | |
|
33 | return finalpath | |
|
34 | ||
|
35 | def setTextContent(self): | |
|
36 | title = "title ='%s'" % self.exp_name | |
|
37 | ues_tx = "ues_tx = %s" % self.ues_tx | |
|
38 | phase_tx = "phase_tx = %s" % (self.convertValue(self.phase_tx)) | |
|
39 | gain_tx = "gain_tx = %s" % (self.convertValue(self.gain_tx)) | |
|
40 | gain_rx = "gain_rx = %s" % (self.convertValue(self.gain_rx)) | |
|
41 | just_rx = "just_rx = %d" % self.just_rx | |
|
42 | content = " %s\r\n\n %s\r\n\n %s\r\n %s\r\n %s\r\n %s\r\n" % (title, ues_tx, phase_tx, gain_tx, gain_rx, just_rx) | |
|
43 | return content | |
|
44 | ||
|
45 | def setFileExtension(self, filename): | |
|
46 | txtFile = filename + ".txt" | |
|
47 | ||
|
48 | return txtFile | |
|
49 | ||
|
50 | def convertValue(self, strAntenna): | |
|
51 | value = "" | |
|
52 | strAntenna = strAntenna.replace("],[","]+[") | |
|
53 | lsAntenna = strAntenna.split("+") | |
|
54 | for i,element in enumerate(lsAntenna): | |
|
55 | if i == 0: | |
|
56 | value += "%s,$\n" % element | |
|
57 | elif i == 7: | |
|
58 | value += " %s\n" % element | |
|
59 | else: | |
|
60 | value += " %s,$\n" % element | |
|
61 | ||
|
62 | return value | |
|
63 | ||
|
64 | ||
|
65 | if __name__ == '__main__': | |
|
66 | path = "/home/fquino/workspace/radarsys/webapp/apps/abs/static/data" | |
|
67 | exp_name = "MST-ISR 2009 (NS-Up)" | |
|
68 | phase_tx = "[[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]," \ | |
|
69 | "[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0]," \ | |
|
70 | "[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]," \ | |
|
71 | "[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]," \ | |
|
72 | "[1.0,1.0,1.0,1.0,1.5,1.5,1.5,1.5]," \ | |
|
73 | "[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]," \ | |
|
74 | "[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0]," \ | |
|
75 | "[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]]" | |
|
76 | gain_tx = "[[1,1,1,1,1,1,1,1]," \ | |
|
77 | "[1,1,1,1,1,1,1,1]," \ | |
|
78 | "[1,1,1,1,1,1,1,1]," \ | |
|
79 | "[1,1,1,1,1,1,1,1]," \ | |
|
80 | "[1,1,1,1,1,1,1,1]," \ | |
|
81 | "[1,1,1,1,1,1,1,1]," \ | |
|
82 | "[1,1,1,1,1,1,1,1]," \ | |
|
83 | "[1,1,1,1,1,1,1,1]]" | |
|
84 | gain_rx = "[[1,1,1,1,0,0,0,0]," \ | |
|
85 | "[1,1,1,1,0,0,0,0]," \ | |
|
86 | "[1,1,1,1,0,0,0,0]," \ | |
|
87 | "[1,1,1,1,0,0,0,0]," \ | |
|
88 | "[0,0,0,0,1,1,1,1]," \ | |
|
89 | "[0,0,0,0,1,1,1,1]," \ | |
|
90 | "[0,0,0,0,1,1,1,1]," \ | |
|
91 | "[0,0,0,0,1,1,1,1]]" | |
|
92 | ues_tx = "[0.533333,0.00000,1.06667,0.00000]" | |
|
93 | just_rx = 0 | |
|
94 | data = OverJRO() | |
|
95 | data.setParameters(path, exp_name, phase_tx, gain_tx, gain_rx, ues_tx, just_rx) | |
|
96 | contentFile = data.setTextContent() | |
|
97 | data.saveFile(contentFile) |
@@ -0,0 +1,427 | |||
|
1 | """ | |
|
2 | The TIME_CONVERSIONS.py module gathers classes and functions for time system transformations | |
|
3 | (e.g. between seconds from 1970 to datetime format). | |
|
4 | ||
|
5 | MODULES CALLED: | |
|
6 | NUMPY, TIME, DATETIME, CALENDAR | |
|
7 | ||
|
8 | MODIFICATION HISTORY: | |
|
9 | Created by Ing. Freddy Galindo (frederickgalindo@gmail.com). ROJ Aug 13, 2009. | |
|
10 | """ | |
|
11 | ||
|
12 | import numpy | |
|
13 | import time | |
|
14 | #import datetime as dt | |
|
15 | import calendar | |
|
16 | ||
|
17 | class Time: | |
|
18 | """ | |
|
19 | time(year,month,dom,hour,min,secs) | |
|
20 | ||
|
21 | An object represents a date and time of certain event.. | |
|
22 | ||
|
23 | Parameters | |
|
24 | ---------- | |
|
25 | YEAR = Number of the desired year. Year must be valid values from the civil calendar. | |
|
26 | Years B.C.E must be represented as negative integers. Years in the common era are repre- | |
|
27 | sented as positive integers. In particular, note that there is no year 0 in the civil | |
|
28 | calendar. 1 B.C.E. (-1) is followed by 1 C.E. (1). | |
|
29 | ||
|
30 | MONTH = Number of desired month (1=Jan, ..., 12=December). | |
|
31 | ||
|
32 | DOM = Number of day of the month. | |
|
33 | ||
|
34 | HOUR = Number of the hour of the day. By default hour=0 | |
|
35 | ||
|
36 | MINS = Number of the minute of the hour. By default min=0 | |
|
37 | ||
|
38 | SECS = Number of the second of the minute. By default secs=0. | |
|
39 | ||
|
40 | Examples | |
|
41 | -------- | |
|
42 | time_info = time(2008,9,30,12,30,00) | |
|
43 | ||
|
44 | time_info = time(2008,9,30) | |
|
45 | """ | |
|
46 | ||
|
47 | def __init__(self,year=None,month=None,dom=None,hour=0,mins=0,secs=0): | |
|
48 | # If one the first three inputs are not defined, it takes the current date. | |
|
49 | date = time.localtime() | |
|
50 | if year==None:year=date[0] | |
|
51 | if month==None:month=date[1] | |
|
52 | if dom==None:dom=date[2] | |
|
53 | ||
|
54 | # Converting to arrays | |
|
55 | year = numpy.array([year]); month = numpy.array([month]); dom = numpy.array([dom]) | |
|
56 | hour = numpy.array([hour]); mins = numpy.array([mins]); secs = numpy.array([secs]) | |
|
57 | ||
|
58 | # Defining time information object. | |
|
59 | self.year = numpy.atleast_1d(year) | |
|
60 | self.month = numpy.atleast_1d(month) | |
|
61 | self.dom = numpy.atleast_1d(dom) | |
|
62 | self.hour = numpy.atleast_1d(hour) | |
|
63 | self.mins = numpy.atleast_1d(mins) | |
|
64 | self.secs = numpy.atleast_1d(secs) | |
|
65 | ||
|
66 | def change2julday(self): | |
|
67 | """ | |
|
68 | Converts a datetime to Julian days. | |
|
69 | """ | |
|
70 | ||
|
71 | # Defining constants | |
|
72 | greg = 2299171 # incorrect Julian day for Oct, 25, 1582. | |
|
73 | min_calendar = -4716 | |
|
74 | max_calendar = 5000000 | |
|
75 | ||
|
76 | min_year = numpy.nanmin(self.year) | |
|
77 | max_year = numpy.nanmax(self.year) | |
|
78 | if (min_year<min_calendar) or (max_year>max_calendar): | |
|
79 | print ("Value of Julian date is out of allowed range") | |
|
80 | return -1 | |
|
81 | ||
|
82 | noyear = numpy.sum(self.year==0) | |
|
83 | if noyear>0: | |
|
84 | print ("There is no year zero in the civil calendar") | |
|
85 | return -1 | |
|
86 | ||
|
87 | # Knowing if the year is less than 0. | |
|
88 | bc = self.year<0 | |
|
89 | ||
|
90 | # Knowing if the month is less than March. | |
|
91 | inJanFeb = self.month<=2 | |
|
92 | ||
|
93 | jy = self.year + bc - inJanFeb | |
|
94 | jm = self.month + (1 + 12*inJanFeb) | |
|
95 | ||
|
96 | # Computing Julian days. | |
|
97 | jul= numpy.floor(365.25*jy) + numpy.floor(30.6001*jm) + (self.dom+1720995.0) | |
|
98 | ||
|
99 | # Test whether to change to Gregorian Calendar | |
|
100 | if numpy.min(jul) >= greg: | |
|
101 | ja = numpy.int32(0.01*jy) | |
|
102 | jul = jul + 2 - ja + numpy.int32(0.25*ja) | |
|
103 | else: | |
|
104 | gregchange = numpy.where(jul >= greg) | |
|
105 | if gregchange[0].size>0: | |
|
106 | ja = numpy.int32(0.01 + jy[gregchange]) | |
|
107 | jy[gregchange] = jy[gregchange] + 2 - ja + numpy.int32(0.25*ja) | |
|
108 | ||
|
109 | # Determining machine-specific parameters affecting floating-point. | |
|
110 | eps = 0.0 # Replace this line for a function to get precision. | |
|
111 | eps = abs(jul)*0.0 > eps | |
|
112 | ||
|
113 | jul = jul + (self.hour/24. -0.5) + (self.mins/1440.) + (self.secs/86400.) + eps | |
|
114 | ||
|
115 | return jul[0] | |
|
116 | ||
|
117 | def change2secs(self): | |
|
118 | """ | |
|
119 | Converts datetime to number of seconds respect to 1970. | |
|
120 | """ | |
|
121 | ||
|
122 | year = self.year | |
|
123 | if year.size>1: year = year[0] | |
|
124 | ||
|
125 | month = self.month | |
|
126 | if month.size>1: month = month[0] | |
|
127 | ||
|
128 | dom = self.dom | |
|
129 | if dom.size>1: dom = dom[0] | |
|
130 | ||
|
131 | # Resizing hour, mins and secs if it was necessary. | |
|
132 | hour = self.hour | |
|
133 | if hour.size>1:hour = hour[0] | |
|
134 | if hour.size==1:hour = numpy.resize(hour,year.size) | |
|
135 | ||
|
136 | mins = self.mins | |
|
137 | if mins.size>1:mins = mins[0] | |
|
138 | if mins.size==1:mins = numpy.resize(mins,year.size) | |
|
139 | ||
|
140 | secs = self.secs | |
|
141 | if secs.size>1:secs = secs[0] | |
|
142 | if secs.size==1:secs = numpy.resize(secs,year.size) | |
|
143 | ||
|
144 | # Using time.mktime to compute seconds respect to 1970. | |
|
145 | secs1970 = numpy.zeros(year.size) | |
|
146 | for ii in numpy.arange(year.size): | |
|
147 | secs1970[ii] = time.mktime((int(year[ii]),int(month[ii]),int(dom[ii]),\ | |
|
148 | int(hour[ii]),int(mins[ii]),int(secs[ii]),0,0,0)) | |
|
149 | ||
|
150 | secs1970 = numpy.int32(secs1970 - time.timezone) | |
|
151 | ||
|
152 | return secs1970 | |
|
153 | ||
|
154 | def change2strdate(self,mode=1): | |
|
155 | """ | |
|
156 | change2strdate method converts a date and time of certain event to date string. The | |
|
157 | string format is like localtime (e.g. Fri Oct 9 15:00:19 2009). | |
|
158 | ||
|
159 | Parameters | |
|
160 | ---------- | |
|
161 | None. | |
|
162 | ||
|
163 | Return | |
|
164 | ------ | |
|
165 | ||
|
166 | Modification History | |
|
167 | -------------------- | |
|
168 | Created by Freddy R. Galindo, ROJ, 09 October 2009. | |
|
169 | ||
|
170 | """ | |
|
171 | ||
|
172 | secs = numpy.atleast_1d(self.change2secs()) | |
|
173 | strdate = [] | |
|
174 | for ii in numpy.arange(numpy.size(secs)): | |
|
175 | secs_tmp = time.localtime(secs[ii] + time.timezone) | |
|
176 | if mode==1: | |
|
177 | strdate.append(time.strftime("%d-%b-%Y (%j) %H:%M:%S",secs_tmp)) | |
|
178 | elif mode==2: | |
|
179 | strdate.append(time.strftime("%d-%b-%Y (%j)",secs_tmp)) | |
|
180 | ||
|
181 | strdate = numpy.array(strdate) | |
|
182 | ||
|
183 | return strdate | |
|
184 | ||
|
185 | ||
|
186 | class Secs: | |
|
187 | """ | |
|
188 | secs(secs): | |
|
189 | ||
|
190 | An object represents the number of seconds respect to 1970. | |
|
191 | ||
|
192 | Parameters | |
|
193 | ---------- | |
|
194 | ||
|
195 | SECS = A scalar or array giving the number of seconds respect to 1970. | |
|
196 | ||
|
197 | Example: | |
|
198 | -------- | |
|
199 | secs_info = secs(1251241373) | |
|
200 | ||
|
201 | secs_info = secs([1251241373,1251241383,1251241393]) | |
|
202 | """ | |
|
203 | def __init__(self,secs): | |
|
204 | self.secs = secs | |
|
205 | ||
|
206 | def change2julday(self): | |
|
207 | """ | |
|
208 | Convert seconds from 1970 to Julian days. | |
|
209 | """ | |
|
210 | ||
|
211 | secs_1970 = time(1970,1,1,0,0,0).change2julday() | |
|
212 | ||
|
213 | julian = self.secs/86400.0 + secs_1970 | |
|
214 | ||
|
215 | return julian | |
|
216 | ||
|
217 | def change2time(self): | |
|
218 | """ | |
|
219 | Converts seconds from 1970 to datetime. | |
|
220 | """ | |
|
221 | ||
|
222 | secs1970 = numpy.atleast_1d(self.secs) | |
|
223 | ||
|
224 | datetime = numpy.zeros((9,secs1970.size)) | |
|
225 | for ii in numpy.arange(secs1970.size): | |
|
226 | tuple = time.gmtime(secs1970[ii]) | |
|
227 | datetime[0,ii] = tuple[0] | |
|
228 | datetime[1,ii] = tuple[1] | |
|
229 | datetime[2,ii] = tuple[2] | |
|
230 | datetime[3,ii] = tuple[3] | |
|
231 | datetime[4,ii] = tuple[4] | |
|
232 | datetime[5,ii] = tuple[5] | |
|
233 | datetime[6,ii] = tuple[6] | |
|
234 | datetime[7,ii] = tuple[7] | |
|
235 | datetime[8,ii] = tuple[8] | |
|
236 | ||
|
237 | datetime = numpy.int32(datetime) | |
|
238 | ||
|
239 | return datetime | |
|
240 | ||
|
241 | ||
|
242 | class Julian: | |
|
243 | """ | |
|
244 | julian(julian): | |
|
245 | ||
|
246 | An object represents julian days. | |
|
247 | ||
|
248 | Parameters | |
|
249 | ---------- | |
|
250 | ||
|
251 | JULIAN = A scalar or array giving the julina days. | |
|
252 | ||
|
253 | Example: | |
|
254 | -------- | |
|
255 | julian_info = julian(2454740) | |
|
256 | ||
|
257 | julian_info = julian([2454740,2454760,2454780]) | |
|
258 | """ | |
|
259 | def __init__(self,julian): | |
|
260 | self.julian = numpy.atleast_1d(julian) | |
|
261 | ||
|
262 | def change2time(self): | |
|
263 | """ | |
|
264 | change2time method converts from julian day to calendar date and time. | |
|
265 | ||
|
266 | Return | |
|
267 | ------ | |
|
268 | year = An array giving the year of the desired julian day. | |
|
269 | month = An array giving the month of the desired julian day. | |
|
270 | dom = An array giving the day of the desired julian day. | |
|
271 | hour = An array giving the hour of the desired julian day. | |
|
272 | mins = An array giving the minute of the desired julian day. | |
|
273 | secs = An array giving the second of the desired julian day. | |
|
274 | ||
|
275 | Examples | |
|
276 | -------- | |
|
277 | >> jd = 2455119.0 | |
|
278 | >> [yy,mo,dd,hh,mi,ss] = TimeTools.julian(jd).change2time() | |
|
279 | >> print ([yy,mo,dd,hh,mi,ss]) | |
|
280 | [2009] [10] [ 14.] [ 12.] [ 0.] [ 0.] | |
|
281 | ||
|
282 | Modification history | |
|
283 | -------------------- | |
|
284 | Translated from "Numerical Recipies in C", by William H. Press, Brian P. Flannery, | |
|
285 | Saul A. Teukolsky, and William T. Vetterling. Cambridge University Press, 1988. | |
|
286 | Converted to Python by Freddy R. Galindo, ROJ, 06 October 2009. | |
|
287 | """ | |
|
288 | ||
|
289 | min_julian = -1095 | |
|
290 | max_julian = 1827933925 | |
|
291 | if (numpy.min(self.julian) < min_julian) or (numpy.max(self.julian) > max_julian): | |
|
292 | print ('Value of Julian date is out of allowed range.') | |
|
293 | return None | |
|
294 | ||
|
295 | # Beginning of Gregorian calendar | |
|
296 | igreg = 2299161 | |
|
297 | julLong = numpy.floor(self.julian + 0.5) | |
|
298 | minJul = numpy.min(julLong) | |
|
299 | ||
|
300 | if (minJul >= igreg): | |
|
301 | # All are Gregorian | |
|
302 | jalpha = numpy.int32(((julLong - 1867216) - 0.25)/36524.25) | |
|
303 | ja = julLong + 1 + jalpha - numpy.int32(0.25*jalpha) | |
|
304 | else: | |
|
305 | ja = julLong | |
|
306 | gregChange = numpy.where(julLong >= igreg) | |
|
307 | if gregChange[0].size>0: | |
|
308 | jalpha = numpy.int32(((julLong[gregChange]-1867216) - 0.25)/36524.25) | |
|
309 | ja[gregChange] = julLong[gregChange]+1+jalpha-numpy.int32(0.25*jalpha) | |
|
310 | ||
|
311 | # clear memory. | |
|
312 | jalpha = -1 | |
|
313 | ||
|
314 | jb = ja + 1524 | |
|
315 | jc = numpy.int32(6680. + ((jb-2439870)-122.1)/365.25) | |
|
316 | jd = numpy.int32(365.*jc + (0.25*jc)) | |
|
317 | je = numpy.int32((jb - jd)/30.6001) | |
|
318 | ||
|
319 | dom = jb - jd - numpy.int32(30.6001*je) | |
|
320 | month = je - 1 | |
|
321 | month = ((month - 1) % 12) + 1 | |
|
322 | month = numpy.atleast_1d(month) | |
|
323 | year = jc - 4715 | |
|
324 | year = year - (month > 2)*1 | |
|
325 | year = year - (year <= 0)*1 | |
|
326 | year = numpy.atleast_1d(year) | |
|
327 | ||
|
328 | # Getting hours, minutes, seconds | |
|
329 | fraction = self.julian + 0.5 - julLong | |
|
330 | eps_0 = dom*0.0 + 1.0e-12 | |
|
331 | eps_1 = 1.0e-12*numpy.abs(julLong) | |
|
332 | eps = (eps_0>eps_1)*eps_0 + (eps_0<=eps_1)*eps_1 | |
|
333 | ||
|
334 | hour_0 = dom*0 + 23 | |
|
335 | hour_2 = dom*0 + 0 | |
|
336 | hour_1 = numpy.floor(fraction*24.0 + eps) | |
|
337 | hour = ((hour_1>hour_0)*23) + ((hour_1<=hour_0)*hour_1) | |
|
338 | hour = ((hour_1<hour_2)*0) + ((hour_1>=hour_2)*hour_1) | |
|
339 | ||
|
340 | fraction = fraction - (hour/24.0) | |
|
341 | mins_0 = dom*0 + 59 | |
|
342 | mins_2 = dom*0 + 0 | |
|
343 | mins_1 = numpy.floor(fraction*1440.0 + eps) | |
|
344 | mins = ((mins_1>mins_0)*59) + ((mins_1<=mins_0)*mins_1) | |
|
345 | mins = ((mins_1<mins_2)*0) + ((mins_1>=mins_2)*mins_1) | |
|
346 | ||
|
347 | secs_2 = dom*0 + 0 | |
|
348 | secs_1 = (fraction - mins/1440.0)*86400.0 | |
|
349 | secs = ((secs_1<secs_2)*0) + ((secs_1>=secs_2)*secs_1) | |
|
350 | ||
|
351 | return year,month,dom,hour,mins,secs | |
|
352 | ||
|
353 | def change2secs(self): | |
|
354 | """ | |
|
355 | Converts from Julian days to seconds from 1970. | |
|
356 | """ | |
|
357 | ||
|
358 | jul_1970 = Time(1970,1,1,0,0,0).change2julday() | |
|
359 | ||
|
360 | secs = numpy.int32((self.julian - jul_1970)*86400) | |
|
361 | ||
|
362 | return secs | |
|
363 | ||
|
364 | def change2lst(self,longitude=-76.8667): | |
|
365 | """ | |
|
366 | CT2LST converts from local civil time to local mean sideral time | |
|
367 | ||
|
368 | longitude = The longitude in degrees (east of Greenwich) of the place for which | |
|
369 | the local sideral time is desired, scalar. The Greenwich mean sideral time (GMST) | |
|
370 | can be found by setting longitude=0. | |
|
371 | """ | |
|
372 | ||
|
373 | # Useful constants, see Meus, p. 84 | |
|
374 | c = numpy.array([280.46061837, 360.98564736629, 0.000387933, 38710000.0]) | |
|
375 | jd2000 = 2451545.0 | |
|
376 | t0 = self.julian - jd2000 | |
|
377 | t = t0/36525. | |
|
378 | ||
|
379 | # Computing GST in seconds | |
|
380 | theta = c[0] + (c[1]*t0) + (t**2)*(c[2]-t/c[3]) | |
|
381 | ||
|
382 | # Computing LST in hours | |
|
383 | lst = (theta + longitude)/15.0 | |
|
384 | neg = numpy.where(lst < 0.0) | |
|
385 | if neg[0].size>0:lst[neg] = 24.0 + (lst[neg] % 24) | |
|
386 | lst = lst % 24.0 | |
|
387 | ||
|
388 | return lst | |
|
389 | ||
|
390 | ||
|
391 | class date2doy: | |
|
392 | def __init__(self,year,month,day): | |
|
393 | self.year = year | |
|
394 | self.month = month | |
|
395 | self.day = day | |
|
396 | ||
|
397 | def change2doy(self): | |
|
398 | if calendar.isleap(self.year) == True: | |
|
399 | tfactor = 1 | |
|
400 | else: | |
|
401 | tfactor = 2 | |
|
402 | ||
|
403 | day = self.day | |
|
404 | month = self.month | |
|
405 | ||
|
406 | doy = numpy.floor((275*month)/9.0) - (tfactor*numpy.floor((month+9)/12.0)) + day - 30 | |
|
407 | ||
|
408 | return numpy.int32(doy) | |
|
409 | ||
|
410 | ||
|
411 | class Doy2Date: | |
|
412 | def __init__(self,year,doy): | |
|
413 | self.year = year | |
|
414 | self.doy = doy | |
|
415 | ||
|
416 | def change2date(self): | |
|
417 | months = numpy.arange(12) + 1 | |
|
418 | ||
|
419 | first_dem = date2doy(self.year,months,1) | |
|
420 | first_dem = first_dem.change2doy() | |
|
421 | ||
|
422 | imm = numpy.where((self.doy - first_dem) > 0) | |
|
423 | ||
|
424 | month = imm[0].size | |
|
425 | dom = self.doy -first_dem[month - 1] + 1 | |
|
426 | ||
|
427 | return month, dom |
|
1 | NO CONTENT: new file 100644 |
|
1 | NO CONTENT: new file 100755, binary diff hidden |
@@ -0,0 +1,1 | |||
|
1 | Edwin Christian Yllanes Cucho |
|
1 | NO CONTENT: new file 100755, binary diff hidden |
@@ -0,0 +1,34 | |||
|
1 | from numpy import * | |
|
2 | from scipy import optimize | |
|
3 | ||
|
4 | def gaussian(height, center_x, center_y, width_x, width_y): | |
|
5 | """Returns a gaussian function with the given parameters""" | |
|
6 | width_x = float(width_x) | |
|
7 | width_y = float(width_y) | |
|
8 | return lambda x,y: height*exp( | |
|
9 | -(((center_x-x)/width_x)**2+((center_y-y)/width_y)**2)/2) | |
|
10 | ||
|
11 | def moments(data): | |
|
12 | """Returns (height, x, y, width_x, width_y) | |
|
13 | the gaussian parameters of a 2D distribution by calculating its | |
|
14 | moments """ | |
|
15 | total = data.sum() | |
|
16 | X, Y = indices(data.shape) | |
|
17 | x = (X*data).sum()/total | |
|
18 | y = (Y*data).sum()/total | |
|
19 | col = data[:, int(y)] | |
|
20 | width_x = sqrt(abs((arange(col.size)-y)**2*col).sum()/col.sum()) | |
|
21 | row = data[int(x), :] | |
|
22 | width_y = sqrt(abs((arange(row.size)-x)**2*row).sum()/row.sum()) | |
|
23 | height = data.max() | |
|
24 | return height, x, y, width_x, width_y | |
|
25 | ||
|
26 | def fitgaussian(data): | |
|
27 | """Returns (height, x, y, width_x, width_y) | |
|
28 | the gaussian parameters of a 2D distribution found by a fit""" | |
|
29 | params = moments(data) | |
|
30 | errorfunction = lambda p: ravel(gaussian(*p)(*indices(data.shape)) - | |
|
31 | data) | |
|
32 | p, success = optimize.leastsq(errorfunction, params) | |
|
33 | return p | |
|
34 |
@@ -0,0 +1,10 | |||
|
1 | #!/usr/bin/env python | |
|
2 | import os | |
|
3 | import sys | |
|
4 | ||
|
5 | if __name__ == "__main__": | |
|
6 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "radarsys.settings") | |
|
7 | ||
|
8 | from django.core.management import execute_from_command_line | |
|
9 | ||
|
10 | execute_from_command_line(sys.argv) |
This diff has been collapsed as it changes many lines, (1632 lines changed) Show them Hide them | |||
@@ -0,0 +1,1632 | |||
|
1 | #!/usr/bin/python | |
|
2 | ||
|
3 | ||
|
4 | import sys, os, os.path | |
|
5 | import traceback | |
|
6 | import cgi, Cookie | |
|
7 | import time, datetime | |
|
8 | import types | |
|
9 | import numpy | |
|
10 | import numpy.fft | |
|
11 | import scipy.linalg | |
|
12 | import scipy.special | |
|
13 | #import Numeric | |
|
14 | ||
|
15 | import Misc_Routines | |
|
16 | import TimeTools | |
|
17 | import JroAntSetup | |
|
18 | import Graphics_OverJro | |
|
19 | import Astro_Coords | |
|
20 | ||
|
21 | class JroPattern(): | |
|
22 | def __init__(self,pattern=0,path=None,filename=None,nptsx=101,nptsy=101,maxphi=5,fftopt=0, \ | |
|
23 | getcut=0,dcosx=None,dcosy=None,eomwl=6,airwl=4): | |
|
24 | """ | |
|
25 | JroPattern class creates an object to represent the useful parameters for beam mode- | |
|
26 | lling of the Jicamarca VHF radar. | |
|
27 | ||
|
28 | Parameters | |
|
29 | ---------- | |
|
30 | pattern = An integer (See JroAntSetup to know the available values) to load a prede- | |
|
31 | fined configuration. The default value is 0. To use a user-defined configuration | |
|
32 | pattern must be None. | |
|
33 | path = A string giving the directory that contains the user-configuration file. PATH | |
|
34 | will work if pattern is None. | |
|
35 | filename = A string giving the name of the user-configuration file. FILENAME will | |
|
36 | work if pattern is None. | |
|
37 | nptsx = A scalar to specify the number of points used to define the angular resolu- | |
|
38 | tion in the "x" axis. The default value is 101. | |
|
39 | nptsy = A scalar to specify the number of points used to define the angular resolu- | |
|
40 | tion in the "x" axis. The default value is 101. | |
|
41 | maxphi = A scalar giving the maximum (absolute) angle (in degree) to model the ante- | |
|
42 | nna pattern. The default value is 5 degrees. | |
|
43 | fftopt = Set this input to 1 to model the beam using FFT. To model using antenna | |
|
44 | theory set to 0 (default value). | |
|
45 | getcut = Set to 1 to show an antenna cut instead of a contour plot of itself (set to | |
|
46 | 0). The defautl value is 0. | |
|
47 | dcosx = An array giving the directional cosines for the x-axis. DCOSX will work if | |
|
48 | getcut is actived. | |
|
49 | dcosy = An array giving the directional cosines for the y-axis. DCOSY will work if | |
|
50 | getcut is actived. | |
|
51 | eomwl = A scalar giving the radar wavelength. The default value is 6m (50 MHZ). | |
|
52 | airwl = Set this input to float (or intger) to specify the wavelength (in meters) of | |
|
53 | the transmitted EOM wave in the air. The default value is 4m. | |
|
54 | ||
|
55 | Modification History | |
|
56 | -------------------- | |
|
57 | Converted to Object-oriented Programming by Freddy Galindo, ROJ, 20 September 2009. | |
|
58 | """ | |
|
59 | ||
|
60 | ||
|
61 | ||
|
62 | # Getting antenna configuration. | |
|
63 | setup = JroAntSetup.ReturnSetup(path=path,filename=filename,pattern=pattern) | |
|
64 | ||
|
65 | ues = setup["ues"] | |
|
66 | phase = setup["phase"] | |
|
67 | gaintx = setup["gaintx"] | |
|
68 | gainrx = setup["gainrx"] | |
|
69 | justrx = setup["justrx"] | |
|
70 | ||
|
71 | # Defining attributes for JroPattern class. | |
|
72 | # Antenna configuration | |
|
73 | self.uestx = ues | |
|
74 | self.phasetx = phase | |
|
75 | self.gaintx = gaintx | |
|
76 | self.uesrx = ues | |
|
77 | self.phaserx = phase | |
|
78 | self.gainrx = gainrx | |
|
79 | self.justrx = justrx | |
|
80 | ||
|
81 | # Pattern resolution & method to model | |
|
82 | self.maxphi = maxphi | |
|
83 | self.nptsx = nptsx | |
|
84 | self.nptsy = nptsy | |
|
85 | self.fftopt = fftopt | |
|
86 | ||
|
87 | # To get a cut of the pattern. | |
|
88 | self.getcut = getcut | |
|
89 | ||
|
90 | maxdcos = numpy.sin(maxphi*Misc_Routines.CoFactors.d2r) | |
|
91 | if dcosx==None:dcosx = ((numpy.arange(nptsx,dtype=float)/(nptsx-1))-0.5)*2*maxdcos | |
|
92 | if dcosy==None:dcosy = ((numpy.arange(nptsy,dtype=float)/(nptsy-1))-0.5)*2*maxdcos | |
|
93 | self.dcosx = dcosx | |
|
94 | self.dcosy = dcosy | |
|
95 | self.nx = dcosx.size | |
|
96 | self.ny = dcosy.size*(getcut==0) + (getcut==1) | |
|
97 | ||
|
98 | self.eomwl = eomwl | |
|
99 | self.airwl = airwl | |
|
100 | ||
|
101 | self.kk = 2.*numpy.pi/eomwl | |
|
102 | ||
|
103 | self.pattern = None | |
|
104 | self.meanpos = None | |
|
105 | self.norpattern = None | |
|
106 | self.maxpattern = None | |
|
107 | ||
|
108 | self.title = setup["title"] | |
|
109 | ||
|
110 | self.getPattern() | |
|
111 | ||
|
112 | def getPattern(self): | |
|
113 | """ | |
|
114 | getpattern method returns the modelled total antenna pattern and its mean position. | |
|
115 | ||
|
116 | Return | |
|
117 | ------ | |
|
118 | pattern = An array giving the Modelled antenna pattern. | |
|
119 | mean_pos = A 2-elements array giving the mean position of the main beam. | |
|
120 | ||
|
121 | Examples | |
|
122 | -------- | |
|
123 | >> [pattern, mean_pos] = JroPattern(pattern=2).getPattern() | |
|
124 | >> print meanpos | |
|
125 | [ 8.08728085e-14 -4.78193873e-14] | |
|
126 | ||
|
127 | Modification history | |
|
128 | -------------------- | |
|
129 | Developed by Jorge L. Chau. | |
|
130 | Converted to Python by Freddy R. Galindo, ROJ, 20 September 2009. | |
|
131 | """ | |
|
132 | ||
|
133 | if (self.fftopt>0) and (self.getcut>0): | |
|
134 | #print "Conflict bewteen fftopt and getcut" | |
|
135 | #print "To get a cut of the antenna pattern uses ffopt=0" | |
|
136 | return None, None | |
|
137 | ||
|
138 | if (self.fftopt==0): | |
|
139 | # Getting antenna pattern using the array method | |
|
140 | self.pattern = self.__usingArray(rx=1) | |
|
141 | if (self.justrx==0):self.pattern = self.pattern*self.__usingArray(rx=0) | |
|
142 | ||
|
143 | elif (self.fftopt>0): | |
|
144 | # Getting antenna pattern using FFT method | |
|
145 | self.pattern = self.__usingFFT(rx=1) | |
|
146 | if (self.justrx==0):self.pattern = self.pattern*self.__usingFFT(rx=0) | |
|
147 | ||
|
148 | self.maxpattern = numpy.nanmax(self.pattern) | |
|
149 | self.norpattern = self.pattern/self.maxpattern | |
|
150 | if self.getcut==0:self.__getBeamPars() | |
|
151 | ||
|
152 | def __usingArray(self,rx): | |
|
153 | """ | |
|
154 | __usingArray method returns the Jicamarca antenna pattern computed using array model | |
|
155 | ||
|
156 | pattern = dipolepattern x modulepattern | |
|
157 | ||
|
158 | Parameters | |
|
159 | ---------- | |
|
160 | rx = Set to 1 to use the Rx information. Otherwise set to 0 for Tx. | |
|
161 | ||
|
162 | Return | |
|
163 | ------ | |
|
164 | pattern = An array giving the modelled antenna pattern using the array model. | |
|
165 | ||
|
166 | Modification history | |
|
167 | -------------------- | |
|
168 | Developed by Jorge L. Chau. | |
|
169 | Converted to Python by Freddy R. Galindo, ROJ, 20 September 2009. | |
|
170 | """ | |
|
171 | ||
|
172 | if rx==1: | |
|
173 | ues = self.uesrx | |
|
174 | phase = self.phaserx | |
|
175 | gain = self.gainrx | |
|
176 | elif rx==0: | |
|
177 | ues = self.uestx | |
|
178 | phase = self.phasetx | |
|
179 | gain = self.gaintx | |
|
180 | ||
|
181 | ues = ues*360./self.airwl | |
|
182 | phase = phase*360./self.airwl | |
|
183 | ||
|
184 | for ii in range(4): | |
|
185 | if ii==0:dim = numpy.array([4,0,8,4]) # WEST | |
|
186 | elif ii==1:dim = numpy.array([0,0,4,4]) # NORTH | |
|
187 | elif ii==2:dim = numpy.array([0,4,4,8]) # EAST | |
|
188 | elif ii==3:dim = numpy.array([4,4,8,8]) # SOUTH | |
|
189 | xi = dim[0]; xf = dim[2]; yi = dim[1]; yf = dim[3] | |
|
190 | phase[xi:xf,yi:yf] = phase[xi:xf,yi:yf] + ues[ii] | |
|
191 | ||
|
192 | phase = -phase | |
|
193 | ||
|
194 | ar = self.eomwl*numpy.array([[0.5,6., 24.5],[0.5,6.,24.5]]) | |
|
195 | nr = numpy.array([[12.,4.,2.],[12.,4.,2.]]) | |
|
196 | lr = 0.25*self.eomwl*numpy.array([[0,0.,0],[0.,0,0]]) | |
|
197 | ||
|
198 | # Computing module and dipole patterns. | |
|
199 | pattern = (numpy.abs(self.__dipPattern(ar,nr,lr)*self.__modPattern(phase,gain)))**2 | |
|
200 | ||
|
201 | return pattern | |
|
202 | ||
|
203 | def __usingFFT(self,rx): | |
|
204 | """ | |
|
205 | __usingFFT method returns the Jicamarca antenna pattern computed using The Fast Fou- | |
|
206 | rier Transform. | |
|
207 | ||
|
208 | pattern = iFFT(FFT(gain*EXP(j*phase))) | |
|
209 | ||
|
210 | Parameters | |
|
211 | ---------- | |
|
212 | rx = Set to 1 to use the Rx information. Otherwise set to 0 for Tx. | |
|
213 | ||
|
214 | Return | |
|
215 | ------ | |
|
216 | pattern = An array giving the modelled antenna pattern using the array model. | |
|
217 | ||
|
218 | Modification history | |
|
219 | -------------------- | |
|
220 | Developed by Jorge L. Chau. | |
|
221 | Converted to Python by Freddy R. Galindo, ROJ, 20 September 2009. | |
|
222 | """ | |
|
223 | ||
|
224 | if rx==1: | |
|
225 | ues = self.uesrx | |
|
226 | phase = self.phaserx | |
|
227 | gain = self.gainrx | |
|
228 | elif rx==0: | |
|
229 | ues = self.uestx | |
|
230 | phase = self.phasetx | |
|
231 | gain = self.gaintx | |
|
232 | ||
|
233 | ues = ues*360./self.airwl | |
|
234 | phase = phase*360./self.airwl | |
|
235 | ||
|
236 | for ii in range(4): | |
|
237 | if ii==0:dim = numpy.array([4,0,8,4]) # WEST | |
|
238 | elif ii==1:dim = numpy.array([0,0,4,4]) # NORTH | |
|
239 | elif ii==2:dim = numpy.array([0,4,4,8]) # EAST | |
|
240 | elif ii==3:dim = numpy.array([4,4,8,8]) # SOUTH | |
|
241 | xi = dim[0]; xf = dim[2]; yi = dim[1]; yf = dim[3] | |
|
242 | phase[xi:xf,yi:yf] = phase[xi:xf,yi:yf] + ues[ii] | |
|
243 | ||
|
244 | phase = -phase | |
|
245 | ||
|
246 | delta_x = self.eomwl/2. | |
|
247 | delta_y = self.eomwl/2. | |
|
248 | ||
|
249 | nxfft = 2048 | |
|
250 | nyfft = 2048 | |
|
251 | dcosx = (numpy.arange(nxfft) - (0.5*nxfft))/(nxfft*delta_x)*self.eomwl | |
|
252 | dcosy = (numpy.arange(nyfft) - (0.5*nyfft))/(nyfft*delta_y)*self.eomwl | |
|
253 | ||
|
254 | fft_gain = numpy.zeros((nxfft,nyfft)) | |
|
255 | fft_phase = numpy.zeros((nxfft,nyfft)) | |
|
256 | ||
|
257 | nx = 8 | |
|
258 | ny = 8 | |
|
259 | ndx =12 | |
|
260 | ndy =12 | |
|
261 | for iy in numpy.arange(ny): | |
|
262 | for ix in numpy.arange(nx): | |
|
263 | ix1 = nxfft/2-self.nx/2*ndx+ix*ndx | |
|
264 | if ix<(nx/2):ix1 = ix1 - 1 | |
|
265 | if ix>=(nx/2):ix1 = ix1 + 1 | |
|
266 | ||
|
267 | iy1 = nyfft/2-ny/2*ndx+iy*ndy | |
|
268 | if iy<(ny/2):iy1 = iy1 - 1 | |
|
269 | if iy>=(ny/2):iy1 = iy1 + 1 | |
|
270 | ||
|
271 | fft_gain[ix1:ix1+ndx-1,iy1:iy1+ndy-1] = gain[ix,ny-1-iy] | |
|
272 | fft_phase[ix1:ix1+ndx-1,iy1:iy1+ndy-1] = phase[ix,ny-1-iy] | |
|
273 | ||
|
274 | ||
|
275 | fft_phase = fft_phase*Misc_Routines.CoFactors.d2r | |
|
276 | ||
|
277 | pattern = numpy.abs(numpy.fft.fft2(fft_gain*numpy.exp(numpy.complex(0,1)*fft_phase)))**2 | |
|
278 | pattern = numpy.fft.fftshift(pattern) | |
|
279 | ||
|
280 | xvals = numpy.where((dcosx>=(numpy.min(self.dcosx))) & (dcosx<=(numpy.max(self.dcosx)))) | |
|
281 | yvals = numpy.where((dcosy>=(numpy.min(self.dcosy))) & (dcosy<=(numpy.max(self.dcosy)))) | |
|
282 | ||
|
283 | pattern = pattern[xvals[0][0]:xvals[0][-1],yvals[0][0]:yvals[0][-1]] | |
|
284 | ||
|
285 | return pattern | |
|
286 | ||
|
287 | def __readAttenuation(self): | |
|
288 | """ | |
|
289 | _readAttenuation reads the attenuations' file and returns an array giving these va- | |
|
290 | lues (dB). The ext file must be in the directory "resource". | |
|
291 | ||
|
292 | Return | |
|
293 | ------ | |
|
294 | attenuation = An array giving attenuation values read from the text file. | |
|
295 | ||
|
296 | Modification history | |
|
297 | -------------------- | |
|
298 | Developed by Jorge L. Chau. | |
|
299 | Converted to Python by Freddy R. Galindo, ROJ, 20 September 2009. | |
|
300 | """ | |
|
301 | ||
|
302 | attenuation = None | |
|
303 | # foldr = sys.path[-1] + os.sep + "resource" + os.sep | |
|
304 | base_path = os.path.dirname(os.path.abspath(__file__)) | |
|
305 | #foldr = './resource' | |
|
306 | #filen = "attenuation.txt" | |
|
307 | attenuationFile = os.path.join(base_path,"resource","attenuation.txt") | |
|
308 | #ff = open(os.path.join(foldr,filen),'r') | |
|
309 | ff = open(attenuationFile,'r') | |
|
310 | exec(ff.read()) | |
|
311 | ff.close() | |
|
312 | ||
|
313 | return attenuation | |
|
314 | ||
|
315 | def __dipPattern(self,ar,nr,lr): | |
|
316 | """ | |
|
317 | _dipPattern function computes the dipole's pattern to the Jicamarca radar. The next | |
|
318 | equation defines the pattern as a function of the mainlobe direction: | |
|
319 | ||
|
320 | sincx = SIN(k/2*n0x*(a0x*SIN(phi)*COS(alpha)))/SIN(k/2*(a0x*SIN(phi)*COS(alpha))) | |
|
321 | sincy = SIN(k/2*n0y*(a0y*SIN(phi)*SIN(alpha)))/SIN(k/2*(a0y*SIN(phi)*SIN(alpha))) | |
|
322 | A0(phi,alpha) = sincx*sincy | |
|
323 | Parameters | |
|
324 | ---------- | |
|
325 | ar = ? | |
|
326 | nr = ? | |
|
327 | lr = ? | |
|
328 | ||
|
329 | Return | |
|
330 | ------ | |
|
331 | dipole = An array giving antenna pattern from the dipole point of view.. | |
|
332 | ||
|
333 | Modification history | |
|
334 | -------------------- | |
|
335 | Developed by Jorge L. Chau. | |
|
336 | Converted to Python by Freddy R. Galindo, ROJ, 20 September 2009. | |
|
337 | """ | |
|
338 | ||
|
339 | dipole = numpy.zeros((self.nx,self.ny),dtype=complex) | |
|
340 | for iy in range(self.ny): | |
|
341 | for ix in range(self.nx): | |
|
342 | yindex = iy*(self.getcut==0) + ix*(self.getcut==1) | |
|
343 | ||
|
344 | argx = ar[0,0]*self.dcosx[ix] - lr[0,0] | |
|
345 | junkx = numpy.sin(0.5*self.kk*nr[0,0]*argx)/numpy.sin(0.5*self.kk*argx) | |
|
346 | if argx == 0.0: junkx = nr[0,0] | |
|
347 | ||
|
348 | argy = ar[1,0]*self.dcosy[yindex] - lr[1,0] | |
|
349 | junky = numpy.sin(0.5*self.kk*nr[1,0]*argy)/numpy.sin(0.5*self.kk*argy) | |
|
350 | if argy == 0.0: junky = nr[1,0] | |
|
351 | ||
|
352 | dipole[ix,iy] = junkx*junky | |
|
353 | ||
|
354 | return dipole | |
|
355 | ||
|
356 | def __modPattern(self,phase,gain): | |
|
357 | """ | |
|
358 | ModPattern computes the module's pattern to the Jicamarca radar. The next equation | |
|
359 | defines the pattern as a function mainlobe direction: | |
|
360 | ||
|
361 | phasex = pos(x)*SIN(phi)*COS(alpha) | |
|
362 | phasey = pos(y)*SIN(phi)*SIN(alpha) | |
|
363 | ||
|
364 | A1(phi,alpha) = TOTAL(gain*EXP(COMPLEX(0,k*(phasex+phasey)+phase))) | |
|
365 | ||
|
366 | Parameters | |
|
367 | ---------- | |
|
368 | phase = Bidimensional array (8x8) giving the phase (in meters) of each module. | |
|
369 | gain = Bidimensional array (8x8) giving to define modules will be active (ones) | |
|
370 | and which will not (zeros). | |
|
371 | ||
|
372 | Return | |
|
373 | ------ | |
|
374 | module = An array giving antenna pattern from the module point of view.. | |
|
375 | ||
|
376 | Modification history | |
|
377 | -------------------- | |
|
378 | Developed by Jorge L. Chau. | |
|
379 | Converted to Python by Freddy R. Galindo, ROJ, 20 September 2009. | |
|
380 | """ | |
|
381 | ||
|
382 | pos = self.eomwl*self.__readAttenuation() | |
|
383 | posx = pos[0,:,:] | |
|
384 | posy = pos[1,:,:] | |
|
385 | ||
|
386 | phase = phase*Misc_Routines.CoFactors.d2r | |
|
387 | module = numpy.zeros((self.nx,self.ny),dtype=complex) | |
|
388 | for iy in range(self.ny): | |
|
389 | for ix in range(self.nx): | |
|
390 | yindex = iy*(self.getcut==0) + ix*(self.getcut==1) | |
|
391 | phasex = posx*self.dcosx[ix] | |
|
392 | phasey = posy*self.dcosy[yindex] | |
|
393 | tmp = gain*numpy.exp(numpy.complex(0,1.)*(self.kk*(phasex+phasey)+phase)) | |
|
394 | module[ix,iy] = tmp.sum() | |
|
395 | ||
|
396 | return module | |
|
397 | ||
|
398 | def __getBeamPars(self): | |
|
399 | """ | |
|
400 | _getBeamPars computes the main-beam parameters of the antenna. | |
|
401 | ||
|
402 | Modification history | |
|
403 | -------------------- | |
|
404 | Developed by Jorge L. Chau. | |
|
405 | Converted to Python by Freddy R. Galindo, ROJ, 20 September 2009. | |
|
406 | """ | |
|
407 | ||
|
408 | dx = self.dcosx[1] - self.dcosx[0] | |
|
409 | dy = self.dcosy[1] - self.dcosy[0] | |
|
410 | ||
|
411 | amp = self.norpattern | |
|
412 | ||
|
413 | xx = numpy.resize(self.dcosx,(self.nx,self.nx)).transpose() | |
|
414 | yy = numpy.resize(self.dcosy,(self.ny,self.ny)) | |
|
415 | ||
|
416 | mm0 = amp[numpy.where(amp > 0.5)] | |
|
417 | xx0 = xx[numpy.where(amp > 0.5)] | |
|
418 | yy0 = yy[numpy.where(amp > 0.5)] | |
|
419 | ||
|
420 | xc = numpy.sum(mm0*xx0)/numpy.sum(mm0) | |
|
421 | yc = numpy.sum(mm0*yy0)/numpy.sum(mm0) | |
|
422 | rc = numpy.sqrt(mm0.size*dx*dy/numpy.pi) | |
|
423 | ||
|
424 | nnx = numpy.where(numpy.abs(self.dcosx - xc) < rc) | |
|
425 | nny = numpy.where(numpy.abs(self.dcosy - yc) < rc) | |
|
426 | ||
|
427 | mm1 = amp[numpy.min(nnx):numpy.max(nnx)+1,numpy.min(nny):numpy.max(nny)+1] | |
|
428 | xx1 = self.dcosx[numpy.min(nnx):numpy.max(nnx)+1] | |
|
429 | yy1 = self.dcosy[numpy.min(nny):numpy.max(nny)+1] | |
|
430 | ||
|
431 | # fitting data into the main beam. | |
|
432 | import gaussfit | |
|
433 | params = gaussfit.fitgaussian(mm1) | |
|
434 | ||
|
435 | # Tranforming from indexes to axis' values | |
|
436 | xcenter = xx1[0] + (((xx1[xx1.size-1] - xx1[0])/(xx1.size -1))*(params[1])) | |
|
437 | ycenter = yy1[0] + (((yy1[yy1.size-1] - yy1[0])/(yy1.size -1))*(params[2])) | |
|
438 | xwidth = ((xx1[xx1.size-1] - xx1[0])/(xx1.size-1))*(params[3])*(1/Misc_Routines.CoFactors.d2r) | |
|
439 | ywidth = ((yy1[yy1.size-1] - yy1[0])/(yy1.size-1))*(params[4])*(1/Misc_Routines.CoFactors.d2r) | |
|
440 | meanwx = (xwidth*ywidth) | |
|
441 | meanpos = numpy.array([xcenter,ycenter]) | |
|
442 | ||
|
443 | #print 'Position: %f %f' %(xcenter,ycenter) | |
|
444 | #print 'Widths: %f %f' %(xwidth, ywidth) | |
|
445 | #print 'BWHP: %f' %(2*numpy.sqrt(2*meanwx)*numpy.sqrt(-numpy.log(0.5))) | |
|
446 | ||
|
447 | self.meanpos = meanpos | |
|
448 | ||
|
449 | ||
|
450 | class BField(): | |
|
451 | def __init__(self,year=None,doy=None,site=1,heights=None,alpha_i=90): | |
|
452 | """ | |
|
453 | BField class creates an object to get the Magnetic field for a specific date and | |
|
454 | height(s). | |
|
455 | ||
|
456 | Parameters | |
|
457 | ---------- | |
|
458 | year = A scalar giving the desired year. If the value is None (default value) then | |
|
459 | the current year will be used. | |
|
460 | doy = A scalar giving the desired day of the year. If the value is None (default va- | |
|
461 | lue) then the current doy will be used. | |
|
462 | site = An integer to choose the geographic coordinates of the place where the magne- | |
|
463 | tic field will be computed. The default value is over Jicamarca (site=1) | |
|
464 | heights = An array giving the heights (km) where the magnetic field will be modeled By default the magnetic field will be computed at 100, 500 and 1000km. | |
|
465 | alpha_i = Angle to interpolate the magnetic field. | |
|
466 | ||
|
467 | Modification History | |
|
468 | -------------------- | |
|
469 | Converted to Object-oriented Programming by Freddy Galindo, ROJ, 07 October 2009. | |
|
470 | """ | |
|
471 | ||
|
472 | tmp = time.localtime() | |
|
473 | if year==None: year = tmp[0] | |
|
474 | if doy==None: doy = tmp[7] | |
|
475 | self.year = year | |
|
476 | self.doy = doy | |
|
477 | self.site = site | |
|
478 | if heights==None:heights = numpy.array([100,500,1000]) | |
|
479 | self.heights = heights | |
|
480 | self.alpha_i = alpha_i | |
|
481 | ||
|
482 | def getBField(self,maglimits=numpy.array([-7,-7,7,7])): | |
|
483 | """ | |
|
484 | getBField models the magnetic field for a different heights in a specific date. | |
|
485 | ||
|
486 | Parameters | |
|
487 | ---------- | |
|
488 | maglimits = An 4-elements array giving ..... The default value is [-7,-7,7,7]. | |
|
489 | ||
|
490 | Return | |
|
491 | ------ | |
|
492 | dcos = An 4-dimensional array giving the directional cosines of the magnetic field | |
|
493 | over the desired place. | |
|
494 | alpha = An 3-dimensional array giving the angle of the magnetic field over the desi- | |
|
495 | red place. | |
|
496 | ||
|
497 | Modification History | |
|
498 | -------------------- | |
|
499 | Converted to Python by Freddy R. Galindo, ROJ, 07 October 2009. | |
|
500 | """ | |
|
501 | ||
|
502 | x_ant = numpy.array([1,0,0]) | |
|
503 | y_ant = numpy.array([0,1,0]) | |
|
504 | z_ant = numpy.array([0,0,1]) | |
|
505 | ||
|
506 | if self.site==0: | |
|
507 | title_site = "Magnetic equator" | |
|
508 | coord_site = numpy.array([-76+52./60.,-11+57/60.,0.5]) | |
|
509 | elif self.site==1: | |
|
510 | title_site = 'Jicamarca' | |
|
511 | coord_site = [-76-52./60.,-11-57/60.,0.5] | |
|
512 | theta = (45+5.35)*numpy.pi/180. # (50.35 and 1.46 from Fleish Thesis) | |
|
513 | delta = -1.46*numpy.pi/180 | |
|
514 | ||
|
515 | x_ant1 = numpy.roll(self.rotvector(self.rotvector(x_ant,1,delta),3,theta),1) | |
|
516 | y_ant1 = numpy.roll(self.rotvector(self.rotvector(y_ant,1,delta),3,theta),1) | |
|
517 | z_ant1 = numpy.roll(self.rotvector(self.rotvector(z_ant,1,delta),3,theta),1) | |
|
518 | ||
|
519 | ang0 = -1*coord_site[0]*numpy.pi/180. | |
|
520 | ang1 = coord_site[1]*numpy.pi/180. | |
|
521 | x_ant = self.rotvector(self.rotvector(x_ant1,2,ang1),3,ang0) | |
|
522 | y_ant = self.rotvector(self.rotvector(y_ant1,2,ang1),3,ang0) | |
|
523 | z_ant = self.rotvector(self.rotvector(z_ant1,2,ang1),3,ang0) | |
|
524 | else: | |
|
525 | # print "No defined Site. Skip..." | |
|
526 | return None | |
|
527 | ||
|
528 | nhei = self.heights.size | |
|
529 | pt_intercep = numpy.zeros((nhei,2)) | |
|
530 | nfields = 1 | |
|
531 | ||
|
532 | grid_res = 0.5 | |
|
533 | nlon = numpy.int(maglimits[2] - maglimits[0])/grid_res + 1 | |
|
534 | nlat = numpy.int(maglimits[3] - maglimits[1])/grid_res + 1 | |
|
535 | ||
|
536 | location = numpy.zeros((nlon,nlat,2)) | |
|
537 | mlon = numpy.atleast_2d(numpy.arange(nlon)*grid_res + maglimits[0]) | |
|
538 | mrep = numpy.atleast_2d(numpy.zeros(nlat) + 1) | |
|
539 | location0 = numpy.dot(mlon.transpose(),mrep) | |
|
540 | ||
|
541 | mlat = numpy.atleast_2d(numpy.arange(nlat)*grid_res + maglimits[1]) | |
|
542 | mrep = numpy.atleast_2d(numpy.zeros(nlon) + 1) | |
|
543 | location1 = numpy.dot(mrep.transpose(),mlat) | |
|
544 | ||
|
545 | location[:,:,0] = location0 | |
|
546 | location[:,:,1] = location1 | |
|
547 | ||
|
548 | alpha = numpy.zeros((nlon,nlat,nhei)) | |
|
549 | rr = numpy.zeros((nlon,nlat,nhei,3)) | |
|
550 | dcos = numpy.zeros((nlon,nlat,nhei,2)) | |
|
551 | ||
|
552 | global first_time | |
|
553 | ||
|
554 | first_time = None | |
|
555 | for ilon in numpy.arange(nlon): | |
|
556 | for ilat in numpy.arange(nlat): | |
|
557 | outs = self.__bdotk(self.heights, | |
|
558 | self.year + self.doy/366., | |
|
559 | coord_site[1], | |
|
560 | coord_site[0], | |
|
561 | coord_site[2], | |
|
562 | coord_site[1]+location[ilon,ilat,1], | |
|
563 | location[ilon,ilat,0]*720./180.) | |
|
564 | ||
|
565 | alpha[ilon, ilat,:] = outs[1] | |
|
566 | rr[ilon, ilat,:,:] = outs[3] | |
|
567 | ||
|
568 | mrep = numpy.atleast_2d((numpy.zeros(nhei)+1)).transpose() | |
|
569 | tmp = outs[3]*numpy.dot(mrep,numpy.atleast_2d(x_ant)) | |
|
570 | tmp = tmp.sum(axis=1) | |
|
571 | dcos[ilon,ilat,:,0] = tmp/numpy.sqrt((outs[3]**2).sum(axis=1)) | |
|
572 | ||
|
573 | mrep = numpy.atleast_2d((numpy.zeros(nhei)+1)).transpose() | |
|
574 | tmp = outs[3]*numpy.dot(mrep,numpy.atleast_2d(y_ant)) | |
|
575 | tmp = tmp.sum(axis=1) | |
|
576 | dcos[ilon,ilat,:,1] = tmp/numpy.sqrt((outs[3]**2).sum(axis=1)) | |
|
577 | ||
|
578 | return dcos, alpha, nlon, nlat | |
|
579 | ||
|
580 | ||
|
581 | def __bdotk(self,heights,tm,gdlat=-11.95,gdlon=-76.8667,gdalt=0.0,decd=-12.88, ham=-4.61666667): | |
|
582 | ||
|
583 | global first_time | |
|
584 | # Mean Earth radius in Km WGS 84 | |
|
585 | a_igrf = 6371.2 | |
|
586 | ||
|
587 | bk = numpy.zeros(heights.size) | |
|
588 | alpha = numpy.zeros(heights.size) | |
|
589 | bfm = numpy.zeros(heights.size) | |
|
590 | rr = numpy.zeros((heights.size,3)) | |
|
591 | rgc = numpy.zeros((heights.size,3)) | |
|
592 | ||
|
593 | ObjGeodetic = Astro_Coords.Geodetic(gdlat,gdalt) | |
|
594 | [gclat,gcalt] = ObjGeodetic.change2geocentric() | |
|
595 | ||
|
596 | gclat = gclat*numpy.pi/180. | |
|
597 | gclon = gdlon*numpy.pi/180. | |
|
598 | ||
|
599 | # Antenna position from center of Earth | |
|
600 | ca_vector = [numpy.cos(gclat)*numpy.cos(gclon),numpy.cos(gclat)*numpy.sin(gclon),numpy.sin(gclat)] | |
|
601 | ca_vector = gcalt*numpy.array(ca_vector) | |
|
602 | ||
|
603 | dec = decd*numpy.pi/180. | |
|
604 | ||
|
605 | # K vector respect to the center of earth. | |
|
606 | klon = gclon + ham*numpy.pi/720. | |
|
607 | k_vector = [numpy.cos(dec)*numpy.cos(klon),numpy.cos(dec)*numpy.sin(klon),numpy.sin(dec)] | |
|
608 | k_vector = numpy.array(k_vector) | |
|
609 | ||
|
610 | for ih in numpy.arange(heights.size): | |
|
611 | # Vector from Earth's center to volume of interest | |
|
612 | rr[ih,:] = k_vector*heights[ih] | |
|
613 | cv_vector = numpy.squeeze(ca_vector) + rr[ih,:] | |
|
614 | ||
|
615 | cv_gcalt = numpy.sqrt(numpy.sum(cv_vector**2.)) | |
|
616 | cvxy = numpy.sqrt(numpy.sum(cv_vector[0:2]**2.)) | |
|
617 | ||
|
618 | radial = cv_vector/cv_gcalt | |
|
619 | east = numpy.array([-1*cv_vector[1],cv_vector[0],0])/cvxy | |
|
620 | comp1 = east[1]*radial[2] - radial[1]*east[2] | |
|
621 | comp2 = east[2]*radial[0] - radial[2]*east[0] | |
|
622 | comp3 = east[0]*radial[1] - radial[0]*east[1] | |
|
623 | north = -1*numpy.array([comp1, comp2, comp3]) | |
|
624 | ||
|
625 | rr_k = cv_vector - numpy.squeeze(ca_vector) | |
|
626 | u_rr = rr_k/numpy.sqrt(numpy.sum(rr_k**2.)) | |
|
627 | ||
|
628 | cv_gclat = numpy.arctan2(cv_vector[2],cvxy) | |
|
629 | cv_gclon = numpy.arctan2(cv_vector[1],cv_vector[0]) | |
|
630 | ||
|
631 | bhei = cv_gcalt-a_igrf | |
|
632 | blat = cv_gclat*180./numpy.pi | |
|
633 | blon = cv_gclon*180./numpy.pi | |
|
634 | bfield = self.__igrfkudeki(bhei,tm,blat,blon) | |
|
635 | ||
|
636 | B = (bfield[0]*north + bfield[1]*east - bfield[2]*radial)*1.0e-5 | |
|
637 | ||
|
638 | bfm[ih] = numpy.sqrt(numpy.sum(B**2.)) #module | |
|
639 | bk[ih] = numpy.sum(u_rr*B) | |
|
640 | alpha[ih] = numpy.arccos(bk[ih]/bfm[ih])*180/numpy.pi | |
|
641 | rgc[ih,:] = numpy.array([cv_gclon, cv_gclat, cv_gcalt]) | |
|
642 | ||
|
643 | return bk, alpha, bfm, rr, rgc | |
|
644 | ||
|
645 | ||
|
646 | def __igrfkudeki(self,heights,time,latitude,longitude,ae=6371.2): | |
|
647 | """ | |
|
648 | __igrfkudeki calculates the International Geomagnetic Reference Field for given in- | |
|
649 | put conditions based on IGRF2005 coefficients. | |
|
650 | ||
|
651 | Parameters | |
|
652 | ---------- | |
|
653 | heights = Scalar or vector giving the height above the Earth of the point in ques- | |
|
654 | tion in kilometers. | |
|
655 | time = Scalar or vector giving the decimal year of time in question (e.g. 1991.2). | |
|
656 | latitude = Latitude of point in question in decimal degrees. Scalar or vector. | |
|
657 | longitude = Longitude of point in question in decimal degrees. Scalar or vector. | |
|
658 | ae = | |
|
659 | first_time = | |
|
660 | ||
|
661 | Return | |
|
662 | ------ | |
|
663 | bn = | |
|
664 | be = | |
|
665 | bd = | |
|
666 | bmod = | |
|
667 | balpha = | |
|
668 | first_time = | |
|
669 | ||
|
670 | Modification History | |
|
671 | -------------------- | |
|
672 | Converted to Python by Freddy R. Galindo, ROJ, 03 October 2009. | |
|
673 | """ | |
|
674 | ||
|
675 | global first_time | |
|
676 | global gs, hs, nvec, mvec, maxcoef | |
|
677 | ||
|
678 | heights = numpy.atleast_1d(heights) | |
|
679 | time = numpy.atleast_1d(time) | |
|
680 | latitude = numpy.atleast_1d(latitude) | |
|
681 | longitude = numpy.atleast_1d(longitude) | |
|
682 | ||
|
683 | if numpy.max(latitude)==90: | |
|
684 | # print "Field calculations are not supported at geographic poles" | |
|
685 | pass | |
|
686 | ||
|
687 | # output arrays | |
|
688 | bn = numpy.zeros(heights.size) | |
|
689 | be = numpy.zeros(heights.size) | |
|
690 | bd = numpy.zeros(heights.size) | |
|
691 | ||
|
692 | if first_time==None:first_time=0 | |
|
693 | ||
|
694 | time0 = time[0] | |
|
695 | if time!=first_time: | |
|
696 | #print "Getting coefficients for", time0 | |
|
697 | [periods,g,h ] = self.__readIGRFcoeff() | |
|
698 | top_year = numpy.max(periods) | |
|
699 | nperiod = (top_year - 1900)/5 + 1 | |
|
700 | ||
|
701 | maxcoef = 10 | |
|
702 | if time0>=2000:maxcoef = 12 | |
|
703 | ||
|
704 | ||
|
705 | # Normalization array for Schmidt fucntions | |
|
706 | multer = numpy.zeros((2+maxcoef,1+maxcoef)) + 1 | |
|
707 | for cn in (numpy.arange(maxcoef)+1): | |
|
708 | for rm in (numpy.arange(cn)+1): | |
|
709 | tmp = numpy.arange(2*rm) + cn - rm + 1. | |
|
710 | multer[rm+1,cn] = ((-1.)**rm)*numpy.sqrt(2./tmp.prod()) | |
|
711 | ||
|
712 | schmidt = multer[1:,1:].transpose() | |
|
713 | ||
|
714 | # n and m arrays | |
|
715 | nvec = numpy.atleast_2d(numpy.arange(maxcoef)+2) | |
|
716 | mvec = numpy.atleast_2d(numpy.arange(maxcoef+1)).transpose() | |
|
717 | ||
|
718 | # Time adjusted igrf g and h with Schmidt normalization | |
|
719 | # IGRF coefficient arrays: g0(n,m), n=1, maxcoeff,m=0, maxcoeff, ... | |
|
720 | if time0<top_year: | |
|
721 | dtime = (time0 - 1900) % 5 | |
|
722 | ntime = (time0 - 1900 - dtime)/5 | |
|
723 | else: | |
|
724 | # Estimating coefficients for times > top_year | |
|
725 | dtime = (time0 - top_year) + 5 | |
|
726 | ntime = g[:,0,0].size - 2 | |
|
727 | ||
|
728 | g0 = g[ntime,1:maxcoef+1,:maxcoef+1] | |
|
729 | h0 = h[ntime,1:maxcoef+1,:maxcoef+1] | |
|
730 | gdot = g[ntime+1,1:maxcoef+1,:maxcoef+1]-g[ntime,1:maxcoef+1,:maxcoef+1] | |
|
731 | hdot = h[ntime+1,1:maxcoef+1,:maxcoef+1]-h[ntime,1:maxcoef+1,:maxcoef+1] | |
|
732 | gs = (g0 + dtime*(gdot/5.))*schmidt[:maxcoef,0:maxcoef+1] | |
|
733 | hs = (h0 + dtime*(hdot/5.))*schmidt[:maxcoef,0:maxcoef+1] | |
|
734 | ||
|
735 | first_time = time0 | |
|
736 | ||
|
737 | for ii in numpy.arange(heights.size): | |
|
738 | # Height dependence array rad = (ae/(ae+height))**(n+3) | |
|
739 | rad = numpy.atleast_2d((ae/(ae + heights[ii]))**(nvec+1)) | |
|
740 | ||
|
741 | # Sin and Cos of m times longitude phi arrays | |
|
742 | mphi = mvec*longitude[ii]*numpy.pi/180. | |
|
743 | cosmphi = numpy.atleast_2d(numpy.cos(mphi)) | |
|
744 | sinmphi = numpy.atleast_2d(numpy.sin(mphi)) | |
|
745 | ||
|
746 | # Cos of colatitude theta | |
|
747 | c = numpy.cos((90 - latitude[ii])*numpy.pi/180.) | |
|
748 | ||
|
749 | # Legendre functions p(n,m|c) | |
|
750 | [p,dp]= scipy.special.lpmn(maxcoef+1,maxcoef+1,c) | |
|
751 | p = p[:,:-1].transpose() | |
|
752 | s = numpy.sqrt((1. - c)*(1 + c)) | |
|
753 | ||
|
754 | # Generate derivative array dpdtheta = -s*dpdc | |
|
755 | dpdtheta = c*p/s | |
|
756 | for m in numpy.arange(maxcoef+2): dpdtheta[:,m] = m*dpdtheta[:,m] | |
|
757 | dpdtheta = dpdtheta + numpy.roll(p,-1,axis=1) | |
|
758 | ||
|
759 | # Extracting arrays required for field calculations | |
|
760 | p = p[1:maxcoef+1,:maxcoef+1] | |
|
761 | dpdtheta = dpdtheta[1:maxcoef+1,:maxcoef+1] | |
|
762 | ||
|
763 | # Weigh p and dpdtheta with gs and hs coefficients. | |
|
764 | gp = gs*p | |
|
765 | hp = hs*p | |
|
766 | gdpdtheta = gs*dpdtheta | |
|
767 | hdpdtheta = hs*dpdtheta | |
|
768 | # Calcultate field components | |
|
769 | matrix0 = numpy.dot(gdpdtheta,cosmphi) | |
|
770 | matrix1 = numpy.dot(hdpdtheta,sinmphi) | |
|
771 | bn[ii] = numpy.dot(rad,(matrix0 + matrix1)) | |
|
772 | matrix0 = numpy.dot(hp,(mvec*cosmphi)) | |
|
773 | matrix1 = numpy.dot(gp,(mvec*sinmphi)) | |
|
774 | be[ii] = numpy.dot((-1*rad),((matrix0 - matrix1)/s)) | |
|
775 | matrix0 = numpy.dot(gp,cosmphi) | |
|
776 | matrix1 = numpy.dot(hp,sinmphi) | |
|
777 | bd[ii] = numpy.dot((-1*nvec*rad),(matrix0 + matrix1)) | |
|
778 | ||
|
779 | bmod = numpy.sqrt(bn**2. + be**2. + bd**2.) | |
|
780 | btheta = numpy.arctan(bd/numpy.sqrt(be**2. + bn**2.))*180/numpy.pi | |
|
781 | balpha = numpy.arctan(be/bn)*180./numpy.pi | |
|
782 | ||
|
783 | #bn : north | |
|
784 | #be : east | |
|
785 | #bn : radial | |
|
786 | #bmod : module | |
|
787 | ||
|
788 | ||
|
789 | return bn, be, bd, bmod, btheta, balpha | |
|
790 | ||
|
791 | def str2num(self, datum): | |
|
792 | try: | |
|
793 | return int(datum) | |
|
794 | except: | |
|
795 | try: | |
|
796 | return float(datum) | |
|
797 | except: | |
|
798 | return datum | |
|
799 | ||
|
800 | def __readIGRFfile(self, filename): | |
|
801 | list_years=[] | |
|
802 | for i in range(1,24): | |
|
803 | list_years.append(1895.0 + i*5) | |
|
804 | ||
|
805 | epochs=list_years | |
|
806 | epochs.append(epochs[-1]+5) | |
|
807 | nepochs = numpy.shape(epochs) | |
|
808 | ||
|
809 | gg = numpy.zeros((13,14,nepochs[0]),dtype=float) | |
|
810 | hh = numpy.zeros((13,14,nepochs[0]),dtype=float) | |
|
811 | ||
|
812 | coeffs_file=open(filename) | |
|
813 | lines=coeffs_file.readlines() | |
|
814 | ||
|
815 | coeffs_file.close() | |
|
816 | ||
|
817 | for line in lines: | |
|
818 | items = line.split() | |
|
819 | g_h = items[0] | |
|
820 | n = self.str2num(items[1]) | |
|
821 | m = self.str2num(items[2]) | |
|
822 | ||
|
823 | coeffs = items[3:] | |
|
824 | ||
|
825 | for i in range(len(coeffs)-1): | |
|
826 | coeffs[i] = self.str2num(coeffs[i]) | |
|
827 | ||
|
828 | #coeffs = numpy.array(coeffs) | |
|
829 | ncoeffs = numpy.shape(coeffs)[0] | |
|
830 | ||
|
831 | if g_h == 'g': | |
|
832 | # print n," g ",m | |
|
833 | gg[n-1,m,:]=coeffs | |
|
834 | elif g_h=='h': | |
|
835 | # print n," h ",m | |
|
836 | hh[n-1,m,:]=coeffs | |
|
837 | # else : | |
|
838 | # continue | |
|
839 | ||
|
840 | # Ultimo Reordenamiento para almacenar . | |
|
841 | gg[:,:,nepochs[0]-1] = gg[:,:,nepochs[0]-2] + 5*gg[:,:,nepochs[0]-1] | |
|
842 | hh[:,:,nepochs[0]-1] = hh[:,:,nepochs[0]-2] + 5*hh[:,:,nepochs[0]-1] | |
|
843 | ||
|
844 | # return numpy.array([gg,hh]) | |
|
845 | periods = numpy.array(epochs) | |
|
846 | g = gg | |
|
847 | h = hh | |
|
848 | return periods, g, h | |
|
849 | ||
|
850 | ||
|
851 | def __readIGRFcoeff(self,filename="igrf10coeffs.dat"): | |
|
852 | """ | |
|
853 | __readIGRFcoeff reads the coefficients from a binary file which is located in the | |
|
854 | folder "resource." | |
|
855 | ||
|
856 | Parameter | |
|
857 | --------- | |
|
858 | filename = A string to specify the name of the file which contains thec coeffs. The | |
|
859 | default value is "igrf10coeffs.dat" | |
|
860 | ||
|
861 | Return | |
|
862 | ------ | |
|
863 | periods = A lineal array giving... | |
|
864 | g1 = | |
|
865 | h1 = | |
|
866 | ||
|
867 | Modification History | |
|
868 | -------------------- | |
|
869 | Converted to Python by Freddy R. Galindo, ROJ, 03 October 2009. | |
|
870 | """ | |
|
871 | ||
|
872 | # # igrfile = sys.path[-1] + os.sep + "resource" + os.sep + filename | |
|
873 | # igrfile = os.path.join('./resource',filename) | |
|
874 | # f = open(igrfile,'rb') | |
|
875 | # #f = open(os.getcwd() + os.sep + "resource" + os.sep + filename,'rb') | |
|
876 | # | |
|
877 | # # Reading SkyNoise Power (lineal scale) | |
|
878 | # periods = numpy.fromfile(f,numpy.dtype([('var','<f4')]),23) | |
|
879 | # periods = periods['var'] | |
|
880 | # | |
|
881 | # g = numpy.fromfile(f,numpy.dtype([('var','<f8')]),23*14*14) | |
|
882 | # g = g['var'].reshape((14,14,23)).transpose() | |
|
883 | # | |
|
884 | # h = numpy.fromfile(f,numpy.dtype([('var','<f8')]),23*14*14) | |
|
885 | # h = h['var'].reshape((14,14,23)).transpose() | |
|
886 | # | |
|
887 | # f.close() | |
|
888 | base_path = os.path.dirname(os.path.abspath(__file__)) | |
|
889 | filename = os.path.join(base_path,"resource","igrf11coeffs.txt") | |
|
890 | ||
|
891 | period_v, g_v, h_v = self.__readIGRFfile(filename) | |
|
892 | g2 = numpy.zeros((14,14,24)) | |
|
893 | h2 = numpy.zeros((14,14,24)) | |
|
894 | g2[1:14,:,:] = g_v | |
|
895 | h2[1:14,:,:] = h_v | |
|
896 | ||
|
897 | g = numpy.transpose(g2, (2,0,1)) | |
|
898 | h = numpy.transpose(h2, (2,0,1)) | |
|
899 | periods = period_v.copy() | |
|
900 | ||
|
901 | return periods, g, h | |
|
902 | ||
|
903 | def rotvector(self,vector,axis=1,ang=0): | |
|
904 | """ | |
|
905 | rotvector function returns the new vector generated rotating the rectagular coords. | |
|
906 | ||
|
907 | Parameters | |
|
908 | ---------- | |
|
909 | vector = A lineal 3-elements array (x,y,z). | |
|
910 | axis = A integer to specify the axis used to rotate the coord systems. The default | |
|
911 | value is 1. | |
|
912 | axis = 1 -> Around "x" | |
|
913 | axis = 2 -> Around "y" | |
|
914 | axis = 3 -> Around "z" | |
|
915 | ang = Angle of rotation (in radians). The default value is zero. | |
|
916 | ||
|
917 | Return | |
|
918 | ------ | |
|
919 | rotvector = A lineal array of 3 elements giving the new coordinates. | |
|
920 | ||
|
921 | Modification History | |
|
922 | -------------------- | |
|
923 | Converted to Python by Freddy R. Galindo, ROJ, 01 October 2009. | |
|
924 | """ | |
|
925 | ||
|
926 | if axis==1: | |
|
927 | t = [[1,0,0],[0,numpy.cos(ang),numpy.sin(ang)],[0,-numpy.sin(ang),numpy.cos(ang)]] | |
|
928 | elif axis==2: | |
|
929 | t = [[numpy.cos(ang),0,-numpy.sin(ang)],[0,1,0],[numpy.sin(ang),0,numpy.cos(ang)]] | |
|
930 | elif axis==3: | |
|
931 | t = [[numpy.cos(ang),numpy.sin(ang),0],[-numpy.sin(ang),numpy.cos(ang),0],[0,0,1]] | |
|
932 | ||
|
933 | rotvector = numpy.array(numpy.dot(numpy.array(t),numpy.array(vector))) | |
|
934 | ||
|
935 | return rotvector | |
|
936 | ||
|
937 | ||
|
938 | class overJroShow: | |
|
939 | ||
|
940 | # __serverdocspath = '/usr/local/www/htdocs' | |
|
941 | # __tmpDir = 'overJro/tempReports' | |
|
942 | # __serverdocspath = '/Users/dsuarez/Pictures' | |
|
943 | # __tmpDir = 'overjro' | |
|
944 | __serverdocspath = None | |
|
945 | __tmpDir = None | |
|
946 | ||
|
947 | def __init__(self): | |
|
948 | self.year = None | |
|
949 | self.month = None | |
|
950 | self.dom = None | |
|
951 | self.pattern = None | |
|
952 | self.maxphi = None | |
|
953 | self.heights = None | |
|
954 | self.filename = None | |
|
955 | self.showType = None | |
|
956 | self.path = None | |
|
957 | self.objects = None | |
|
958 | self.nptsx = 101 | |
|
959 | self.nptsy = 101 | |
|
960 | self.fftopt = 0 | |
|
961 | self.site = 1 | |
|
962 | self.dcosx = 1 | |
|
963 | self.dcosy = 1 | |
|
964 | self.dcosxrange = None | |
|
965 | self.dcosyrange = None | |
|
966 | self.maxha_min= 0. | |
|
967 | self.show_object = None | |
|
968 | self.dcosx_mag = None | |
|
969 | self.dcosy_mag = None | |
|
970 | self.ha_mag = None | |
|
971 | self.time_mag = None | |
|
972 | self.main_dec = None | |
|
973 | self.ObjC = None | |
|
974 | self.ptitle = '' | |
|
975 | self.path4plotname = None | |
|
976 | self.plotname0 = None | |
|
977 | self.plotname1 = None | |
|
978 | self.plotname2 = None | |
|
979 | self.scriptHeaders = 0 | |
|
980 | # self.outputHead('Show Plot') | |
|
981 | # self.printBody() | |
|
982 | ||
|
983 | def setScriptState(self): | |
|
984 | self.madForm = cgi.FieldStorage() | |
|
985 | ||
|
986 | if self.madForm.has_key('serverdocspath'): | |
|
987 | self.__serverdocspath = self.madForm.getvalue('serverdocspath')#'/usr/local/www/htdocs' | |
|
988 | ||
|
989 | if self.madForm.has_key('tmpdir'): | |
|
990 | self.__tmpDir = self.madForm.getvalue('tmpdir')#'overJro/tempReports' | |
|
991 | ||
|
992 | if self.madForm.has_key('showType'): | |
|
993 | self.showType = int(self.madForm.getvalue('showType')) | |
|
994 | ||
|
995 | if self.showType == 0 or self.showType == 1: | |
|
996 | ||
|
997 | # if self.madForm.has_key('year') and \ | |
|
998 | # self.madForm.has_key('month') and \ | |
|
999 | # self.madForm.has_key('dom') and \ | |
|
1000 | # self.madForm.has_key('pattern') and \ | |
|
1001 | # self.madForm.has_key('maxphi') and \ | |
|
1002 | # self.madForm.has_key('objects') and \ | |
|
1003 | # self.madForm.has_key('heights'): | |
|
1004 | ||
|
1005 | if self.madForm.has_key('year') and \ | |
|
1006 | self.madForm.has_key('month') and \ | |
|
1007 | self.madForm.has_key('dom') and \ | |
|
1008 | self.madForm.has_key('maxphi') and \ | |
|
1009 | self.madForm.has_key('objects') and \ | |
|
1010 | self.madForm.has_key('heights'): | |
|
1011 | ||
|
1012 | self.year = int(self.madForm.getvalue('year')) | |
|
1013 | self.month = int(self.madForm.getvalue('month')) | |
|
1014 | self.dom = int(self.madForm.getvalue('dom')) | |
|
1015 | self.maxphi = float(self.madForm.getvalue('maxphi')) | |
|
1016 | ||
|
1017 | if self.madForm.has_key('pattern'): | |
|
1018 | ||
|
1019 | tmp_pattern = self.madForm.getvalue('pattern') #pattern es predifinido en listado o definido por el usuario | |
|
1020 | self.pattern=[] | |
|
1021 | if tmp_pattern[0] == '[': | |
|
1022 | tmp_pattern=tmp_pattern[1:] | |
|
1023 | ||
|
1024 | if tmp_pattern[-1] == ']': | |
|
1025 | tmp_pattern=tmp_pattern[0:len(tmp_pattern)-1] | |
|
1026 | ||
|
1027 | for s in tmp_pattern.split(','): | |
|
1028 | self.pattern.append(float(s)) | |
|
1029 | elif self.madForm.has_key('filename'): | |
|
1030 | if self.madForm.has_key('filename'): | |
|
1031 | self.filename = self.madForm.getvalue('filename') # nombre de archivo: patron de radiacion definido por el usuario | |
|
1032 | ||
|
1033 | if self.madForm.has_key('path'): | |
|
1034 | self.path = self.madForm.getvalue('path') #path donde se encuentra el archivo: patron de radiacion del usuario | |
|
1035 | ||
|
1036 | else: | |
|
1037 | print "Content-Type: text/html\n" | |
|
1038 | print '<h3> This cgi plot script was called without the proper arguments.</h3>' | |
|
1039 | print '<p> This is a script used to plot Antenna Cuts over Jicamarca Antenna</p>' | |
|
1040 | print '<p> Required arguments:</p>' | |
|
1041 | print '<p> pattern - chekbox indicating objects over jicamarca antenna</p>' | |
|
1042 | print '<p> or' | |
|
1043 | print '<p> filename - The pattern defined by users is a file text' | |
|
1044 | print '<p> path - folder with pattern files' | |
|
1045 | sys.exit(0) | |
|
1046 | ||
|
1047 | ||
|
1048 | tmp_heights = self.madForm.getvalue('heights') | |
|
1049 | self.heights=[] | |
|
1050 | if tmp_heights[0] == '[': | |
|
1051 | tmp_heights=tmp_heights[1:] | |
|
1052 | ||
|
1053 | if tmp_heights[-1] == ']': | |
|
1054 | tmp_heights=tmp_heights[0:len(tmp_heights)-1] | |
|
1055 | ||
|
1056 | for s in tmp_heights.split(','): | |
|
1057 | self.heights.append(float(s)) | |
|
1058 | self.heights = numpy.array(self.heights) | |
|
1059 | ||
|
1060 | tmp_objects = self.madForm.getvalue('objects') #lista con los objetos a graficar en el patron de radiacion | |
|
1061 | self.objects=[] | |
|
1062 | if tmp_objects[0] == '[': | |
|
1063 | tmp_objects=tmp_objects[1:] | |
|
1064 | ||
|
1065 | if tmp_objects[-1] == ']': | |
|
1066 | tmp_objects=tmp_objects[0:len(tmp_objects)-1] | |
|
1067 | ||
|
1068 | for s in tmp_objects.split(','): | |
|
1069 | self.objects.append(int(s)) | |
|
1070 | ||
|
1071 | if self.showType == 1: | |
|
1072 | if numpy.sum(self.objects) == 0: | |
|
1073 | if self.scriptHeaders == 0: | |
|
1074 | print "Content-Type: text/html\n" | |
|
1075 | print '<h3> This cgi plot script was called without the proper arguments.</h3>' | |
|
1076 | print '<p> This is a script used to plot Antenna Cuts over Jicamarca Antenna</p>' | |
|
1077 | print '<p> Required arguments:</p>' | |
|
1078 | print '<p> objects - chekbox indicating objects over jicamarca antenna</p>' | |
|
1079 | print '<p> Please, options in "Select Object" must be checked' | |
|
1080 | sys.exit(0) | |
|
1081 | ||
|
1082 | #considerar para futura implementacion | |
|
1083 | if self.madForm.has_key('filename'): | |
|
1084 | self.filename = self.madForm.getvalue('filename') # nombre de archivo: patron de radiacion definido por el usuario | |
|
1085 | ||
|
1086 | if self.madForm.has_key('path'): | |
|
1087 | self.path = self.madForm.getvalue('path') #path donde se encuentra el archivo: patron de radiacion del usuario | |
|
1088 | ||
|
1089 | ||
|
1090 | else: | |
|
1091 | if self.scriptHeaders == 0: | |
|
1092 | print "Content-Type: text/html\n" | |
|
1093 | ||
|
1094 | print '<h3> This cgi plot script was called without the proper arguments.</h3>' | |
|
1095 | print '<p> This is a script used to plot Pattern Field and Celestial Objects over Jicamarca Antenna</p>' | |
|
1096 | print '<p> Required arguments:</p>' | |
|
1097 | print '<p> year - year of event</p>' | |
|
1098 | print '<p> month - month of event</p>' | |
|
1099 | print '<p> dom - day of month</p>' | |
|
1100 | print '<p> pattern - pattern is defined by "Select an Experiment" list box</p>' | |
|
1101 | print '<p> maxphi - maxphi is defined by "Max Angle" text box</p>' | |
|
1102 | print '<p> objects - objects is a list defined by checkbox in "Select Object"</p>' | |
|
1103 | print '<p> heights - heights is defined by "Heights" text box, for default heights=[100,500,1000]</p>' | |
|
1104 | print '<p> showType - showType is a hidden element for show plot of Pattern&Object or Antenna Cuts or Sky Noise</p>' | |
|
1105 | ||
|
1106 | sys.exit(0) | |
|
1107 | ||
|
1108 | if self.showType == 2: | |
|
1109 | if self.madForm.has_key('year') and \ | |
|
1110 | self.madForm.has_key('month') and \ | |
|
1111 | self.madForm.has_key('dom'): | |
|
1112 | ||
|
1113 | self.year = int(self.madForm.getvalue('year')) | |
|
1114 | self.month = int(self.madForm.getvalue('month')) | |
|
1115 | self.dom = int(self.madForm.getvalue('dom')) | |
|
1116 | ||
|
1117 | else: | |
|
1118 | if self.scriptHeaders == 0: | |
|
1119 | print "Content-Type: text/html\n" | |
|
1120 | print '<h3> This cgi plot script was called without the proper arguments.</h3>' | |
|
1121 | print '<p> This is a script used to plot Sky Noise over Jicamarca Antenna</p>' | |
|
1122 | print '<p> Required arguments:</p>' | |
|
1123 | print '<p> year - year of event</p>' | |
|
1124 | print '<p> month - month of event</p>' | |
|
1125 | print '<p> dom - day of month</p>' | |
|
1126 | ||
|
1127 | sys.exit(0) | |
|
1128 | ||
|
1129 | ||
|
1130 | def initParameters1(self): | |
|
1131 | ||
|
1132 | gui=1 | |
|
1133 | if self.pattern==None: | |
|
1134 | if gui==1: self.filename = self.filename.split(',') | |
|
1135 | ||
|
1136 | pattern = numpy.atleast_1d(self.pattern) | |
|
1137 | filename = numpy.atleast_1d(self.filename) | |
|
1138 | ||
|
1139 | npatterns = numpy.max(numpy.array([pattern.size,filename.size])) | |
|
1140 | ||
|
1141 | self.pattern = numpy.resize(pattern,npatterns) | |
|
1142 | self.filename = numpy.resize(filename,npatterns) | |
|
1143 | ||
|
1144 | self.doy = datetime.datetime(self.year,self.month,self.dom).timetuple().tm_yday | |
|
1145 | ||
|
1146 | ||
|
1147 | if self.objects==None: | |
|
1148 | self.objects=numpy.zeros(5) | |
|
1149 | else: | |
|
1150 | tmp = numpy.atleast_1d(self.objects) | |
|
1151 | self.objects = numpy.zeros(5) | |
|
1152 | self.objects[0:tmp.size] = tmp | |
|
1153 | ||
|
1154 | self.show_object = self.objects | |
|
1155 | ||
|
1156 | self.maxha_min = 4*self.maxphi*numpy.sqrt(2)*1.25 | |
|
1157 | ||
|
1158 | ||
|
1159 | if self.heights==None: | |
|
1160 | self.heights = numpy.array([100.,500.,1000.]) | |
|
1161 | ||
|
1162 | ||
|
1163 | ||
|
1164 | #ROJ geographic coordinates and time zone | |
|
1165 | self.glat = -11.95 | |
|
1166 | self.glon = -76.8667 | |
|
1167 | self.UT = 5 #timezone | |
|
1168 | ||
|
1169 | self.glat = -11.951481 | |
|
1170 | self.glon = -76.874383 | |
|
1171 | ||
|
1172 | ||
|
1173 | self.junkjd = TimeTools.Time(self.year,self.month,self.dom).change2julday() | |
|
1174 | self.junklst = TimeTools.Julian(self.junkjd).change2lst(longitude=self.glon) | |
|
1175 | ||
|
1176 | # Finding RA of observatory for a specific date | |
|
1177 | self.ra_obs = self.junklst*Misc_Routines.CoFactors.h2d | |
|
1178 | ||
|
1179 | def initParameters(self): | |
|
1180 | ||
|
1181 | # Defining plot filenames | |
|
1182 | self.path4plotname = os.path.join(self.__serverdocspath,self.__tmpDir) | |
|
1183 | print "PATH4" | |
|
1184 | print os.path.join(self.__serverdocspath,self.__tmpDir) | |
|
1185 | self.plotname0 = 'over_jro_0_%i.png'% (time.time()) #plot pattern & objects | |
|
1186 | self.plotname1 = 'over_jro_1_%i.png'% (time.time()) #plot antenna cuts | |
|
1187 | self.plotname2 = 'over_jro_2_%i.png'% (time.time()) #plot sky noise | |
|
1188 | ||
|
1189 | # Defining antenna axes respect to geographic coordinates (See Ochs report). | |
|
1190 | # alfa = 1.46*Misc_Routines.CoFactors.d2r | |
|
1191 | # theta = 51.01*Misc_Routines.CoFactors.d2r | |
|
1192 | ||
|
1193 | alfa = 1.488312*Misc_Routines.CoFactors.d2r | |
|
1194 | th = 6.166710 + 45.0 | |
|
1195 | theta = th*Misc_Routines.CoFactors.d2r | |
|
1196 | ||
|
1197 | sina = numpy.sin(alfa) | |
|
1198 | cosa = numpy.cos(alfa) | |
|
1199 | MT1 = numpy.array([[1,0,0],[0,cosa,-sina],[0,sina,cosa]]) | |
|
1200 | sinb = numpy.sin(theta) | |
|
1201 | cosb = numpy.cos(theta) | |
|
1202 | MT2 = numpy.array([[cosb,sinb,0],[-sinb,cosb,0],[0,0,1]]) | |
|
1203 | self.MT3 = numpy.array(numpy.dot(MT2, MT1)).transpose() | |
|
1204 | ||
|
1205 | self.xg = numpy.dot(self.MT3.transpose(),numpy.array([1,0,0])) | |
|
1206 | self.yg = numpy.dot(self.MT3.transpose(),numpy.array([0,1,0])) | |
|
1207 | self.zg = numpy.dot(self.MT3.transpose(),numpy.array([0,0,1])) | |
|
1208 | ||
|
1209 | def plotPattern(self): | |
|
1210 | # Plotting Antenna patterns. | |
|
1211 | npatterns = numpy.size(self.pattern) | |
|
1212 | ||
|
1213 | if npatterns==1: | |
|
1214 | if self.pattern[0] == None: npatterns = self.filename.__len__() | |
|
1215 | ||
|
1216 | date = TimeTools.Time(self.year,self.month,self.dom).change2strdate(mode=2) | |
|
1217 | ||
|
1218 | mesg = 'Over Jicamarca: ' + date[0] | |
|
1219 | ||
|
1220 | title = '' | |
|
1221 | ||
|
1222 | for ii in numpy.arange(npatterns): | |
|
1223 | ObjAnt = JroPattern(pattern=self.pattern[ii], | |
|
1224 | filename=self.filename[ii], | |
|
1225 | path=self.path, | |
|
1226 | nptsx=self.nptsx, | |
|
1227 | nptsy=self.nptsy, | |
|
1228 | maxphi=self.maxphi, | |
|
1229 | fftopt=self.fftopt) | |
|
1230 | ||
|
1231 | title += ObjAnt.title | |
|
1232 | # Plotting Contour Map | |
|
1233 | print "Antes de la creacion" | |
|
1234 | self.path4plotname = '/home/fquino/workspace/radarsys/webapp/apps/abs/static/images' | |
|
1235 | print self.path4plotname | |
|
1236 | print self.plotname0 | |
|
1237 | dum = Graphics_OverJro.AntPatternPlot() | |
|
1238 | dum.contPattern(iplot=ii, | |
|
1239 | gpath=self.path4plotname, | |
|
1240 | filename=self.plotname0, | |
|
1241 | mesg=mesg, | |
|
1242 | amp=ObjAnt.norpattern, | |
|
1243 | x=ObjAnt.dcosx, | |
|
1244 | y=ObjAnt.dcosy, | |
|
1245 | getCut=ObjAnt.getcut, | |
|
1246 | title=title) | |
|
1247 | # title=ObjAnt.title) | |
|
1248 | # self.ptitle = ObjAnt.title | |
|
1249 | if ii==0: | |
|
1250 | self.figure = dum.figure | |
|
1251 | ||
|
1252 | if ii != (npatterns-1): | |
|
1253 | title += '+' | |
|
1254 | ||
|
1255 | ||
|
1256 | vect_ant = numpy.array([ObjAnt.meanpos[0],ObjAnt.meanpos[1],numpy.sqrt(1-numpy.sum(ObjAnt.meanpos**2.))]) | |
|
1257 | ||
|
1258 | vect_geo = numpy.dot(scipy.linalg.inv(self.MT3),vect_ant) | |
|
1259 | ||
|
1260 | vect_polar = Misc_Routines.Vector(numpy.array(vect_geo),direction=1).Polar2Rect() | |
|
1261 | ||
|
1262 | [ra,dec,ha] = Astro_Coords.AltAz(vect_polar[1],vect_polar[0],self.junkjd).change2equatorial() | |
|
1263 | ||
|
1264 | print'Main beam position (HA(min), DEC(degrees)): %f %f'%(ha*4.,dec) | |
|
1265 | ||
|
1266 | self.main_dec = dec | |
|
1267 | ||
|
1268 | self.ptitle = title | |
|
1269 | ||
|
1270 | Graphics_OverJro.AntPatternPlot().plotRaDec(gpath=self.path4plotname,filename=self.plotname0,jd=self.junkjd, ra_obs=self.ra_obs, xg=self.xg, yg=self.yg, x=ObjAnt.dcosx, y=ObjAnt.dcosy) | |
|
1271 | ||
|
1272 | self.dcosx = ObjAnt.dcosx | |
|
1273 | ||
|
1274 | self.dcosy = ObjAnt.dcosy | |
|
1275 | ||
|
1276 | self.dcosxrange = [numpy.min(self.dcosx),numpy.max(self.dcosx)] | |
|
1277 | ||
|
1278 | self.dcosyrange = [numpy.min(self.dcosy),numpy.max(self.dcosy)] | |
|
1279 | ||
|
1280 | def plotBfield(self): | |
|
1281 | ||
|
1282 | if self.show_object[0]>0: | |
|
1283 | # Getting B field | |
|
1284 | ObjB = BField(self.year,self.doy,self.site,self.heights) | |
|
1285 | ||
|
1286 | ||
|
1287 | [dcos, alpha, nlon, nlat] = ObjB.getBField() | |
|
1288 | ||
|
1289 | # Plotting B field. | |
|
1290 | # print "Drawing magnetic field over Observatory" | |
|
1291 | ||
|
1292 | Obj = Graphics_OverJro.BFieldPlot() | |
|
1293 | ||
|
1294 | Obj.plotBField(self.path4plotname,self.plotname0,dcos,alpha,nlon,nlat,self.dcosxrange,self.dcosyrange,ObjB.heights,ObjB.alpha_i) | |
|
1295 | ||
|
1296 | if self.show_object[0]>1: | |
|
1297 | ||
|
1298 | Bhei = 0 | |
|
1299 | ||
|
1300 | dcosx = Obj.alpha_location[:,0,Bhei] | |
|
1301 | ||
|
1302 | dcosy = Obj.alpha_location[:,1,Bhei] | |
|
1303 | ||
|
1304 | vect_ant = [dcosx,dcosy,numpy.sqrt(1.-(dcosx**2. + dcosy**2.))] | |
|
1305 | ||
|
1306 | vect_ant = numpy.array(vect_ant) | |
|
1307 | ||
|
1308 | vect_geo = numpy.dot(scipy.linalg.inv(self.MT3),vect_ant) | |
|
1309 | ||
|
1310 | vect_geo = numpy.array(vect_geo).transpose() | |
|
1311 | ||
|
1312 | vect_polar = Misc_Routines.Vector(vect_geo,direction=1).Polar2Rect() | |
|
1313 | ||
|
1314 | [ra,dec,ha] = Astro_Coords.AltAz(vect_polar[1,:],vect_polar[0,:],self.junkjd).change2equatorial() | |
|
1315 | ||
|
1316 | val = numpy.where(ha>=180) | |
|
1317 | ||
|
1318 | if val[0].size>0:ha[val] = ha[val] -360. | |
|
1319 | ||
|
1320 | val = numpy.where(numpy.abs(ha)<=self.maxphi) | |
|
1321 | ||
|
1322 | if val[0].size>2: | |
|
1323 | ||
|
1324 | self.dcosx_mag = dcosx[val] | |
|
1325 | ||
|
1326 | self.dcosy_mag = dcosy[val] | |
|
1327 | ||
|
1328 | self.ha_mag = ha[val] | |
|
1329 | ||
|
1330 | self.time_mag = 0 | |
|
1331 | ||
|
1332 | def plotCelestial(self): | |
|
1333 | ||
|
1334 | ntod = 24.*16. | |
|
1335 | ||
|
1336 | tod = numpy.arange(ntod)/ntod*24. | |
|
1337 | ||
|
1338 | [month,dom] = TimeTools.Doy2Date(self.year,self.doy).change2date() | |
|
1339 | ||
|
1340 | jd = TimeTools.Time(self.year,month,dom,tod+self.UT).change2julday() | |
|
1341 | ||
|
1342 | if numpy.sum(self.show_object[1:]>0)!=0: | |
|
1343 | ||
|
1344 | self.ObjC = Graphics_OverJro.CelestialObjectsPlot(jd,self.main_dec,tod,self.maxha_min,self.show_object) | |
|
1345 | ||
|
1346 | self.ObjC.drawObject(self.glat, | |
|
1347 | self.glon, | |
|
1348 | self.xg, | |
|
1349 | self.yg, | |
|
1350 | self.dcosxrange, | |
|
1351 | self.dcosyrange, | |
|
1352 | self.path4plotname, | |
|
1353 | self.plotname0) | |
|
1354 | ||
|
1355 | def plotAntennaCuts(self): | |
|
1356 | # print "Drawing antenna cuts" | |
|
1357 | ||
|
1358 | incha = 0.05 # min | |
|
1359 | nha = numpy.int32(2*self.maxha_min/incha) + 1. | |
|
1360 | newha = numpy.arange(nha)/nha*2.*self.maxha_min - self.maxha_min | |
|
1361 | nha_star = numpy.int32(200./incha) | |
|
1362 | star_ha = (numpy.arange(nha_star) - (nha_star/2))*nha_star | |
|
1363 | ||
|
1364 | #Init ObjCut for PatternCutPlot() | |
|
1365 | view_objects = numpy.where(self.show_object>0) | |
|
1366 | subplots = len(view_objects[0]) | |
|
1367 | ObjCut = Graphics_OverJro.PatternCutPlot(subplots) | |
|
1368 | ||
|
1369 | for io in (numpy.arange(5)): | |
|
1370 | if self.show_object[io]==2: | |
|
1371 | if io==0: | |
|
1372 | if self.dcosx_mag.size!=0: | |
|
1373 | dcosx = self.dcosx_mag | |
|
1374 | dcosy = self.dcosy_mag | |
|
1375 | dcosz = 1 - numpy.sqrt(dcosx**2. + dcosy**2.) | |
|
1376 | ||
|
1377 | # Finding rotation of B respec to antenna coords. | |
|
1378 | [mm,bb] = scipy.polyfit(dcosx,dcosy,1) | |
|
1379 | alfa = 0.0 | |
|
1380 | theta = -1.*numpy.arctan(mm) | |
|
1381 | sina = numpy.sin(alfa); cosa = numpy.cos(alfa) | |
|
1382 | MT1 = [[1,0,0],[0,cosa,-sina],[0,sina,cosa]] | |
|
1383 | MT1 = numpy.array(MT1) | |
|
1384 | sinb = numpy.sin(theta); cosb = numpy.cos(theta) | |
|
1385 | MT2 = [[cosb,sinb,0],[-sinb,cosb,0],[0,0,1]] | |
|
1386 | MT2 = numpy.array(MT2) | |
|
1387 | MT3_mag = numpy.dot(MT2, MT1) | |
|
1388 | MT3_mag = numpy.array(MT3_mag).transpose() | |
|
1389 | # Getting dcos respec to B coords | |
|
1390 | vector = numpy.array([dcosx,dcosy,dcosz]) | |
|
1391 | nvector = numpy.dot(MT3_mag,vector) | |
|
1392 | nvector = numpy.array(nvector).transpose() | |
|
1393 | ||
|
1394 | ## print 'Rotation (deg) %f'%(theta/Misc_Routines.CoFactors.d2r) | |
|
1395 | ||
|
1396 | yoffset = numpy.sum(nvector[:,1])/nvector[:,1].size | |
|
1397 | # print 'Dcosyoffset %f'%(yoffset) | |
|
1398 | ||
|
1399 | ha = self.ha_mag*4. | |
|
1400 | time = self.time_mag | |
|
1401 | width_star = 0.1 # half width in minutes | |
|
1402 | otitle = 'B Perp. cut' | |
|
1403 | # else: | |
|
1404 | # print "No B perp. over Observatory" | |
|
1405 | # | |
|
1406 | # | |
|
1407 | elif io==1: | |
|
1408 | if self.ObjC.dcosx_sun.size!=0: | |
|
1409 | dcosx = self.ObjC.dcosx_sun | |
|
1410 | dcosy = self.ObjC.dcosy_sun | |
|
1411 | ha = self.ObjC.ha_sun*4.0 | |
|
1412 | time = self.ObjC.time_sun | |
|
1413 | width_star = 2. # half width in minutes | |
|
1414 | otitle = 'Sun cut' | |
|
1415 | # else: | |
|
1416 | # print "Sun is not passing over Observatory" | |
|
1417 | ||
|
1418 | elif io==2: | |
|
1419 | if self.ObjC.dcosx_moon.size!=0: | |
|
1420 | dcosx = self.ObjC.dcosx_moon | |
|
1421 | dcosy = self.ObjC.dcosy_moon | |
|
1422 | ha = self.ObjC.ha_moon*4 | |
|
1423 | time = self.ObjC.time_moon | |
|
1424 | m_distance = 404114.6 # distance to the Earth in km | |
|
1425 | m_diameter = 1734.4 # diameter in km. | |
|
1426 | width_star = numpy.arctan(m_distance/m_diameter) | |
|
1427 | width_star = width_star/2./Misc_Routines.CoFactors.d2r*4. | |
|
1428 | otitle = 'Moon cut' | |
|
1429 | # else: | |
|
1430 | # print "Moon is not passing over Observatory" | |
|
1431 | ||
|
1432 | elif io==3: | |
|
1433 | if self.ObjC.dcosx_hydra.size!=0: | |
|
1434 | dcosx = self.ObjC.dcosx_hydra | |
|
1435 | dcosy = self.ObjC.dcosy_hydra | |
|
1436 | ha = self.ObjC.ha_hydra*4. | |
|
1437 | time = self.ObjC.time_hydra | |
|
1438 | width_star = 0.25 # half width in minutes | |
|
1439 | otitle = 'Hydra cut' | |
|
1440 | # else: | |
|
1441 | # print "Hydra is not passing over Observatory" | |
|
1442 | ||
|
1443 | elif io==4: | |
|
1444 | if self.ObjC.dcosx_galaxy.size!=0: | |
|
1445 | dcosx = self.ObjC.dcosx_galaxy | |
|
1446 | dcosy = self.ObjC.dcosy_galaxy | |
|
1447 | ha = self.ObjC.ha_galaxy*4. | |
|
1448 | time = self.ObjC.time_galaxy | |
|
1449 | width_star = 25. # half width in minutes | |
|
1450 | otitle = 'Galaxy cut' | |
|
1451 | # else: | |
|
1452 | # print "Galaxy center is not passing over Jicamarca" | |
|
1453 | # | |
|
1454 | # | |
|
1455 | hour = numpy.int32(time) | |
|
1456 | mins = numpy.int32((time - hour)*60.) | |
|
1457 | secs = numpy.int32(((time - hour)*60. - mins)*60.) | |
|
1458 | ||
|
1459 | ObjT = TimeTools.Time(self.year,self.month,self.dom,hour,mins,secs) | |
|
1460 | subtitle = ObjT.change2strdate() | |
|
1461 | ||
|
1462 | star_cut = numpy.exp(-(star_ha/width_star)**2./2.) | |
|
1463 | ||
|
1464 | pol = scipy.polyfit(ha,dcosx,3.) | |
|
1465 | polx = numpy.poly1d(pol); newdcosx = polx(newha) | |
|
1466 | pol = scipy.polyfit(ha,dcosy,3.) | |
|
1467 | poly = numpy.poly1d(pol);newdcosy = poly(newha) | |
|
1468 | ||
|
1469 | patterns = [] | |
|
1470 | for icut in numpy.arange(self.pattern.size): | |
|
1471 | # Getting Antenna cut. | |
|
1472 | Obj = JroPattern(dcosx=newdcosx, | |
|
1473 | dcosy=newdcosy, | |
|
1474 | getcut=1, | |
|
1475 | pattern=self.pattern[icut], | |
|
1476 | path=self.path, | |
|
1477 | filename=self.filename[icut]) | |
|
1478 | ||
|
1479 | Obj.getPattern() | |
|
1480 | ||
|
1481 | patterns.append(Obj.pattern) | |
|
1482 | ||
|
1483 | ||
|
1484 | ObjCut.drawCut(io, | |
|
1485 | patterns, | |
|
1486 | self.pattern.size, | |
|
1487 | newha, | |
|
1488 | otitle, | |
|
1489 | subtitle, | |
|
1490 | self.ptitle) | |
|
1491 | ||
|
1492 | ObjCut.saveFig(self.path4plotname,self.plotname1) | |
|
1493 | ||
|
1494 | def plotSkyNoise(self): | |
|
1495 | # print 'Creating SkyNoise map over Jicamarca' | |
|
1496 | dom = self.dom | |
|
1497 | month = self.month | |
|
1498 | year = self.year | |
|
1499 | ||
|
1500 | julian = TimeTools.Time(year,month,dom).change2julday() | |
|
1501 | ||
|
1502 | [powr,time, lst] = Astro_Coords.CelestialBodies().skyNoise(julian) | |
|
1503 | ||
|
1504 | Graphics_OverJro.SkyNoisePlot([year,month,dom],powr,time,lst).getPlot(self.path4plotname,self.plotname2) | |
|
1505 | ||
|
1506 | ||
|
1507 | def outputHead(self,title): | |
|
1508 | print "Content-Type: text/html" | |
|
1509 | ||
|
1510 | self.scriptHeaders = 1 | |
|
1511 | print '<html>' | |
|
1512 | print '<head>' | |
|
1513 | print '\t<title>' + title + '</title>' | |
|
1514 | print '<style type="text/css">' | |
|
1515 | print 'body' | |
|
1516 | print '{' | |
|
1517 | print 'background-color:#ffffff;' | |
|
1518 | print '}' | |
|
1519 | print 'h1' | |
|
1520 | print '{' | |
|
1521 | print 'color:black;' | |
|
1522 | print 'font-size:18px;' | |
|
1523 | print 'text-align:center;' | |
|
1524 | print '}' | |
|
1525 | print 'p' | |
|
1526 | print '{' | |
|
1527 | print 'font-family:"Arial";' | |
|
1528 | print 'font-size:16px;' | |
|
1529 | print 'color:black;' | |
|
1530 | print '}' | |
|
1531 | print '</style>' | |
|
1532 | # self.printJavaScript() | |
|
1533 | print '</head>' | |
|
1534 | ||
|
1535 | def printJavaScript(self): | |
|
1536 | ||
|
1537 | ||
|
1538 | def printBody(self): | |
|
1539 | print '<body>' | |
|
1540 | # print '<h1>Test Input Parms</h1>' | |
|
1541 | # for key in self.madForm.keys(): | |
|
1542 | # #print '<p> name=' + str(key) | |
|
1543 | # if type(self.madForm.getvalue(key)) == types.ListType: | |
|
1544 | # for value in self.madForm.getvalue(key): | |
|
1545 | # print '<p> name=' + str(key) + \ | |
|
1546 | # ' value=' + value + '' | |
|
1547 | # else: | |
|
1548 | # print '<p> name=' + str(key) + \ | |
|
1549 | # ' value=' + str(cgi.escape(self.madForm.getvalue(key))) + '' | |
|
1550 | ||
|
1551 | print '<form name="form1" method="post" target="showFrame">' | |
|
1552 | print ' <div align="center">' | |
|
1553 | print ' <table width=98% border="1" cellpadding="1">' | |
|
1554 | print ' <tr>' | |
|
1555 | print ' <td colspan="2" align="center">' | |
|
1556 | if self.showType == 0: | |
|
1557 | print ' <IMG SRC="%s" BORDER="0" >'%(os.path.join(os.sep + self.__tmpDir,self.plotname0)) | |
|
1558 | if self.showType == 1: | |
|
1559 | print ' <IMG SRC="%s" BORDER="0" >'%(os.path.join(os.sep + self.__tmpDir,self.plotname1)) | |
|
1560 | if self.showType == 2: | |
|
1561 | print ' <IMG SRC="%s" BORDER="0" >'%(os.path.join(os.sep + self.__tmpDir,self.plotname2)) | |
|
1562 | print ' </td>' | |
|
1563 | print ' </tr>' | |
|
1564 | print ' </table>' | |
|
1565 | print ' </div>' | |
|
1566 | print '</form>' | |
|
1567 | ||
|
1568 | print '</body>' | |
|
1569 | print '</html>' | |
|
1570 | ||
|
1571 | #def execute(self, serverdocspath, tmpdir, currentdate, finalpath, showType=0, maxphi=5.0, objects="[1,1]", heights="[150,500,1000]"): | |
|
1572 | def setInputParameters(self, serverpath, currentdate, finalpath, showType=0, maxphi=5.0, objects="[1,1]", heights="[150,500,1000]"): | |
|
1573 | self.objects=[] | |
|
1574 | self.heights=[] | |
|
1575 | #self.__serverdocspath = serverdocspath | |
|
1576 | self.__serverdocspath = os.path.split(serverpath)[0] | |
|
1577 | #self.__tmpDir = tmpdir | |
|
1578 | self.__tmpDir = os.path.split(serverpath)[1] | |
|
1579 | self.showType = int(showType) | |
|
1580 | self.year = int(currentdate.strftime("%Y")) # Get year of currentdate | |
|
1581 | self.month = int(currentdate.strftime("%m")) # Get month of currentdate | |
|
1582 | self.dom = int(currentdate.strftime("%d")) # Get day of currentdate | |
|
1583 | self.filename = os.path.split(finalpath)[1] | |
|
1584 | self.path = os.path.split(finalpath)[0] | |
|
1585 | self.maxphi = float(maxphi) | |
|
1586 | ||
|
1587 | tmp_objects = (objects.replace("[","")).replace("]","") | |
|
1588 | for s in tmp_objects.split(','): | |
|
1589 | self.objects.append(int(s)) | |
|
1590 | ||
|
1591 | tmp_heights = (heights.replace("[","")).replace("]","") | |
|
1592 | for s in tmp_heights.split(','): | |
|
1593 | self.heights.append(float(s)) | |
|
1594 | self.heights = numpy.array(self.heights) | |
|
1595 | ||
|
1596 | def setupParameters(self): | |
|
1597 | self.initParameters() | |
|
1598 | ||
|
1599 | def initParametersCGI(self): | |
|
1600 | self.setScriptState() | |
|
1601 | self.initParameters() | |
|
1602 | ||
|
1603 | def execute(self): | |
|
1604 | if self.showType == 0 or self.showType == 1: | |
|
1605 | self.initParameters1() | |
|
1606 | self.plotPattern() | |
|
1607 | ||
|
1608 | if numpy.sum(self.show_object>0) != 0: | |
|
1609 | self.plotBfield() | |
|
1610 | self.plotCelestial() | |
|
1611 | ||
|
1612 | if numpy.sum(self.show_object>1) != 0: | |
|
1613 | self.plotAntennaCuts() | |
|
1614 | ||
|
1615 | if self.showType == 2: | |
|
1616 | self.plotSkyNoise() | |
|
1617 | ||
|
1618 | def getPlot(self): | |
|
1619 | print "GETPLot" | |
|
1620 | print os.path.join(self.__serverdocspath,self.__tmpDir,self.plotname0) | |
|
1621 | return os.path.join(self.__serverdocspath,self.__tmpDir,self.plotname0) | |
|
1622 | ||
|
1623 | ||
|
1624 | if __name__ == '__main__': | |
|
1625 | ||
|
1626 | # Script overJroShow.py | |
|
1627 | # This script only calls the init function of the class overJroShow() | |
|
1628 | # All work is done by the init function | |
|
1629 | ||
|
1630 | newOverJro = overJroShow() | |
|
1631 | newOverJro.initParametersCGI() | |
|
1632 | newOverJro.execute() |
@@ -0,0 +1,17 | |||
|
1 | attenuation = numpy.array([[[-21.25,-15.25,-9.25,-3.25,03.25,09.25,15.25,21.25], | |
|
2 | [-21.25,-15.25,-9.25,-3.25,03.25,09.25,15.25,21.25], | |
|
3 | [-21.25,-15.25,-9.25,-3.25,03.25,09.25,15.25,21.25], | |
|
4 | [-21.25,-15.25,-9.25,-3.25,03.25,09.25,15.25,21.25], | |
|
5 | [-21.25,-15.25,-9.25,-3.25,03.25,09.25,15.25,21.25], | |
|
6 | [-21.25,-15.25,-9.25,-3.25,03.25,09.25,15.25,21.25], | |
|
7 | [-21.25,-15.25,-9.25,-3.25,03.25,09.25,15.25,21.25], | |
|
8 | [-21.25,-15.25,-9.25,-3.25,03.25,09.25,15.25,21.25]], | |
|
9 | [[21.25,21.25,21.25,21.25,21.25,21.25,21.25,21.25], | |
|
10 | [15.25,15.25,15.25,15.25,15.25,15.25,15.25,15.25], | |
|
11 | [09.25,09.25,09.25,09.25,09.25,09.25,09.25,09.25], | |
|
12 | [03.25,03.25,03.25,03.25,03.25,03.25,03.25,03.25], | |
|
13 | [-03.25,-03.25,-03.25,-03.25,-03.25,-03.25,-03.25,-03.25], | |
|
14 | [-09.25,-09.25,-09.25,-09.25,-09.25,-09.25,-09.25,-09.25], | |
|
15 | [-15.25,-15.25,-15.25,-15.25,-15.25,-15.25,-15.25,-15.25], | |
|
16 | [-21.25,-21.25,-21.25,-21.25,-21.25,-21.25,-21.25,-21.25]]]) | |
|
17 |
@@ -0,0 +1,99 | |||
|
1 | 0000 13.00 | |
|
2 | 0015 13.00 | |
|
3 | 0030 13.00 | |
|
4 | 0045 13.00 | |
|
5 | 0060 13.00 | |
|
6 | 0075 12.50 | |
|
7 | 0090 12.50 | |
|
8 | 0105 12.50 | |
|
9 | 0120 11.50 | |
|
10 | 0135 11.00 | |
|
11 | 0150 10.50 | |
|
12 | 0165 10.00 | |
|
13 | 0180 10.00 | |
|
14 | 0195 10.00 | |
|
15 | 0210 9.00 | |
|
16 | 0225 8.50 | |
|
17 | 0240 8.50 | |
|
18 | 0255 8.50 | |
|
19 | 0270 8.50 | |
|
20 | 0285 8.00 | |
|
21 | 0300 8.00 | |
|
22 | 0315 8.50 | |
|
23 | 0330 9.00 | |
|
24 | 0345 10.00 | |
|
25 | 0360 11.00 | |
|
26 | 0375 12.50 | |
|
27 | 0390 14.50 | |
|
28 | 0405 17.00 | |
|
29 | 0420 18.00 | |
|
30 | 0435 17.00 | |
|
31 | 0450 15.50 | |
|
32 | 0465 15.00 | |
|
33 | 0480 14.00 | |
|
34 | 0495 12.50 | |
|
35 | 0510 11.00 | |
|
36 | 0525 10.00 | |
|
37 | 0540 9.50 | |
|
38 | 0555 9.00 | |
|
39 | 0570 23.00 | |
|
40 | 0585 8.00 | |
|
41 | 0600 10.00 | |
|
42 | 0615 10.50 | |
|
43 | 0630 10.00 | |
|
44 | 0645 9.00 | |
|
45 | 0660 8.50 | |
|
46 | 0675 9.00 | |
|
47 | 0690 10.00 | |
|
48 | 0705 11.00 | |
|
49 | 0720 12.00 | |
|
50 | 0735 12.50 | |
|
51 | 0750 13.50 | |
|
52 | 0765 13.00 | |
|
53 | 0780 13.00 | |
|
54 | 0795 13.00 | |
|
55 | 0810 13.00 | |
|
56 | 0825 12.50 | |
|
57 | 0840 12.00 | |
|
58 | 0855 12.50 | |
|
59 | 0870 13.00 | |
|
60 | 0885 14.00 | |
|
61 | 0900 15.00 | |
|
62 | 0915 17.00 | |
|
63 | 0930 18.00 | |
|
64 | 0945 17.50 | |
|
65 | 0960 16.50 | |
|
66 | 0975 16.50 | |
|
67 | 0990 17.00 | |
|
68 | 0990 17.00 | |
|
69 | 1005 17.00 | |
|
70 | 1020 20.00 | |
|
71 | 1035 26.00 | |
|
72 | 1050 30.00 | |
|
73 | 1065 36.00 | |
|
74 | 1080 47.00 | |
|
75 | 1095 71.00 | |
|
76 | 1102 60.00 | |
|
77 | 1110 77.00 | |
|
78 | 1115 87.00 | |
|
79 | 1120 83.00 | |
|
80 | 1130 60.00 | |
|
81 | 1140 50.00 | |
|
82 | 1155 35.00 | |
|
83 | 1170 28.00 | |
|
84 | 1185 21.00 | |
|
85 | 1200 18.00 | |
|
86 | 1215 16.00 | |
|
87 | 1237 15.50 | |
|
88 | 1260 15.00 | |
|
89 | 1275 15.50 | |
|
90 | 1290 16.00 | |
|
91 | 1305 15.50 | |
|
92 | 1320 15.00 | |
|
93 | 1335 14.50 | |
|
94 | 1350 14.00 | |
|
95 | 1365 13.00 | |
|
96 | 1380 12.00 | |
|
97 | 1395 12.50 | |
|
98 | 1410 13.00 | |
|
99 | 1425 12.50 |
|
1 | NO CONTENT: new file 100644, binary diff hidden |
@@ -0,0 +1,196 | |||
|
1 | g/h n m 1900.0 1905.0 1910.0 1915.0 1920.0 1925.0 1930.0 1935.0 1940.0 1945.0 1950.0 1955.0 1960.0 1965.0 1970.0 1975.0 1980.0 1985.0 1990.0 1995.0 2000.0 2005.0 SV | |
|
2 | g 1 0 -31543 -31464 -31354 -31212 -31060 -30926 -30805 -30715 -30654 -30594 -30554 -30500 -30421 -30334 -30220 -30100 -29992 -29873 -29775 -29692 -29619.4 -29556.8 8.8 | |
|
3 | g 1 1 -2298 -2298 -2297 -2306 -2317 -2318 -2316 -2306 -2292 -2285 -2250 -2215 -2169 -2119 -2068 -2013 -1956 -1905 -1848 -1784 -1728.2 -1671.8 10.8 | |
|
4 | h 1 1 5922 5909 5898 5875 5845 5817 5808 5812 5821 5810 5815 5820 5791 5776 5737 5675 5604 5500 5406 5306 5186.1 5080.0 -21.3 | |
|
5 | g 2 0 -677 -728 -769 -802 -839 -893 -951 -1018 -1106 -1244 -1341 -1440 -1555 -1662 -1781 -1902 -1997 -2072 -2131 -2200 -2267.7 -2340.5 -15.0 | |
|
6 | g 2 1 2905 2928 2948 2956 2959 2969 2980 2984 2981 2990 2998 3003 3002 2997 3000 3010 3027 3044 3059 3070 3068.4 3047.0 -6.9 | |
|
7 | h 2 1 -1061 -1086 -1128 -1191 -1259 -1334 -1424 -1520 -1614 -1702 -1810 -1898 -1967 -2016 -2047 -2067 -2129 -2197 -2279 -2366 -2481.6 -2594.9 -23.3 | |
|
8 | g 2 2 924 1041 1176 1309 1407 1471 1517 1550 1566 1578 1576 1581 1590 1594 1611 1632 1663 1687 1686 1681 1670.9 1656.9 -1.0 | |
|
9 | h 2 2 1121 1065 1000 917 823 728 644 586 528 477 381 291 206 114 25 -68 -200 -306 -373 -413 -458.0 -516.7 -14.0 | |
|
10 | g 3 0 1022 1037 1058 1084 1111 1140 1172 1206 1240 1282 1297 1302 1302 1297 1287 1276 1281 1296 1314 1335 1339.6 1335.7 -0.3 | |
|
11 | g 3 1 -1469 -1494 -1524 -1559 -1600 -1645 -1692 -1740 -1790 -1834 -1889 -1944 -1992 -2038 -2091 -2144 -2180 -2208 -2239 -2267 -2288.0 -2305.3 -3.1 | |
|
12 | h 3 1 -330 -357 -389 -421 -445 -462 -480 -494 -499 -499 -476 -462 -414 -404 -366 -333 -336 -310 -284 -262 -227.6 -200.4 5.4 | |
|
13 | g 3 2 1256 1239 1223 1212 1205 1202 1205 1215 1232 1255 1274 1288 1289 1292 1278 1260 1251 1247 1248 1249 1252.1 1246.8 -0.9 | |
|
14 | h 3 2 3 34 62 84 103 119 133 146 163 186 206 216 224 240 251 262 271 284 293 302 293.4 269.3 -6.5 | |
|
15 | g 3 3 572 635 705 778 839 881 907 918 916 913 896 882 878 856 838 830 833 829 802 759 714.5 674.4 -6.8 | |
|
16 | h 3 3 523 480 425 360 293 229 166 101 43 -11 -46 -83 -130 -165 -196 -223 -252 -297 -352 -427 -491.1 -524.5 -2.0 | |
|
17 | g 4 0 876 880 884 887 889 891 896 903 914 944 954 958 957 957 952 946 938 936 939 940 932.3 919.8 -2.5 | |
|
18 | g 4 1 628 643 660 678 695 711 727 744 762 776 792 796 800 804 800 791 782 780 780 780 786.8 798.2 2.8 | |
|
19 | h 4 1 195 203 211 218 220 216 205 188 169 144 136 133 135 148 167 191 212 232 247 262 272.6 281.4 2.0 | |
|
20 | g 4 2 660 653 644 631 616 601 584 565 550 544 528 510 504 479 461 438 398 361 325 290 250.0 211.5 -7.1 | |
|
21 | h 4 2 -69 -77 -90 -109 -134 -163 -195 -226 -252 -276 -278 -274 -278 -269 -266 -265 -257 -249 -240 -236 -231.9 -225.8 1.8 | |
|
22 | g 4 3 -361 -380 -400 -416 -424 -426 -422 -415 -405 -421 -408 -397 -394 -390 -395 -405 -419 -424 -423 -418 -403.0 -379.5 5.9 | |
|
23 | h 4 3 -210 -201 -189 -173 -153 -130 -109 -90 -72 -55 -37 -23 3 13 26 39 53 69 84 97 119.8 145.7 5.6 | |
|
24 | g 4 4 134 146 160 178 199 217 234 249 265 304 303 290 269 252 234 216 199 170 141 122 111.3 100.2 -3.2 | |
|
25 | h 4 4 -75 -65 -55 -51 -57 -70 -90 -114 -141 -178 -210 -230 -255 -269 -279 -288 -297 -297 -299 -306 -303.8 -304.7 0.0 | |
|
26 | g 5 0 -184 -192 -201 -211 -221 -230 -237 -241 -241 -253 -240 -229 -222 -219 -216 -218 -218 -214 -214 -214 -218.8 -227.6 -2.6 | |
|
27 | g 5 1 328 328 327 327 326 326 327 329 334 346 349 360 362 358 359 356 357 355 353 352 351.4 354.4 0.4 | |
|
28 | h 5 1 -210 -193 -172 -148 -122 -96 -72 -51 -33 -12 3 15 16 19 26 31 46 47 46 46 43.8 42.7 0.1 | |
|
29 | g 5 2 264 259 253 245 236 226 218 211 208 194 211 230 242 254 262 264 261 253 245 235 222.3 208.8 -3.0 | |
|
30 | h 5 2 53 56 57 58 58 58 60 64 71 95 103 110 125 128 139 148 150 150 154 165 171.9 179.8 1.8 | |
|
31 | g 5 3 5 -1 -9 -16 -23 -28 -32 -33 -33 -20 -20 -23 -26 -31 -42 -59 -74 -93 -109 -118 -130.4 -136.6 -1.2 | |
|
32 | h 5 3 -33 -32 -33 -34 -38 -44 -53 -64 -75 -67 -87 -98 -117 -126 -139 -152 -151 -154 -153 -143 -133.1 -123.0 2.0 | |
|
33 | g 5 4 -86 -93 -102 -111 -119 -125 -131 -136 -141 -142 -147 -152 -156 -157 -160 -159 -162 -164 -165 -166 -168.6 -168.3 0.2 | |
|
34 | h 5 4 -124 -125 -126 -126 -125 -122 -118 -115 -113 -119 -122 -121 -114 -97 -91 -83 -78 -75 -69 -55 -39.3 -19.5 4.5 | |
|
35 | g 5 5 -16 -26 -38 -51 -62 -69 -74 -76 -76 -82 -76 -69 -63 -62 -56 -49 -48 -46 -36 -17 -12.9 -14.1 -0.6 | |
|
36 | h 5 5 3 11 21 32 43 51 58 64 69 82 80 78 81 81 83 88 92 95 97 107 106.3 103.6 -1.0 | |
|
37 | g 6 0 63 62 62 61 61 61 60 59 57 59 54 47 46 45 43 45 48 53 61 68 72.3 72.9 -0.8 | |
|
38 | g 6 1 61 60 58 57 55 54 53 53 54 57 57 57 58 61 64 66 66 65 65 67 68.2 69.6 0.2 | |
|
39 | h 6 1 -9 -7 -5 -2 0 3 4 4 4 6 -1 -9 -10 -11 -12 -13 -15 -16 -16 -17 -17.4 -20.2 -0.4 | |
|
40 | g 6 2 -11 -11 -11 -10 -10 -9 -9 -8 -7 6 4 3 1 8 15 28 42 51 59 68 74.2 76.6 -0.2 | |
|
41 | h 6 2 83 86 89 93 96 99 102 104 105 100 99 96 99 100 100 99 93 88 82 72 63.7 54.7 -1.9 | |
|
42 | g 6 3 -217 -221 -224 -228 -233 -238 -242 -246 -249 -246 -247 -247 -237 -228 -212 -198 -192 -185 -178 -170 -160.9 -151.1 2.1 | |
|
43 | h 6 3 2 4 5 8 11 14 19 25 33 16 33 48 60 68 72 75 71 69 69 67 65.1 63.7 -0.4 | |
|
44 | g 6 4 -58 -57 -54 -51 -46 -40 -32 -25 -18 -25 -16 -8 -1 4 2 1 4 4 3 -1 -5.9 -15.0 -2.1 | |
|
45 | h 6 4 -35 -32 -29 -26 -22 -18 -16 -15 -15 -9 -12 -16 -20 -32 -37 -41 -43 -48 -52 -58 -61.2 -63.4 -0.4 | |
|
46 | g 6 5 59 57 54 49 44 39 32 25 18 21 12 7 -2 1 3 6 14 16 18 19 16.9 14.7 -0.4 | |
|
47 | h 6 5 36 32 28 23 18 13 8 4 0 -16 -12 -12 -11 -8 -6 -4 -2 -1 1 1 0.7 0.0 -0.2 | |
|
48 | g 6 6 -90 -92 -95 -98 -101 -103 -104 -106 -107 -104 -105 -107 -113 -111 -112 -111 -108 -102 -96 -93 -90.4 -86.4 1.3 | |
|
49 | h 6 6 -69 -67 -65 -62 -57 -52 -46 -40 -33 -39 -30 -24 -17 -7 1 11 17 21 24 36 43.8 50.3 0.9 | |
|
50 | g 7 0 70 70 71 72 73 73 74 74 74 70 65 65 67 75 72 71 72 74 77 77 79.0 79.8 -0.4 | |
|
51 | g 7 1 -55 -54 -54 -54 -54 -54 -54 -53 -53 -40 -55 -56 -56 -57 -57 -56 -59 -62 -64 -72 -74.0 -74.4 0.0 | |
|
52 | h 7 1 -45 -46 -47 -48 -49 -50 -51 -52 -52 -45 -35 -50 -55 -61 -70 -77 -82 -83 -80 -69 -64.6 -61.4 0.8 | |
|
53 | g 7 2 0 0 1 2 2 3 4 4 4 0 2 2 5 4 1 1 2 3 2 1 0.0 -1.4 -0.2 | |
|
54 | h 7 2 -13 -14 -14 -14 -14 -14 -15 -17 -18 -18 -17 -24 -28 -27 -27 -26 -27 -27 -26 -25 -24.2 -22.5 0.4 | |
|
55 | g 7 3 34 33 32 31 29 27 25 23 20 0 1 10 15 13 14 16 21 24 26 28 33.3 38.6 1.1 | |
|
56 | h 7 3 -10 -11 -12 -12 -13 -14 -14 -14 -14 2 0 -4 -6 -2 -4 -5 -5 -2 0 4 6.2 6.9 0.1 | |
|
57 | g 7 4 -41 -41 -40 -38 -37 -35 -34 -33 -31 -29 -40 -32 -32 -26 -22 -14 -12 -6 -1 5 9.1 12.3 0.6 | |
|
58 | h 7 4 -1 0 1 2 4 5 6 7 7 6 10 8 7 6 8 10 16 20 21 24 24.0 25.4 0.2 | |
|
59 | g 7 5 -21 -20 -19 -18 -16 -14 -12 -11 -9 -10 -7 -11 -7 -6 -2 0 1 4 5 4 6.9 9.4 0.4 | |
|
60 | h 7 5 28 28 28 28 28 29 29 29 29 28 36 28 23 26 23 22 18 17 17 17 14.8 10.9 -0.9 | |
|
61 | g 7 6 18 18 18 19 19 19 18 18 17 15 5 9 17 13 13 12 11 10 9 8 7.3 5.5 -0.5 | |
|
62 | h 7 6 -12 -12 -13 -15 -16 -17 -18 -19 -20 -17 -18 -20 -18 -23 -23 -23 -23 -23 -23 -24 -25.4 -26.4 -0.3 | |
|
63 | g 7 7 6 6 6 6 6 6 6 6 5 29 19 18 8 1 -2 -5 -2 0 0 -2 -1.2 2.0 0.9 | |
|
64 | h 7 7 -22 -22 -22 -22 -22 -21 -20 -19 -19 -22 -16 -18 -17 -12 -11 -12 -10 -7 -4 -6 -5.8 -4.8 0.3 | |
|
65 | g 8 0 11 11 11 11 11 11 11 11 11 13 22 11 15 13 14 14 18 21 23 25 24.4 24.8 -0.2 | |
|
66 | g 8 1 8 8 8 8 7 7 7 7 7 7 15 9 6 5 6 6 6 6 5 6 6.6 7.7 0.2 | |
|
67 | h 8 1 8 8 8 8 8 8 8 8 8 12 5 10 11 7 7 6 7 8 10 11 11.9 11.2 -0.2 | |
|
68 | g 8 2 -4 -4 -4 -4 -3 -3 -3 -3 -3 -8 -4 -6 -4 -4 -2 -1 0 0 -1 -6 -9.2 -11.4 -0.2 | |
|
69 | h 8 2 -14 -15 -15 -15 -15 -15 -15 -15 -14 -21 -22 -15 -14 -12 -15 -16 -18 -19 -19 -21 -21.5 -21.0 0.2 | |
|
70 | g 8 3 -9 -9 -9 -9 -9 -9 -9 -9 -10 -5 -1 -14 -11 -14 -13 -12 -11 -11 -10 -9 -7.9 -6.8 0.2 | |
|
71 | h 8 3 7 7 6 6 6 6 5 5 5 -12 0 5 7 9 6 4 4 5 6 8 8.5 9.7 0.2 | |
|
72 | g 8 4 1 1 1 2 2 2 2 1 1 9 11 6 2 0 -3 -8 -7 -9 -12 -14 -16.6 -18.0 -0.2 | |
|
73 | h 8 4 -13 -13 -13 -13 -14 -14 -14 -15 -15 -7 -21 -23 -18 -16 -17 -19 -22 -23 -22 -23 -21.5 -19.8 0.4 | |
|
74 | g 8 5 2 2 2 3 4 4 5 6 6 7 15 10 10 8 5 4 4 4 3 9 9.1 10.0 0.2 | |
|
75 | h 8 5 5 5 5 5 5 5 5 5 5 2 -8 3 4 4 6 6 9 11 12 15 15.5 16.1 0.2 | |
|
76 | g 8 6 -9 -8 -8 -8 -7 -7 -6 -6 -5 -10 -13 -7 -5 -1 0 0 3 4 4 6 7.0 9.4 0.5 | |
|
77 | h 8 6 16 16 16 16 17 17 18 18 19 18 17 23 23 24 21 18 16 14 12 11 8.9 7.7 -0.3 | |
|
78 | g 8 7 5 5 5 6 6 7 8 8 9 7 5 6 10 11 11 10 6 4 2 -5 -7.9 -11.4 -0.7 | |
|
79 | h 8 7 -5 -5 -5 -5 -5 -5 -5 -5 -5 3 -4 -4 1 -3 -6 -10 -13 -15 -16 -16 -14.9 -12.8 0.5 | |
|
80 | g 8 8 8 8 8 8 8 8 8 7 7 2 -1 9 8 4 3 1 -1 -4 -6 -7 -7.0 -5.0 0.5 | |
|
81 | h 8 8 -18 -18 -18 -18 -19 -19 -19 -19 -19 -11 -17 -13 -20 -17 -16 -17 -15 -11 -10 -4 -2.1 -0.1 0.4 | |
|
82 | g 9 0 8 8 8 8 8 8 8 8 8 5 3 4 4 8 8 7 5 5 4 4 5.0 5.6 | |
|
83 | g 9 1 10 10 10 10 10 10 10 10 10 -21 -7 9 6 10 10 10 10 10 9 9 9.4 9.8 | |
|
84 | h 9 1 -20 -20 -20 -20 -20 -20 -20 -20 -21 -27 -24 -11 -18 -22 -21 -21 -21 -21 -20 -20 -19.7 -20.1 | |
|
85 | g 9 2 1 1 1 1 1 1 1 1 1 1 -1 -4 0 2 2 2 1 1 1 3 3.0 3.6 | |
|
86 | h 9 2 14 14 14 14 14 14 14 15 15 17 19 12 12 15 16 16 16 15 15 15 13.4 12.9 | |
|
87 | g 9 3 -11 -11 -11 -11 -11 -11 -12 -12 -12 -11 -25 -5 -9 -13 -12 -12 -12 -12 -12 -10 -8.4 -7.0 | |
|
88 | h 9 3 5 5 5 5 5 5 5 5 5 29 12 7 2 7 6 7 9 9 11 12 12.5 12.7 | |
|
89 | g 9 4 12 12 12 12 12 12 12 11 11 3 10 2 1 10 10 10 9 9 9 8 6.3 5.0 | |
|
90 | h 9 4 -3 -3 -3 -3 -3 -3 -3 -3 -3 -9 2 6 0 -4 -4 -4 -5 -6 -7 -6 -6.2 -6.7 | |
|
91 | g 9 5 1 1 1 1 1 1 1 1 1 16 5 4 4 -1 -1 -1 -3 -3 -4 -8 -8.9 -10.8 | |
|
92 | h 9 5 -2 -2 -2 -2 -2 -2 -2 -3 -3 4 2 -2 -3 -5 -5 -5 -6 -6 -7 -8 -8.4 -8.1 | |
|
93 | g 9 6 -2 -2 -2 -2 -2 -2 -2 -2 -2 -3 -5 1 -1 -1 0 -1 -1 -1 -2 -1 -1.5 -1.3 | |
|
94 | h 9 6 8 8 8 8 9 9 9 9 9 9 8 10 9 10 10 10 9 9 9 8 8.4 8.1 | |
|
95 | g 9 7 2 2 2 2 2 2 3 3 3 -4 -2 2 -2 5 3 4 7 7 7 10 9.3 8.7 | |
|
96 | h 9 7 10 10 10 10 10 10 10 11 11 6 8 7 8 10 11 11 10 9 8 5 3.8 2.9 | |
|
97 | g 9 8 -1 0 0 0 0 0 0 0 1 -3 3 2 3 1 1 1 2 1 1 -2 -4.3 -6.7 | |
|
98 | h 9 8 -2 -2 -2 -2 -2 -2 -2 -2 -2 1 -11 -6 0 -4 -2 -3 -6 -7 -7 -8 -8.2 -7.9 | |
|
99 | g 9 9 -1 -1 -1 -1 -1 -1 -2 -2 -2 -4 8 5 -1 -2 -1 -2 -5 -5 -6 -8 -8.2 -9.2 | |
|
100 | h 9 9 2 2 2 2 2 2 2 2 2 8 -7 5 5 1 1 1 2 2 2 3 4.8 5.9 | |
|
101 | g 10 0 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -8 -3 1 -2 -3 -3 -4 -4 -3 -3 -2.6 -2.2 | |
|
102 | g 10 1 -4 -4 -4 -4 -4 -4 -4 -4 -4 11 4 -5 -3 -3 -3 -3 -4 -4 -4 -6 -6.0 -6.3 | |
|
103 | h 10 1 2 2 2 2 2 2 2 2 2 5 13 -4 4 2 1 1 1 1 2 1 1.7 2.4 | |
|
104 | g 10 2 2 2 2 2 2 2 2 2 2 1 -1 -1 4 2 2 2 2 3 2 2 1.7 1.6 | |
|
105 | h 10 2 1 1 1 1 1 1 1 1 1 1 -2 0 1 1 1 1 0 0 1 0 0.0 0.2 | |
|
106 | g 10 3 -5 -5 -5 -5 -5 -5 -5 -5 -5 2 13 2 0 -5 -5 -5 -5 -5 -5 -4 -3.1 -2.5 | |
|
107 | h 10 3 2 2 2 2 2 2 2 2 2 -20 -10 -8 0 2 3 3 3 3 3 4 4.0 4.4 | |
|
108 | g 10 4 -2 -2 -2 -2 -2 -2 -2 -2 -2 -5 -4 -3 -1 -2 -1 -2 -2 -2 -2 -1 -0.5 -0.1 | |
|
109 | h 10 4 6 6 6 6 6 6 6 6 6 -1 2 -2 2 6 4 4 6 6 6 5 4.9 4.7 | |
|
110 | g 10 5 6 6 6 6 6 6 6 6 6 -1 4 7 4 4 6 5 5 5 4 4 3.7 3.0 | |
|
111 | h 10 5 -4 -4 -4 -4 -4 -4 -4 -4 -4 -6 -3 -4 -5 -4 -4 -4 -4 -4 -4 -5 -5.9 -6.5 | |
|
112 | g 10 6 4 4 4 4 4 4 4 4 4 8 12 4 6 4 4 4 3 3 3 2 1.0 0.3 | |
|
113 | h 10 6 0 0 0 0 0 0 0 0 0 6 6 1 1 0 0 -1 0 0 0 -1 -1.2 -1.0 | |
|
114 | g 10 7 0 0 0 0 0 0 0 0 0 -1 3 -2 1 0 1 1 1 1 1 2 2.0 2.1 | |
|
115 | h 10 7 -2 -2 -2 -2 -2 -2 -2 -1 -1 -4 -3 -3 -1 -2 -1 -1 -1 -1 -2 -2 -2.9 -3.4 | |
|
116 | g 10 8 2 2 2 1 1 1 1 2 2 -3 2 6 -1 2 0 0 2 2 3 5 4.2 3.9 | |
|
117 | h 10 8 4 4 4 4 4 4 4 4 4 -2 6 7 6 3 3 3 4 4 3 1 0.2 -0.9 | |
|
118 | g 10 9 2 2 2 2 3 3 3 3 3 5 10 -2 2 2 3 3 3 3 3 1 0.3 -0.1 | |
|
119 | h 10 9 0 0 0 0 0 0 0 0 0 0 11 -1 0 0 1 1 0 0 -1 -2 -2.2 -2.3 | |
|
120 | g 10 10 0 0 0 0 0 0 0 0 0 -2 3 0 0 0 -1 -1 0 0 0 0 -1.1 -2.2 | |
|
121 | h 10 10 -6 -6 -6 -6 -6 -6 -6 -6 -6 -2 8 -3 -7 -6 -4 -5 -6 -6 -6 -7 -7.4 -8.0 | |
|
122 | g 11 0 2.7 2.9 | |
|
123 | g 11 1 -1.7 -1.6 | |
|
124 | h 11 1 0.1 0.3 | |
|
125 | g 11 2 -1.9 -1.7 | |
|
126 | h 11 2 1.3 1.4 | |
|
127 | g 11 3 1.5 1.5 | |
|
128 | h 11 3 -0.9 -0.7 | |
|
129 | g 11 4 -0.1 -0.2 | |
|
130 | h 11 4 -2.6 -2.4 | |
|
131 | g 11 5 0.1 0.2 | |
|
132 | h 11 5 0.9 0.9 | |
|
133 | g 11 6 -0.7 -0.7 | |
|
134 | h 11 6 -0.7 -0.6 | |
|
135 | g 11 7 0.7 0.5 | |
|
136 | h 11 7 -2.8 -2.7 | |
|
137 | g 11 8 1.7 1.8 | |
|
138 | h 11 8 -0.9 -1.0 | |
|
139 | g 11 9 0.1 0.1 | |
|
140 | h 11 9 -1.2 -1.5 | |
|
141 | g 11 10 1.2 1.0 | |
|
142 | h 11 10 -1.9 -2.0 | |
|
143 | g 11 11 4.0 4.1 | |
|
144 | h 11 11 -0.9 -1.4 | |
|
145 | g 12 0 -2.2 -2.2 | |
|
146 | g 12 1 -0.3 -0.3 | |
|
147 | h 12 1 -0.4 -0.5 | |
|
148 | g 12 2 0.2 0.3 | |
|
149 | h 12 2 0.3 0.3 | |
|
150 | g 12 3 0.9 0.9 | |
|
151 | h 12 3 2.5 2.3 | |
|
152 | g 12 4 -0.2 -0.4 | |
|
153 | h 12 4 -2.6 -2.7 | |
|
154 | g 12 5 0.9 1.0 | |
|
155 | h 12 5 0.7 0.6 | |
|
156 | g 12 6 -0.5 -0.4 | |
|
157 | h 12 6 0.3 0.4 | |
|
158 | g 12 7 0.3 0.5 | |
|
159 | h 12 7 0.0 0.0 | |
|
160 | g 12 8 -0.3 -0.3 | |
|
161 | h 12 8 0.0 0.0 | |
|
162 | g 12 9 -0.4 -0.4 | |
|
163 | h 12 9 0.3 0.3 | |
|
164 | g 12 10 -0.1 0.0 | |
|
165 | h 12 10 -0.9 -0.8 | |
|
166 | g 12 11 -0.2 -0.4 | |
|
167 | h 12 11 -0.4 -0.4 | |
|
168 | g 12 12 -0.4 0.0 | |
|
169 | h 12 12 0.8 1.0 | |
|
170 | g 13 0 -0.2 -0.2 | |
|
171 | g 13 1 -0.9 -0.9 | |
|
172 | h 13 1 -0.9 -0.7 | |
|
173 | g 13 2 0.3 0.3 | |
|
174 | h 13 2 0.2 0.3 | |
|
175 | g 13 3 0.1 0.3 | |
|
176 | h 13 3 1.8 1.7 | |
|
177 | g 13 4 -0.4 -0.4 | |
|
178 | h 13 4 -0.4 -0.5 | |
|
179 | g 13 5 1.3 1.2 | |
|
180 | h 13 5 -1.0 -1.0 | |
|
181 | g 13 6 -0.4 -0.4 | |
|
182 | h 13 6 -0.1 0.0 | |
|
183 | g 13 7 0.7 0.7 | |
|
184 | h 13 7 0.7 0.7 | |
|
185 | g 13 8 -0.4 -0.3 | |
|
186 | h 13 8 0.3 0.2 | |
|
187 | g 13 9 0.3 0.4 | |
|
188 | h 13 9 0.6 0.6 | |
|
189 | g 13 10 -0.1 -0.1 | |
|
190 | h 13 10 0.3 0.4 | |
|
191 | g 13 11 0.4 0.4 | |
|
192 | h 13 11 -0.2 -0.2 | |
|
193 | g 13 12 0.0 -0.1 | |
|
194 | h 13 12 -0.5 -0.5 | |
|
195 | g 13 13 0.1 -0.3 | |
|
196 | h 13 13 -0.9 -1.0 |
@@ -0,0 +1,196 | |||
|
1 | g/h n m 1900.0 1905.0 1910.0 1915.0 1920.0 1925.0 1930.0 1935.0 1940.0 1945.0 1950.0 1955.0 1960.0 1965.0 1970.0 1975.0 1980.0 1985.0 1990.0 1995.0 2000.0 2005.0 2010.0 SV | |
|
2 | g 1 0 -31543 -31464 -31354 -31212 -31060 -30926 -30805 -30715 -30654 -30594 -30554 -30500 -30421 -30334 -30220 -30100 -29992 -29873 -29775 -29692 -29619.4 -29554.63 -29496.5 11.4 | |
|
3 | g 1 1 -2298 -2298 -2297 -2306 -2317 -2318 -2316 -2306 -2292 -2285 -2250 -2215 -2169 -2119 -2068 -2013 -1956 -1905 -1848 -1784 -1728.2 -1669.05 -1585.9 16.7 | |
|
4 | h 1 1 5922 5909 5898 5875 5845 5817 5808 5812 5821 5810 5815 5820 5791 5776 5737 5675 5604 5500 5406 5306 5186.1 5077.99 4945.1 -28.8 | |
|
5 | g 2 0 -677 -728 -769 -802 -839 -893 -951 -1018 -1106 -1244 -1341 -1440 -1555 -1662 -1781 -1902 -1997 -2072 -2131 -2200 -2267.7 -2337.24 -2396.6 -11.3 | |
|
6 | g 2 1 2905 2928 2948 2956 2959 2969 2980 2984 2981 2990 2998 3003 3002 2997 3000 3010 3027 3044 3059 3070 3068.4 3047.69 3026.0 -3.9 | |
|
7 | h 2 1 -1061 -1086 -1128 -1191 -1259 -1334 -1424 -1520 -1614 -1702 -1810 -1898 -1967 -2016 -2047 -2067 -2129 -2197 -2279 -2366 -2481.6 -2594.50 -2707.7 -23.0 | |
|
8 | g 2 2 924 1041 1176 1309 1407 1471 1517 1550 1566 1578 1576 1581 1590 1594 1611 1632 1663 1687 1686 1681 1670.9 1657.76 1668.6 2.7 | |
|
9 | h 2 2 1121 1065 1000 917 823 728 644 586 528 477 381 291 206 114 25 -68 -200 -306 -373 -413 -458.0 -515.43 -575.4 -12.9 | |
|
10 | g 3 0 1022 1037 1058 1084 1111 1140 1172 1206 1240 1282 1297 1302 1302 1297 1287 1276 1281 1296 1314 1335 1339.6 1336.30 1339.7 1.3 | |
|
11 | g 3 1 -1469 -1494 -1524 -1559 -1600 -1645 -1692 -1740 -1790 -1834 -1889 -1944 -1992 -2038 -2091 -2144 -2180 -2208 -2239 -2267 -2288.0 -2305.83 -2326.3 -3.9 | |
|
12 | h 3 1 -330 -357 -389 -421 -445 -462 -480 -494 -499 -499 -476 -462 -414 -404 -366 -333 -336 -310 -284 -262 -227.6 -198.86 -160.5 8.6 | |
|
13 | g 3 2 1256 1239 1223 1212 1205 1202 1205 1215 1232 1255 1274 1288 1289 1292 1278 1260 1251 1247 1248 1249 1252.1 1246.39 1231.7 -2.9 | |
|
14 | h 3 2 3 34 62 84 103 119 133 146 163 186 206 216 224 240 251 262 271 284 293 302 293.4 269.72 251.7 -2.9 | |
|
15 | g 3 3 572 635 705 778 839 881 907 918 916 913 896 882 878 856 838 830 833 829 802 759 714.5 672.51 634.2 -8.1 | |
|
16 | h 3 3 523 480 425 360 293 229 166 101 43 -11 -46 -83 -130 -165 -196 -223 -252 -297 -352 -427 -491.1 -524.72 -536.8 -2.1 | |
|
17 | g 4 0 876 880 884 887 889 891 896 903 914 944 954 958 957 957 952 946 938 936 939 940 932.3 920.55 912.6 -1.4 | |
|
18 | g 4 1 628 643 660 678 695 711 727 744 762 776 792 796 800 804 800 791 782 780 780 780 786.8 797.96 809.0 2.0 | |
|
19 | h 4 1 195 203 211 218 220 216 205 188 169 144 136 133 135 148 167 191 212 232 247 262 272.6 282.07 286.4 0.4 | |
|
20 | g 4 2 660 653 644 631 616 601 584 565 550 544 528 510 504 479 461 438 398 361 325 290 250.0 210.65 166.6 -8.9 | |
|
21 | h 4 2 -69 -77 -90 -109 -134 -163 -195 -226 -252 -276 -278 -274 -278 -269 -266 -265 -257 -249 -240 -236 -231.9 -225.23 -211.2 3.2 | |
|
22 | g 4 3 -361 -380 -400 -416 -424 -426 -422 -415 -405 -421 -408 -397 -394 -390 -395 -405 -419 -424 -423 -418 -403.0 -379.86 -357.1 4.4 | |
|
23 | h 4 3 -210 -201 -189 -173 -153 -130 -109 -90 -72 -55 -37 -23 3 13 26 39 53 69 84 97 119.8 145.15 164.4 3.6 | |
|
24 | g 4 4 134 146 160 178 199 217 234 249 265 304 303 290 269 252 234 216 199 170 141 122 111.3 100.00 89.7 -2.3 | |
|
25 | h 4 4 -75 -65 -55 -51 -57 -70 -90 -114 -141 -178 -210 -230 -255 -269 -279 -288 -297 -297 -299 -306 -303.8 -305.36 -309.2 -0.8 | |
|
26 | g 5 0 -184 -192 -201 -211 -221 -230 -237 -241 -241 -253 -240 -229 -222 -219 -216 -218 -218 -214 -214 -214 -218.8 -227.00 -231.1 -0.5 | |
|
27 | g 5 1 328 328 327 327 326 326 327 329 334 346 349 360 362 358 359 356 357 355 353 352 351.4 354.41 357.2 0.5 | |
|
28 | h 5 1 -210 -193 -172 -148 -122 -96 -72 -51 -33 -12 3 15 16 19 26 31 46 47 46 46 43.8 42.72 44.7 0.5 | |
|
29 | g 5 2 264 259 253 245 236 226 218 211 208 194 211 230 242 254 262 264 261 253 245 235 222.3 208.95 200.3 -1.5 | |
|
30 | h 5 2 53 56 57 58 58 58 60 64 71 95 103 110 125 128 139 148 150 150 154 165 171.9 180.25 188.9 1.5 | |
|
31 | g 5 3 5 -1 -9 -16 -23 -28 -32 -33 -33 -20 -20 -23 -26 -31 -42 -59 -74 -93 -109 -118 -130.4 -136.54 -141.2 -0.7 | |
|
32 | h 5 3 -33 -32 -33 -34 -38 -44 -53 -64 -75 -67 -87 -98 -117 -126 -139 -152 -151 -154 -153 -143 -133.1 -123.45 -118.1 0.9 | |
|
33 | g 5 4 -86 -93 -102 -111 -119 -125 -131 -136 -141 -142 -147 -152 -156 -157 -160 -159 -162 -164 -165 -166 -168.6 -168.05 -163.1 1.3 | |
|
34 | h 5 4 -124 -125 -126 -126 -125 -122 -118 -115 -113 -119 -122 -121 -114 -97 -91 -83 -78 -75 -69 -55 -39.3 -19.57 0.1 3.7 | |
|
35 | g 5 5 -16 -26 -38 -51 -62 -69 -74 -76 -76 -82 -76 -69 -63 -62 -56 -49 -48 -46 -36 -17 -12.9 -13.55 -7.7 1.4 | |
|
36 | h 5 5 3 11 21 32 43 51 58 64 69 82 80 78 81 81 83 88 92 95 97 107 106.3 103.85 100.9 -0.6 | |
|
37 | g 6 0 63 62 62 61 61 61 60 59 57 59 54 47 46 45 43 45 48 53 61 68 72.3 73.60 72.8 -0.3 | |
|
38 | g 6 1 61 60 58 57 55 54 53 53 54 57 57 57 58 61 64 66 66 65 65 67 68.2 69.56 68.6 -0.3 | |
|
39 | h 6 1 -9 -7 -5 -2 0 3 4 4 4 6 -1 -9 -10 -11 -12 -13 -15 -16 -16 -17 -17.4 -20.33 -20.8 -0.1 | |
|
40 | g 6 2 -11 -11 -11 -10 -10 -9 -9 -8 -7 6 4 3 1 8 15 28 42 51 59 68 74.2 76.74 76.0 -0.3 | |
|
41 | h 6 2 83 86 89 93 96 99 102 104 105 100 99 96 99 100 100 99 93 88 82 72 63.7 54.75 44.2 -2.1 | |
|
42 | g 6 3 -217 -221 -224 -228 -233 -238 -242 -246 -249 -246 -247 -247 -237 -228 -212 -198 -192 -185 -178 -170 -160.9 -151.34 -141.4 1.9 | |
|
43 | h 6 3 2 4 5 8 11 14 19 25 33 16 33 48 60 68 72 75 71 69 69 67 65.1 63.63 61.5 -0.4 | |
|
44 | g 6 4 -58 -57 -54 -51 -46 -40 -32 -25 -18 -25 -16 -8 -1 4 2 1 4 4 3 -1 -5.9 -14.58 -22.9 -1.6 | |
|
45 | h 6 4 -35 -32 -29 -26 -22 -18 -16 -15 -15 -9 -12 -16 -20 -32 -37 -41 -43 -48 -52 -58 -61.2 -63.53 -66.3 -0.5 | |
|
46 | g 6 5 59 57 54 49 44 39 32 25 18 21 12 7 -2 1 3 6 14 16 18 19 16.9 14.58 13.1 -0.2 | |
|
47 | h 6 5 36 32 28 23 18 13 8 4 0 -16 -12 -12 -11 -8 -6 -4 -2 -1 1 1 0.7 0.24 3.1 0.8 | |
|
48 | g 6 6 -90 -92 -95 -98 -101 -103 -104 -106 -107 -104 -105 -107 -113 -111 -112 -111 -108 -102 -96 -93 -90.4 -86.36 -77.9 1.8 | |
|
49 | h 6 6 -69 -67 -65 -62 -57 -52 -46 -40 -33 -39 -30 -24 -17 -7 1 11 17 21 24 36 43.8 50.94 54.9 0.5 | |
|
50 | g 7 0 70 70 71 72 73 73 74 74 74 70 65 65 67 75 72 71 72 74 77 77 79.0 79.88 80.4 0.2 | |
|
51 | g 7 1 -55 -54 -54 -54 -54 -54 -54 -53 -53 -40 -55 -56 -56 -57 -57 -56 -59 -62 -64 -72 -74.0 -74.46 -75.0 -0.1 | |
|
52 | h 7 1 -45 -46 -47 -48 -49 -50 -51 -52 -52 -45 -35 -50 -55 -61 -70 -77 -82 -83 -80 -69 -64.6 -61.14 -57.8 0.6 | |
|
53 | g 7 2 0 0 1 2 2 3 4 4 4 0 2 2 5 4 1 1 2 3 2 1 0.0 -1.65 -4.7 -0.6 | |
|
54 | h 7 2 -13 -14 -14 -14 -14 -14 -15 -17 -18 -18 -17 -24 -28 -27 -27 -26 -27 -27 -26 -25 -24.2 -22.57 -21.2 0.3 | |
|
55 | g 7 3 34 33 32 31 29 27 25 23 20 0 1 10 15 13 14 16 21 24 26 28 33.3 38.73 45.3 1.4 | |
|
56 | h 7 3 -10 -11 -12 -12 -13 -14 -14 -14 -14 2 0 -4 -6 -2 -4 -5 -5 -2 0 4 6.2 6.82 6.6 -0.2 | |
|
57 | g 7 4 -41 -41 -40 -38 -37 -35 -34 -33 -31 -29 -40 -32 -32 -26 -22 -14 -12 -6 -1 5 9.1 12.30 14.0 0.3 | |
|
58 | h 7 4 -1 0 1 2 4 5 6 7 7 6 10 8 7 6 8 10 16 20 21 24 24.0 25.35 24.9 -0.1 | |
|
59 | g 7 5 -21 -20 -19 -18 -16 -14 -12 -11 -9 -10 -7 -11 -7 -6 -2 0 1 4 5 4 6.9 9.37 10.4 0.1 | |
|
60 | h 7 5 28 28 28 28 28 29 29 29 29 28 36 28 23 26 23 22 18 17 17 17 14.8 10.93 7.0 -0.8 | |
|
61 | g 7 6 18 18 18 19 19 19 18 18 17 15 5 9 17 13 13 12 11 10 9 8 7.3 5.42 1.6 -0.8 | |
|
62 | h 7 6 -12 -12 -13 -15 -16 -17 -18 -19 -20 -17 -18 -20 -18 -23 -23 -23 -23 -23 -23 -24 -25.4 -26.32 -27.7 -0.3 | |
|
63 | g 7 7 6 6 6 6 6 6 6 6 5 29 19 18 8 1 -2 -5 -2 0 0 -2 -1.2 1.94 4.9 0.4 | |
|
64 | h 7 7 -22 -22 -22 -22 -22 -21 -20 -19 -19 -22 -16 -18 -17 -12 -11 -12 -10 -7 -4 -6 -5.8 -4.64 -3.4 0.2 | |
|
65 | g 8 0 11 11 11 11 11 11 11 11 11 13 22 11 15 13 14 14 18 21 23 25 24.4 24.80 24.3 -0.1 | |
|
66 | g 8 1 8 8 8 8 7 7 7 7 7 7 15 9 6 5 6 6 6 6 5 6 6.6 7.62 8.2 0.1 | |
|
67 | h 8 1 8 8 8 8 8 8 8 8 8 12 5 10 11 7 7 6 7 8 10 11 11.9 11.20 10.9 0.0 | |
|
68 | g 8 2 -4 -4 -4 -4 -3 -3 -3 -3 -3 -8 -4 -6 -4 -4 -2 -1 0 0 -1 -6 -9.2 -11.73 -14.5 -0.5 | |
|
69 | h 8 2 -14 -15 -15 -15 -15 -15 -15 -15 -14 -21 -22 -15 -14 -12 -15 -16 -18 -19 -19 -21 -21.5 -20.88 -20.0 0.2 | |
|
70 | g 8 3 -9 -9 -9 -9 -9 -9 -9 -9 -10 -5 -1 -14 -11 -14 -13 -12 -11 -11 -10 -9 -7.9 -6.88 -5.7 0.3 | |
|
71 | h 8 3 7 7 6 6 6 6 5 5 5 -12 0 5 7 9 6 4 4 5 6 8 8.5 9.83 11.9 0.5 | |
|
72 | g 8 4 1 1 1 2 2 2 2 1 1 9 11 6 2 0 -3 -8 -7 -9 -12 -14 -16.6 -18.11 -19.3 -0.3 | |
|
73 | h 8 4 -13 -13 -13 -13 -14 -14 -14 -15 -15 -7 -21 -23 -18 -16 -17 -19 -22 -23 -22 -23 -21.5 -19.71 -17.4 0.4 | |
|
74 | g 8 5 2 2 2 3 4 4 5 6 6 7 15 10 10 8 5 4 4 4 3 9 9.1 10.17 11.6 0.3 | |
|
75 | h 8 5 5 5 5 5 5 5 5 5 5 2 -8 3 4 4 6 6 9 11 12 15 15.5 16.22 16.7 0.1 | |
|
76 | g 8 6 -9 -8 -8 -8 -7 -7 -6 -6 -5 -10 -13 -7 -5 -1 0 0 3 4 4 6 7.0 9.36 10.9 0.2 | |
|
77 | h 8 6 16 16 16 16 17 17 18 18 19 18 17 23 23 24 21 18 16 14 12 11 8.9 7.61 7.1 -0.1 | |
|
78 | g 8 7 5 5 5 6 6 7 8 8 9 7 5 6 10 11 11 10 6 4 2 -5 -7.9 -11.25 -14.1 -0.5 | |
|
79 | h 8 7 -5 -5 -5 -5 -5 -5 -5 -5 -5 3 -4 -4 1 -3 -6 -10 -13 -15 -16 -16 -14.9 -12.76 -10.8 0.4 | |
|
80 | g 8 8 8 8 8 8 8 8 8 7 7 2 -1 9 8 4 3 1 -1 -4 -6 -7 -7.0 -4.87 -3.7 0.2 | |
|
81 | h 8 8 -18 -18 -18 -18 -19 -19 -19 -19 -19 -11 -17 -13 -20 -17 -16 -17 -15 -11 -10 -4 -2.1 -0.06 1.7 0.4 | |
|
82 | g 9 0 8 8 8 8 8 8 8 8 8 5 3 4 4 8 8 7 5 5 4 4 5.0 5.58 5.4 0.0 | |
|
83 | g 9 1 10 10 10 10 10 10 10 10 10 -21 -7 9 6 10 10 10 10 10 9 9 9.4 9.76 9.4 0.0 | |
|
84 | h 9 1 -20 -20 -20 -20 -20 -20 -20 -20 -21 -27 -24 -11 -18 -22 -21 -21 -21 -21 -20 -20 -19.7 -20.11 -20.5 0.0 | |
|
85 | g 9 2 1 1 1 1 1 1 1 1 1 1 -1 -4 0 2 2 2 1 1 1 3 3.0 3.58 3.4 0.0 | |
|
86 | h 9 2 14 14 14 14 14 14 14 15 15 17 19 12 12 15 16 16 16 15 15 15 13.4 12.69 11.6 0.0 | |
|
87 | g 9 3 -11 -11 -11 -11 -11 -11 -12 -12 -12 -11 -25 -5 -9 -13 -12 -12 -12 -12 -12 -10 -8.4 -6.94 -5.3 0.0 | |
|
88 | h 9 3 5 5 5 5 5 5 5 5 5 29 12 7 2 7 6 7 9 9 11 12 12.5 12.67 12.8 0.0 | |
|
89 | g 9 4 12 12 12 12 12 12 12 11 11 3 10 2 1 10 10 10 9 9 9 8 6.3 5.01 3.1 0.0 | |
|
90 | h 9 4 -3 -3 -3 -3 -3 -3 -3 -3 -3 -9 2 6 0 -4 -4 -4 -5 -6 -7 -6 -6.2 -6.72 -7.2 0.0 | |
|
91 | g 9 5 1 1 1 1 1 1 1 1 1 16 5 4 4 -1 -1 -1 -3 -3 -4 -8 -8.9 -10.76 -12.4 0.0 | |
|
92 | h 9 5 -2 -2 -2 -2 -2 -2 -2 -3 -3 4 2 -2 -3 -5 -5 -5 -6 -6 -7 -8 -8.4 -8.16 -7.4 0.0 | |
|
93 | g 9 6 -2 -2 -2 -2 -2 -2 -2 -2 -2 -3 -5 1 -1 -1 0 -1 -1 -1 -2 -1 -1.5 -1.25 -0.8 0.0 | |
|
94 | h 9 6 8 8 8 8 9 9 9 9 9 9 8 10 9 10 10 10 9 9 9 8 8.4 8.10 8.0 0.0 | |
|
95 | g 9 7 2 2 2 2 2 2 3 3 3 -4 -2 2 -2 5 3 4 7 7 7 10 9.3 8.76 8.4 0.0 | |
|
96 | h 9 7 10 10 10 10 10 10 10 11 11 6 8 7 8 10 11 11 10 9 8 5 3.8 2.92 2.2 0.0 | |
|
97 | g 9 8 -1 0 0 0 0 0 0 0 1 -3 3 2 3 1 1 1 2 1 1 -2 -4.3 -6.66 -8.4 0.0 | |
|
98 | h 9 8 -2 -2 -2 -2 -2 -2 -2 -2 -2 1 -11 -6 0 -4 -2 -3 -6 -7 -7 -8 -8.2 -7.73 -6.1 0.0 | |
|
99 | g 9 9 -1 -1 -1 -1 -1 -1 -2 -2 -2 -4 8 5 -1 -2 -1 -2 -5 -5 -6 -8 -8.2 -9.22 -10.1 0.0 | |
|
100 | h 9 9 2 2 2 2 2 2 2 2 2 8 -7 5 5 1 1 1 2 2 2 3 4.8 6.01 7.0 0.0 | |
|
101 | g 10 0 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -8 -3 1 -2 -3 -3 -4 -4 -3 -3 -2.6 -2.17 -2.0 0.0 | |
|
102 | g 10 1 -4 -4 -4 -4 -4 -4 -4 -4 -4 11 4 -5 -3 -3 -3 -3 -4 -4 -4 -6 -6.0 -6.12 -6.3 0.0 | |
|
103 | h 10 1 2 2 2 2 2 2 2 2 2 5 13 -4 4 2 1 1 1 1 2 1 1.7 2.19 2.8 0.0 | |
|
104 | g 10 2 2 2 2 2 2 2 2 2 2 1 -1 -1 4 2 2 2 2 3 2 2 1.7 1.42 0.9 0.0 | |
|
105 | h 10 2 1 1 1 1 1 1 1 1 1 1 -2 0 1 1 1 1 0 0 1 0 0.0 0.10 -0.1 0.0 | |
|
106 | g 10 3 -5 -5 -5 -5 -5 -5 -5 -5 -5 2 13 2 0 -5 -5 -5 -5 -5 -5 -4 -3.1 -2.35 -1.1 0.0 | |
|
107 | h 10 3 2 2 2 2 2 2 2 2 2 -20 -10 -8 0 2 3 3 3 3 3 4 4.0 4.46 4.7 0.0 | |
|
108 | g 10 4 -2 -2 -2 -2 -2 -2 -2 -2 -2 -5 -4 -3 -1 -2 -1 -2 -2 -2 -2 -1 -0.5 -0.15 -0.2 0.0 | |
|
109 | h 10 4 6 6 6 6 6 6 6 6 6 -1 2 -2 2 6 4 4 6 6 6 5 4.9 4.76 4.4 0.0 | |
|
110 | g 10 5 6 6 6 6 6 6 6 6 6 -1 4 7 4 4 6 5 5 5 4 4 3.7 3.06 2.5 0.0 | |
|
111 | h 10 5 -4 -4 -4 -4 -4 -4 -4 -4 -4 -6 -3 -4 -5 -4 -4 -4 -4 -4 -4 -5 -5.9 -6.58 -7.2 0.0 | |
|
112 | g 10 6 4 4 4 4 4 4 4 4 4 8 12 4 6 4 4 4 3 3 3 2 1.0 0.29 -0.3 0.0 | |
|
113 | h 10 6 0 0 0 0 0 0 0 0 0 6 6 1 1 0 0 -1 0 0 0 -1 -1.2 -1.01 -1.0 0.0 | |
|
114 | g 10 7 0 0 0 0 0 0 0 0 0 -1 3 -2 1 0 1 1 1 1 1 2 2.0 2.06 2.2 0.0 | |
|
115 | h 10 7 -2 -2 -2 -2 -2 -2 -2 -1 -1 -4 -3 -3 -1 -2 -1 -1 -1 -1 -2 -2 -2.9 -3.47 -4.0 0.0 | |
|
116 | g 10 8 2 2 2 1 1 1 1 2 2 -3 2 6 -1 2 0 0 2 2 3 5 4.2 3.77 3.1 0.0 | |
|
117 | h 10 8 4 4 4 4 4 4 4 4 4 -2 6 7 6 3 3 3 4 4 3 1 0.2 -0.86 -2.0 0.0 | |
|
118 | g 10 9 2 2 2 2 3 3 3 3 3 5 10 -2 2 2 3 3 3 3 3 1 0.3 -0.21 -1.0 0.0 | |
|
119 | h 10 9 0 0 0 0 0 0 0 0 0 0 11 -1 0 0 1 1 0 0 -1 -2 -2.2 -2.31 -2.0 0.0 | |
|
120 | g 10 10 0 0 0 0 0 0 0 0 0 -2 3 0 0 0 -1 -1 0 0 0 0 -1.1 -2.09 -2.8 0.0 | |
|
121 | h 10 10 -6 -6 -6 -6 -6 -6 -6 -6 -6 -2 8 -3 -7 -6 -4 -5 -6 -6 -6 -7 -7.4 -7.93 -8.3 0.0 | |
|
122 | g 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.7 2.95 3.0 0.0 | |
|
123 | g 11 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.7 -1.60 -1.5 0.0 | |
|
124 | h 11 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0.26 0.1 0.0 | |
|
125 | g 11 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.9 -1.88 -2.1 0.0 | |
|
126 | h 11 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.3 1.44 1.7 0.0 | |
|
127 | g 11 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.5 1.44 1.6 0.0 | |
|
128 | h 11 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9 -0.77 -0.6 0.0 | |
|
129 | g 11 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.1 -0.31 -0.5 0.0 | |
|
130 | h 11 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.6 -2.27 -1.8 0.0 | |
|
131 | g 11 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0.29 0.5 0.0 | |
|
132 | h 11 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.9 0.90 0.9 0.0 | |
|
133 | g 11 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.7 -0.79 -0.8 0.0 | |
|
134 | h 11 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.7 -0.58 -0.4 0.0 | |
|
135 | g 11 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 0.53 0.4 0.0 | |
|
136 | h 11 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.8 -2.69 -2.5 0.0 | |
|
137 | g 11 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.7 1.80 1.8 0.0 | |
|
138 | h 11 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9 -1.08 -1.3 0.0 | |
|
139 | g 11 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0.16 0.2 0.0 | |
|
140 | h 11 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.2 -1.58 -2.1 0.0 | |
|
141 | g 11 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.2 0.96 0.8 0.0 | |
|
142 | h 11 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.9 -1.90 -1.9 0.0 | |
|
143 | g 11 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4.0 3.99 3.8 0.0 | |
|
144 | h 11 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9 -1.39 -1.8 0.0 | |
|
145 | g 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.2 -2.15 -2.1 0.0 | |
|
146 | g 12 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.3 -0.29 -0.2 0.0 | |
|
147 | h 12 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.55 -0.8 0.0 | |
|
148 | g 12 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0.21 0.3 0.0 | |
|
149 | h 12 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.23 0.3 0.0 | |
|
150 | g 12 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.9 0.89 1.0 0.0 | |
|
151 | h 12 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.5 2.38 2.2 0.0 | |
|
152 | g 12 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.2 -0.38 -0.7 0.0 | |
|
153 | h 12 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.6 -2.63 -2.5 0.0 | |
|
154 | g 12 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.9 0.96 0.9 0.0 | |
|
155 | h 12 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 0.61 0.5 0.0 | |
|
156 | g 12 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.5 -0.30 -0.1 0.0 | |
|
157 | h 12 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.40 0.6 0.0 | |
|
158 | g 12 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.46 0.5 0.0 | |
|
159 | h 12 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0 0.01 0.0 0.0 | |
|
160 | g 12 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.3 -0.35 -0.4 0.0 | |
|
161 | h 12 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0 0.02 0.1 0.0 | |
|
162 | g 12 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.36 -0.4 0.0 | |
|
163 | h 12 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.28 0.3 0.0 | |
|
164 | g 12 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.1 0.08 0.2 0.0 | |
|
165 | h 12 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9 -0.87 -0.9 0.0 | |
|
166 | g 12 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.2 -0.49 -0.8 0.0 | |
|
167 | h 12 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.34 -0.2 0.0 | |
|
168 | g 12 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.08 0.0 0.0 | |
|
169 | h 12 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.8 0.88 0.8 0.0 | |
|
170 | g 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.2 -0.16 -0.2 0.0 | |
|
171 | g 13 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9 -0.88 -0.9 0.0 | |
|
172 | h 13 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9 -0.76 -0.8 0.0 | |
|
173 | g 13 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.30 0.3 0.0 | |
|
174 | h 13 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0.33 0.3 0.0 | |
|
175 | g 13 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0.28 0.4 0.0 | |
|
176 | h 13 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.8 1.72 1.7 0.0 | |
|
177 | g 13 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.43 -0.4 0.0 | |
|
178 | h 13 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.54 -0.6 0.0 | |
|
179 | g 13 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.3 1.18 1.1 0.0 | |
|
180 | h 13 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.0 -1.07 -1.2 0.0 | |
|
181 | g 13 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.37 -0.3 0.0 | |
|
182 | h 13 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.1 -0.04 -0.1 0.0 | |
|
183 | g 13 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 0.75 0.8 0.0 | |
|
184 | h 13 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 0.63 0.5 0.0 | |
|
185 | g 13 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.26 -0.2 0.0 | |
|
186 | h 13 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.21 0.1 0.0 | |
|
187 | g 13 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.35 0.4 0.0 | |
|
188 | h 13 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.6 0.53 0.5 0.0 | |
|
189 | g 13 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.1 -0.05 0.0 0.0 | |
|
190 | h 13 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.38 0.4 0.0 | |
|
191 | g 13 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.4 0.41 0.4 0.0 | |
|
192 | h 13 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.2 -0.22 -0.2 0.0 | |
|
193 | g 13 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0 -0.10 -0.3 0.0 | |
|
194 | h 13 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.5 -0.57 -0.5 0.0 | |
|
195 | g 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 -0.18 -0.3 0.0 | |
|
196 | h 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9 -0.82 -0.8 0.0 |
|
1 | NO CONTENT: new file 100644, binary diff hidden |
@@ -167,194 +167,6 | |||
|
167 | 167 | |
|
168 | 168 | </style> |
|
169 | 169 | |
|
170 | <script> | |
|
171 | $(document).ready(function() { | |
|
172 | ||
|
173 | {% for beam in abs_beams %} | |
|
174 | $( "#button-{{ forloop.counter }}" ).click(function() { | |
|
175 | ||
|
176 | var antenna_upvalues = {{beam.antenna_upvalues}}; | |
|
177 | var antenna_downvalues = {{beam.antenna_downvalues}}; | |
|
178 | ||
|
179 | var table_up = document.getElementById('antenna_up'); | |
|
180 | var cells_up = table_up.getElementsByTagName('td'); | |
|
181 | ||
|
182 | var table_down = document.getElementById('antenna_down'); | |
|
183 | var cells_down = table_down.getElementsByTagName('td'); | |
|
184 | ||
|
185 | //TX Tables | |
|
186 | var tx_upvalues = {{beam.get_tx.up}}; | |
|
187 | var tx_downvalues = {{beam.get_tx.down}}; | |
|
188 | ||
|
189 | var tabletx_up = document.getElementById('tx_up'); | |
|
190 | var cellstx_up = tabletx_up.getElementsByTagName('td'); | |
|
191 | var tabletx_down = document.getElementById('tx_down'); | |
|
192 | var cellstx_down = tabletx_down.getElementsByTagName('td'); | |
|
193 | ||
|
194 | //RX Tables | |
|
195 | var rx_upvalues = {{beam.get_rx.up}}; | |
|
196 | var rx_downvalues = {{beam.get_rx.down}}; | |
|
197 | ||
|
198 | var tablerx_up = document.getElementById('rx_up'); | |
|
199 | var cellsrx_up = tablerx_up.getElementsByTagName('td'); | |
|
200 | var tablerx_down = document.getElementById('rx_down'); | |
|
201 | var cellsrx_down = tablerx_down.getElementsByTagName('td'); | |
|
202 | ||
|
203 | //alert(cells_down[51].textContent); | |
|
204 | //alert(cells_up[51].textContent); | |
|
205 | ||
|
206 | for (var i = 1, len = 17; i < len; i++) { | |
|
207 | if ((i > 12) && (i<17)){ | |
|
208 | cells_up[i].innerHTML = antenna_upvalues[3][i-13].toFixed(1); | |
|
209 | cells_down[i].innerHTML = antenna_downvalues[3][i-13].toFixed(1); | |
|
210 | cellstx_up[i].innerHTML = tx_upvalues[3][i-13]; | |
|
211 | cellstx_down[i].innerHTML = tx_downvalues[3][i-13]; | |
|
212 | cellsrx_up[i].innerHTML = rx_upvalues[3][i-13]; | |
|
213 | cellsrx_down[i].innerHTML = rx_downvalues[3][i-13]; | |
|
214 | } | |
|
215 | else if ((i > 8) && (i<13)){ | |
|
216 | cells_up[i].innerHTML = antenna_upvalues[2][i-9].toFixed(1); | |
|
217 | cells_down[i].innerHTML = antenna_downvalues[2][i-9].toFixed(1); | |
|
218 | cellstx_up[i].innerHTML = tx_upvalues[2][i-9]; | |
|
219 | cellstx_down[i].innerHTML = tx_downvalues[2][i-9]; | |
|
220 | cellsrx_up[i].innerHTML = rx_upvalues[2][i-9]; | |
|
221 | cellsrx_down[i].innerHTML = rx_downvalues[2][i-9]; | |
|
222 | } | |
|
223 | else if ((i > 4) && (i<9)){ | |
|
224 | cells_up[i].innerHTML = antenna_upvalues[1][i-5].toFixed(1); | |
|
225 | cells_down[i].innerHTML = antenna_downvalues[1][i-5].toFixed(1); | |
|
226 | cellstx_up[i].innerHTML = tx_upvalues[1][i-5]; | |
|
227 | cellstx_down[i].innerHTML = tx_downvalues[1][i-5]; | |
|
228 | cellsrx_up[i].innerHTML = rx_upvalues[1][i-5]; | |
|
229 | cellsrx_down[i].innerHTML = rx_downvalues[1][i-5]; | |
|
230 | } | |
|
231 | else if (i < 5) { | |
|
232 | cells_up[i].innerHTML = antenna_upvalues[0][i-1].toFixed(1); | |
|
233 | cells_down[i].innerHTML = antenna_downvalues[0][i-1].toFixed(1); | |
|
234 | cellstx_up[i].innerHTML = tx_upvalues[0][i-1]; | |
|
235 | cellstx_down[i].innerHTML = tx_downvalues[0][i-1]; | |
|
236 | cellsrx_up[i].innerHTML = rx_upvalues[0][i-1]; | |
|
237 | cellsrx_down[i].innerHTML = rx_downvalues[0][i-1]; | |
|
238 | } | |
|
239 | } | |
|
240 | ||
|
241 | for (var i = 18, len = 34; i < len; i++) { | |
|
242 | if ((i > 29) && (i<34)) { | |
|
243 | cells_up[i].innerHTML = antenna_upvalues[3][i-26].toFixed(1); | |
|
244 | cells_down[i].innerHTML = antenna_downvalues[3][i-26].toFixed(1); | |
|
245 | cellstx_up[i].innerHTML = tx_upvalues[3][i-26]; | |
|
246 | cellstx_down[i].innerHTML = tx_downvalues[3][i-26]; | |
|
247 | cellsrx_up[i].innerHTML = rx_upvalues[3][i-26]; | |
|
248 | cellsrx_down[i].innerHTML = rx_downvalues[3][i-26]; | |
|
249 | } | |
|
250 | if ((i > 25) && (i<30)) { | |
|
251 | cells_up[i].innerHTML = antenna_upvalues[2][i-22].toFixed(1); | |
|
252 | cells_down[i].innerHTML = antenna_downvalues[2][i-22].toFixed(1); | |
|
253 | cellstx_up[i].innerHTML = tx_upvalues[2][i-22]; | |
|
254 | cellstx_down[i].innerHTML = tx_downvalues[2][i-22]; | |
|
255 | cellsrx_up[i].innerHTML = rx_upvalues[2][i-22]; | |
|
256 | cellsrx_down[i].innerHTML = rx_downvalues[2][i-22]; | |
|
257 | } | |
|
258 | else if ((i > 21) && (i<26)) { | |
|
259 | cells_up[i].innerHTML = antenna_upvalues[1][i-18].toFixed(1); | |
|
260 | cells_down[i].innerHTML = antenna_downvalues[1][i-18].toFixed(1); | |
|
261 | cellstx_up[i].innerHTML = tx_upvalues[1][i-18]; | |
|
262 | cellstx_down[i].innerHTML = tx_downvalues[1][i-18]; | |
|
263 | cellsrx_up[i].innerHTML = rx_upvalues[1][i-18]; | |
|
264 | cellsrx_down[i].innerHTML = rx_downvalues[1][i-18]; | |
|
265 | } | |
|
266 | else if (i < 22) { | |
|
267 | cells_up[i].innerHTML = antenna_upvalues[0][i-14].toFixed(1); | |
|
268 | cells_down[i].innerHTML = antenna_downvalues[0][i-14].toFixed(1); | |
|
269 | cellstx_up[i].innerHTML = tx_upvalues[0][i-14]; | |
|
270 | cellstx_down[i].innerHTML = tx_downvalues[0][i-14]; | |
|
271 | cellsrx_up[i].innerHTML = rx_upvalues[0][i-14]; | |
|
272 | cellsrx_down[i].innerHTML = rx_downvalues[0][i-14]; | |
|
273 | } | |
|
274 | } | |
|
275 | ||
|
276 | for (var i = 35, len = 51; i < len; i++) { | |
|
277 | if ((i > 46) && (i<51)) { | |
|
278 | cells_up[i].innerHTML = antenna_upvalues[7][i-47].toFixed(1); | |
|
279 | cells_down[i].innerHTML = antenna_downvalues[7][i-47].toFixed(1); | |
|
280 | cellstx_up[i].innerHTML = tx_upvalues[7][i-47]; | |
|
281 | cellstx_down[i].innerHTML = tx_downvalues[7][i-47]; | |
|
282 | cellsrx_up[i].innerHTML = rx_upvalues[7][i-47]; | |
|
283 | cellsrx_down[i].innerHTML = rx_downvalues[7][i-47]; | |
|
284 | } | |
|
285 | else if ((i > 42) && (i<47)) { | |
|
286 | cells_up[i].innerHTML = antenna_upvalues[6][i-43].toFixed(1); | |
|
287 | cells_down[i].innerHTML = antenna_downvalues[6][i-43].toFixed(1); | |
|
288 | cellstx_up[i].innerHTML = tx_upvalues[6][i-43]; | |
|
289 | cellstx_down[i].innerHTML = tx_downvalues[6][i-43]; | |
|
290 | cellsrx_up[i].innerHTML = rx_upvalues[6][i-43]; | |
|
291 | cellsrx_down[i].innerHTML = rx_downvalues[6][i-43]; | |
|
292 | } | |
|
293 | else if ((i > 38) && (i<43)) { | |
|
294 | cells_up[i].innerHTML = antenna_upvalues[5][i-39].toFixed(1); | |
|
295 | cells_down[i].innerHTML = antenna_downvalues[5][i-39].toFixed(1); | |
|
296 | cellstx_up[i].innerHTML = tx_upvalues[5][i-39]; | |
|
297 | cellstx_down[i].innerHTML = tx_downvalues[5][i-39]; | |
|
298 | cellsrx_up[i].innerHTML = rx_upvalues[5][i-39]; | |
|
299 | cellsrx_down[i].innerHTML = rx_downvalues[5][i-39]; | |
|
300 | } | |
|
301 | else if (i < 39) { | |
|
302 | cells_up[i].innerHTML = antenna_upvalues[4][i-35].toFixed(1); | |
|
303 | cells_down[i].innerHTML = antenna_downvalues[4][i-35].toFixed(1); | |
|
304 | cellstx_up[i].innerHTML = tx_upvalues[4][i-35]; | |
|
305 | cellstx_down[i].innerHTML = tx_downvalues[4][i-35]; | |
|
306 | cellsrx_up[i].innerHTML = rx_upvalues[4][i-35]; | |
|
307 | cellsrx_down[i].innerHTML = rx_downvalues[4][i-35]; | |
|
308 | } | |
|
309 | } | |
|
310 | ||
|
311 | for (var i = 52, len = 68; i < len; i++) { | |
|
312 | if ((i > 63) && (i<68)) { | |
|
313 | cells_up[i].innerHTML = antenna_upvalues[7][i-60].toFixed(1); | |
|
314 | cells_down[i].innerHTML = antenna_downvalues[7][i-60].toFixed(1); | |
|
315 | cellstx_up[i].innerHTML = tx_upvalues[7][i-60]; | |
|
316 | cellstx_down[i].innerHTML = tx_downvalues[7][i-60]; | |
|
317 | cellsrx_up[i].innerHTML = rx_upvalues[7][i-60]; | |
|
318 | cellsrx_down[i].innerHTML = rx_downvalues[7][i-60]; | |
|
319 | } | |
|
320 | else if ((i > 59) && (i<64)) { | |
|
321 | cells_up[i].innerHTML = antenna_upvalues[6][i-56].toFixed(1); | |
|
322 | cells_down[i].innerHTML = antenna_downvalues[6][i-56].toFixed(1); | |
|
323 | cellstx_up[i].innerHTML = tx_upvalues[6][i-56]; | |
|
324 | cellstx_down[i].innerHTML = tx_downvalues[6][i-56]; | |
|
325 | cellsrx_up[i].innerHTML = rx_upvalues[6][i-56]; | |
|
326 | cellsrx_down[i].innerHTML = rx_downvalues[6][i-56]; | |
|
327 | } | |
|
328 | else if ((i > 55) && (i<60)) { | |
|
329 | cells_up[i].innerHTML = antenna_upvalues[5][i-52].toFixed(1); | |
|
330 | cells_down[i].innerHTML = antenna_downvalues[5][i-52].toFixed(1); | |
|
331 | cellstx_up[i].innerHTML = tx_upvalues[5][i-52]; | |
|
332 | cellstx_down[i].innerHTML = tx_downvalues[5][i-52]; | |
|
333 | cellsrx_up[i].innerHTML = rx_upvalues[5][i-52]; | |
|
334 | cellsrx_down[i].innerHTML = rx_downvalues[5][i-52]; | |
|
335 | } | |
|
336 | else if (i < 56) { | |
|
337 | cells_up[i].innerHTML = antenna_upvalues[4][i-48].toFixed(1); | |
|
338 | cells_down[i].innerHTML = antenna_downvalues[4][i-48].toFixed(1); | |
|
339 | cellstx_up[i].innerHTML = tx_upvalues[4][i-48]; | |
|
340 | cellstx_down[i].innerHTML = tx_downvalues[4][i-48]; | |
|
341 | cellsrx_up[i].innerHTML = rx_upvalues[4][i-48]; | |
|
342 | cellsrx_down[i].innerHTML = rx_downvalues[4][i-48]; | |
|
343 | } | |
|
344 | } | |
|
345 | ||
|
346 | var up_ues = document.getElementById('up_ues'); | |
|
347 | up_ues.innerHTML = "{{beam.get_up_ues}}"; | |
|
348 | var down_ues = document.getElementById('down_ues'); | |
|
349 | down_ues.innerHTML = "{{beam.get_down_ues}}"; | |
|
350 | ||
|
351 | }); | |
|
352 | ||
|
353 | {% endfor %} | |
|
354 | ||
|
355 | }); | |
|
356 | </script> | |
|
357 | ||
|
358 | 170 | |
|
359 | 171 | <div id="UP" class="panel-group"> |
|
360 | 172 | <div class="panel panel-default"> |
@@ -367,68 +179,36 $(document).ready(function() { | |||
|
367 | 179 | <tr> |
|
368 | 180 | <td> North Quarter |
|
369 | 181 | <table class="north_quarter"> |
|
370 | <tr> | |
|
371 | <td>{{abs_beams.0.get_upvalues.0}}</td> <td>{{abs_beams.0.get_upvalues.1}}</td> <td>{{abs_beams.0.get_upvalues.2}}</td> <td>{{abs_beams.0.get_upvalues.3}}</td> | |
|
372 | </tr> | |
|
373 | <tr> | |
|
374 | <td>{{abs_beams.0.get_upvalues.8}}</td> <td>{{abs_beams.0.get_upvalues.9}}</td> <td>{{abs_beams.0.get_upvalues.10}}</td> <td>{{abs_beams.0.get_upvalues.11}}</td> | |
|
375 | </tr> | |
|
376 | <tr> | |
|
377 | <td>{{abs_beams.0.get_upvalues.16}}</td> <td>{{abs_beams.0.get_upvalues.17}}</td> <td>{{abs_beams.0.get_upvalues.18}}</td> <td>{{abs_beams.0.get_upvalues.19}}</td> | |
|
378 | </tr> | |
|
379 | <tr> | |
|
380 | <td>{{abs_beams.0.get_upvalues.24}}</td> <td>{{abs_beams.0.get_upvalues.25}}</td> <td>{{abs_beams.0.get_upvalues.26}}</td> <td>{{abs_beams.0.get_upvalues.27}}</td> | |
|
381 | </tr> | |
|
182 | <tr> <td>{{beam.get_upvalues.0}}</td> <td>{{beam.get_upvalues.1}}</td> <td>{{beam.get_upvalues.2}}</td> <td>{{beam.get_upvalues.3}}</td> </tr> | |
|
183 | <tr> <td>{{beam.get_upvalues.8}}</td> <td>{{beam.get_upvalues.9}}</td> <td>{{beam.get_upvalues.10}}</td> <td>{{beam.get_upvalues.11}}</td> </tr> | |
|
184 | <tr> <td>{{beam.get_upvalues.16}}</td> <td>{{beam.get_upvalues.17}}</td> <td>{{beam.get_upvalues.18}}</td> <td>{{beam.get_upvalues.19}}</td> </tr> | |
|
185 | <tr> <td>{{beam.get_upvalues.24}}</td> <td>{{beam.get_upvalues.25}}</td> <td>{{beam.get_upvalues.26}}</td> <td>{{beam.get_upvalues.27}}</td> </tr> | |
|
382 | 186 | </table> |
|
383 | 187 | </td> |
|
384 | 188 | <td> East Quarter |
|
385 | 189 | <table class="east_quarter"> |
|
386 | <tr> | |
|
387 | <td>{{abs_beams.0.get_upvalues.4}}</td> <td>{{abs_beams.0.get_upvalues.5}}</td> <td>{{abs_beams.0.get_upvalues.6}}</td> <td>{{abs_beams.0.get_upvalues.7}}</td> | |
|
388 | </tr> | |
|
389 | <tr> | |
|
390 | <td>{{abs_beams.0.get_upvalues.12}}</td> <td>{{abs_beams.0.get_upvalues.13}}</td> <td>{{abs_beams.0.get_upvalues.14}}</td> <td>{{abs_beams.0.get_upvalues.15}}</td> | |
|
391 | </tr> | |
|
392 | <tr> | |
|
393 | <td>{{abs_beams.0.get_upvalues.20}}</td> <td>{{abs_beams.0.get_upvalues.21}}</td> <td>{{abs_beams.0.get_upvalues.22}}</td> <td>{{abs_beams.0.get_upvalues.23}}</td> | |
|
394 | </tr> | |
|
395 | <tr> | |
|
396 | <td>{{abs_beams.0.get_upvalues.28}}</td> <td>{{abs_beams.0.get_upvalues.29}}</td> <td>{{abs_beams.0.get_upvalues.30}}</td> <td>{{abs_beams.0.get_upvalues.31}}</td> | |
|
397 | </tr> | |
|
190 | <tr> <td>{{beam.get_upvalues.4}}</td> <td>{{beam.get_upvalues.5}}</td> <td>{{beam.get_upvalues.6}}</td> <td>{{beam.get_upvalues.7}}</td> </tr> | |
|
191 | <tr> <td>{{beam.get_upvalues.12}}</td> <td>{{beam.get_upvalues.13}}</td> <td>{{beam.get_upvalues.14}}</td> <td>{{beam.get_upvalues.15}}</td> </tr> | |
|
192 | <tr> <td>{{beam.get_upvalues.20}}</td> <td>{{beam.get_upvalues.21}}</td> <td>{{beam.get_upvalues.22}}</td> <td>{{beam.get_upvalues.23}}</td> </tr> | |
|
193 | <tr> <td>{{beam.get_upvalues.28}}</td> <td>{{beam.get_upvalues.29}}</td> <td>{{beam.get_upvalues.30}}</td> <td>{{beam.get_upvalues.31}}</td> </tr> | |
|
398 | 194 | </table> |
|
399 | 195 | </td> |
|
400 | 196 | </tr> |
|
401 | 197 | <tr> |
|
402 | 198 | <td> West Quarter |
|
403 | 199 | <table class="west_quarter"> |
|
404 | <tr> | |
|
405 | <td>{{abs_beams.0.get_upvalues.32}}</td> <td>{{abs_beams.0.get_upvalues.33}}</td> <td>{{abs_beams.0.get_upvalues.34}}</td> <td>{{abs_beams.0.get_upvalues.35}}</td> | |
|
406 | </tr> | |
|
407 | <tr> | |
|
408 | <td>{{abs_beams.0.get_upvalues.40}}</td> <td>{{abs_beams.0.get_upvalues.41}}</td> <td>{{abs_beams.0.get_upvalues.42}}</td> <td>{{abs_beams.0.get_upvalues.43}}</td> | |
|
409 | </tr> | |
|
410 | <tr> | |
|
411 | <td>{{abs_beams.0.get_upvalues.48}}</td> <td>{{abs_beams.0.get_upvalues.49}}</td> <td>{{abs_beams.0.get_upvalues.50}}</td> <td>{{abs_beams.0.get_upvalues.51}}</td> | |
|
412 | </tr> | |
|
413 | <tr> | |
|
414 | <td>{{abs_beams.0.get_upvalues.56}}</td> <td>{{abs_beams.0.get_upvalues.57}}</td> <td>{{abs_beams.0.get_upvalues.58}}</td> <td>{{abs_beams.0.get_upvalues.59}}</td> | |
|
415 | </tr> | |
|
200 | <tr> <td>{{beam.get_upvalues.32}}</td> <td>{{beam.get_upvalues.33}}</td> <td>{{beam.get_upvalues.34}}</td> <td>{{beam.get_upvalues.35}}</td> </tr> | |
|
201 | <tr> <td>{{beam.get_upvalues.40}}</td> <td>{{beam.get_upvalues.41}}</td> <td>{{beam.get_upvalues.42}}</td> <td>{{beam.get_upvalues.43}}</td> </tr> | |
|
202 | <tr> <td>{{beam.get_upvalues.48}}</td> <td>{{beam.get_upvalues.49}}</td> <td>{{beam.get_upvalues.50}}</td> <td>{{beam.get_upvalues.51}}</td> </tr> | |
|
203 | <tr> <td>{{beam.get_upvalues.56}}</td> <td>{{beam.get_upvalues.57}}</td> <td>{{beam.get_upvalues.58}}</td> <td>{{beam.get_upvalues.59}}</td> </tr> | |
|
416 | 204 | </table> |
|
417 | 205 | </td> |
|
418 | 206 | <td> South Quarter |
|
419 | 207 | <table class="south_quarter"> |
|
420 | <tr> | |
|
421 | <td>{{abs_beams.0.get_upvalues.36}}</td> <td>{{abs_beams.0.get_upvalues.37}}</td> <td>{{abs_beams.0.get_upvalues.38}}</td> <td>{{abs_beams.0.get_upvalues.39}}</td> | |
|
422 | </tr> | |
|
423 | <tr> | |
|
424 | <td>{{abs_beams.0.get_upvalues.44}}</td> <td>{{abs_beams.0.get_upvalues.45}}</td> <td>{{abs_beams.0.get_upvalues.46}}</td> <td>{{abs_beams.0.get_upvalues.47}}</td> | |
|
425 | </tr> | |
|
426 | <tr> | |
|
427 | <td>{{abs_beams.0.get_upvalues.52}}</td> <td>{{abs_beams.0.get_upvalues.53}}</td> <td>{{abs_beams.0.get_upvalues.54}}</td> <td>{{abs_beams.0.get_upvalues.55}}</td> | |
|
428 | </tr> | |
|
429 | <tr> | |
|
430 | <td>{{abs_beams.0.get_upvalues.60}}</td> <td>{{abs_beams.0.get_upvalues.61}}</td> <td>{{abs_beams.0.get_upvalues.62}}</td> <td>{{abs_beams.0.get_upvalues.63}}</td> | |
|
431 | </tr> | |
|
208 | <tr> <td>{{beam.get_upvalues.36}}</td> <td>{{beam.get_upvalues.37}}</td> <td>{{beam.get_upvalues.38}}</td> <td>{{beam.get_upvalues.39}}</td> </tr> | |
|
209 | <tr> <td>{{beam.get_upvalues.44}}</td> <td>{{beam.get_upvalues.45}}</td> <td>{{beam.get_upvalues.46}}</td> <td>{{beam.get_upvalues.47}}</td> </tr> | |
|
210 | <tr> <td>{{beam.get_upvalues.52}}</td> <td>{{beam.get_upvalues.53}}</td> <td>{{beam.get_upvalues.54}}</td> <td>{{beam.get_upvalues.55}}</td> </tr> | |
|
211 | <tr> <td>{{beam.get_upvalues.60}}</td> <td>{{beam.get_upvalues.61}}</td> <td>{{beam.get_upvalues.62}}</td> <td>{{beam.get_upvalues.63}}</td> </tr> | |
|
432 | 212 | </table> |
|
433 | 213 | </td> |
|
434 | 214 | </tr> |
@@ -446,32 +226,32 $(document).ready(function() { | |||
|
446 | 226 | <td> North Quarter |
|
447 | 227 | <table align="center" class="north_quarter"> |
|
448 | 228 | <tr> |
|
449 |
<td>{{ |
|
|
229 | <td>{{beam.get_tx.up.0.0}}</td> <td>{{beam.get_tx.up.0.1}}</td> <td>{{beam.get_tx.up.0.2}}</td> <td>{{beam.get_tx.up.0.3}}</td> | |
|
450 | 230 | </tr> |
|
451 | 231 | <tr> |
|
452 |
<td>{{ |
|
|
232 | <td>{{beam.get_tx.up.1.0}}</td> <td>{{beam.get_tx.up.1.1}}</td> <td>{{beam.get_tx.up.1.2}}</td> <td>{{beam.get_tx.up.1.3}}</td> | |
|
453 | 233 | </tr> |
|
454 | 234 | <tr> |
|
455 |
<td>{{ |
|
|
235 | <td>{{beam.get_tx.up.2.0}}</td> <td>{{beam.get_tx.up.2.1}}</td> <td>{{beam.get_tx.up.2.2}}</td> <td>{{beam.get_tx.up.2.3}}</td> | |
|
456 | 236 | </tr> |
|
457 | 237 | <tr> |
|
458 |
<td>{{ |
|
|
238 | <td>{{beam.get_tx.up.3.0}}</td> <td>{{beam.get_tx.up.3.1}}</td> <td>{{beam.get_tx.up.3.2}}</td> <td>{{beam.get_tx.up.3.3}}</td> | |
|
459 | 239 | </tr> |
|
460 | 240 | </table> |
|
461 | 241 | </td> |
|
462 | 242 | <td> East Quarter |
|
463 | 243 | <table align="center" class="east_quarter"> |
|
464 | 244 | <tr> |
|
465 |
<td>{{ |
|
|
245 | <td>{{beam.get_tx.up.0.4}}</td> <td>{{beam.get_tx.up.0.5}}</td> <td>{{beam.get_tx.up.0.6}}</td> <td>{{beam.get_tx.up.0.7}}</td> | |
|
466 | 246 | </tr> |
|
467 | 247 | <tr> |
|
468 |
<td>{{ |
|
|
248 | <td>{{beam.get_tx.up.1.4}}</td> <td>{{beam.get_tx.up.1.5}}</td> <td>{{beam.get_tx.up.1.6}}</td> <td>{{beam.get_tx.up.1.7}}</td> | |
|
469 | 249 | </tr> |
|
470 | 250 | <tr> |
|
471 |
<td>{{ |
|
|
251 | <td>{{beam.get_tx.up.2.4}}</td> <td>{{beam.get_tx.up.2.5}}</td> <td>{{beam.get_tx.up.2.6}}</td> <td>{{beam.get_tx.up.2.7}}</td> | |
|
472 | 252 | </tr> |
|
473 | 253 | <tr> |
|
474 |
<td>{{ |
|
|
254 | <td>{{beam.get_tx.up.3.4}}</td> <td>{{beam.get_tx.up.3.5}}</td> <td>{{beam.get_tx.up.3.6}}</td> <td>{{beam.get_tx.up.3.7}}</td> | |
|
475 | 255 | </tr> |
|
476 | 256 | </table> |
|
477 | 257 | </td> |
@@ -480,32 +260,32 $(document).ready(function() { | |||
|
480 | 260 | <td> West Quarter |
|
481 | 261 | <table align="center" class="west_quarter"> |
|
482 | 262 | <tr> |
|
483 |
<td>{{ |
|
|
263 | <td>{{beam.get_tx.up.4.0}}</td> <td>{{beam.get_tx.up.4.1}}</td> <td>{{beam.get_tx.up.4.2}}</td> <td>{{beam.get_tx.up.4.3}}</td> | |
|
484 | 264 | </tr> |
|
485 | 265 | <tr> |
|
486 |
<td>{{ |
|
|
266 | <td>{{beam.get_tx.up.5.0}}</td> <td>{{beam.get_tx.up.5.1}}</td> <td>{{beam.get_tx.up.5.2}}</td> <td>{{beam.get_tx.up.5.3}}</td> | |
|
487 | 267 | </tr> |
|
488 | 268 | <tr> |
|
489 |
<td>{{ |
|
|
269 | <td>{{beam.get_tx.up.6.0}}</td> <td>{{beam.get_tx.up.6.1}}</td> <td>{{beam.get_tx.up.6.2}}</td> <td>{{beam.get_tx.up.6.3}}</td> | |
|
490 | 270 | </tr> |
|
491 | 271 | <tr> |
|
492 |
<td>{{ |
|
|
272 | <td>{{beam.get_tx.up.7.0}}</td> <td>{{beam.get_tx.up.7.1}}</td> <td>{{beam.get_tx.up.7.2}}</td> <td>{{beam.get_tx.up.7.3}}</td> | |
|
493 | 273 | </tr> |
|
494 | 274 | </table> |
|
495 | 275 | </td> |
|
496 | 276 | <td> South Quarter |
|
497 | 277 | <table align="center" class="south_quarter"> |
|
498 | 278 | <tr> |
|
499 |
<td>{{ |
|
|
279 | <td>{{beam.get_tx.up.4.4}}</td> <td>{{beam.get_tx.up.4.5}}</td> <td>{{beam.get_tx.up.4.6}}</td> <td>{{beam.get_tx.up.4.7}}</td> | |
|
500 | 280 | </tr> |
|
501 | 281 | <tr> |
|
502 |
<td>{{ |
|
|
282 | <td>{{beam.get_tx.up.5.4}}</td> <td>{{beam.get_tx.up.5.5}}</td> <td>{{beam.get_tx.up.5.6}}</td> <td>{{beam.get_tx.up.5.7}}</td> | |
|
503 | 283 | </tr> |
|
504 | 284 | <tr> |
|
505 |
<td>{{ |
|
|
285 | <td>{{beam.get_tx.up.6.4}}</td> <td>{{beam.get_tx.up.6.5}}</td> <td>{{beam.get_tx.up.6.6}}</td> <td>{{beam.get_tx.up.6.7}}</td> | |
|
506 | 286 | </tr> |
|
507 | 287 | <tr> |
|
508 |
<td>{{ |
|
|
288 | <td>{{beam.get_tx.up.7.4}}</td> <td>{{beam.get_tx.up.7.5}}</td> <td>{{beam.get_tx.up.7.6}}</td> <td>{{beam.get_tx.up.7.7}}</td> | |
|
509 | 289 | </tr> |
|
510 | 290 | </table> |
|
511 | 291 | </td> |
@@ -524,32 +304,32 $(document).ready(function() { | |||
|
524 | 304 | <td> North Quarter |
|
525 | 305 | <table align="center" class="north_quarter"> |
|
526 | 306 | <tr> |
|
527 |
<td>{{ |
|
|
307 | <td>{{beam.get_rx.up.0.0}}</td> <td>{{beam.get_rx.up.0.1}}</td> <td>{{beam.get_rx.up.0.2}}</td> <td>{{beam.get_rx.up.0.3}}</td> | |
|
528 | 308 | </tr> |
|
529 | 309 | <tr> |
|
530 |
<td>{{ |
|
|
310 | <td>{{beam.get_rx.up.1.0}}</td> <td>{{beam.get_rx.up.1.1}}</td> <td>{{beam.get_rx.up.1.2}}</td> <td>{{beam.get_rx.up.1.3}}</td> | |
|
531 | 311 | </tr> |
|
532 | 312 | <tr> |
|
533 |
<td>{{ |
|
|
313 | <td>{{beam.get_rx.up.2.0}}</td> <td>{{beam.get_rx.up.2.1}}</td> <td>{{beam.get_rx.up.2.2}}</td> <td>{{beam.get_rx.up.2.3}}</td> | |
|
534 | 314 | </tr> |
|
535 | 315 | <tr> |
|
536 |
<td>{{ |
|
|
316 | <td>{{beam.get_rx.up.3.0}}</td> <td>{{beam.get_rx.up.3.1}}</td> <td>{{beam.get_rx.up.3.2}}</td> <td>{{beam.get_rx.up.3.3}}</td> | |
|
537 | 317 | </tr> |
|
538 | 318 | </table> |
|
539 | 319 | </td> |
|
540 | 320 | <td> East Quarter |
|
541 | 321 | <table align="center" class="east_quarter"> |
|
542 | 322 | <tr> |
|
543 |
<td>{{ |
|
|
323 | <td>{{beam.get_rx.up.0.4}}</td> <td>{{beam.get_rx.up.0.5}}</td> <td>{{beam.get_rx.up.0.6}}</td> <td>{{beam.get_rx.up.0.7}}</td> | |
|
544 | 324 | </tr> |
|
545 | 325 | <tr> |
|
546 |
<td>{{ |
|
|
326 | <td>{{beam.get_rx.up.1.4}}</td> <td>{{beam.get_rx.up.1.5}}</td> <td>{{beam.get_rx.up.1.6}}</td> <td>{{beam.get_rx.up.1.7}}</td> | |
|
547 | 327 | </tr> |
|
548 | 328 | <tr> |
|
549 |
<td>{{ |
|
|
329 | <td>{{beam.get_rx.up.2.4}}</td> <td>{{beam.get_rx.up.2.5}}</td> <td>{{beam.get_rx.up.2.6}}</td> <td>{{beam.get_rx.up.2.7}}</td> | |
|
550 | 330 | </tr> |
|
551 | 331 | <tr> |
|
552 |
<td>{{ |
|
|
332 | <td>{{beam.get_rx.up.3.4}}</td> <td>{{beam.get_rx.up.3.5}}</td> <td>{{beam.get_rx.up.3.6}}</td> <td>{{beam.get_rx.up.3.7}}</td> | |
|
553 | 333 | </tr> |
|
554 | 334 | </table> |
|
555 | 335 | </td> |
@@ -558,32 +338,32 $(document).ready(function() { | |||
|
558 | 338 | <td> West Quarter |
|
559 | 339 | <table align="center" class="west_quarter"> |
|
560 | 340 | <tr> |
|
561 |
<td>{{ |
|
|
341 | <td>{{beam.get_rx.up.4.0}}</td> <td>{{beam.get_rx.up.4.1}}</td> <td>{{beam.get_rx.up.4.2}}</td> <td>{{beam.get_rx.up.4.3}}</td> | |
|
562 | 342 | </tr> |
|
563 | 343 | <tr> |
|
564 |
<td>{{ |
|
|
344 | <td>{{beam.get_rx.up.5.0}}</td> <td>{{beam.get_rx.up.5.1}}</td> <td>{{beam.get_rx.up.5.2}}</td> <td>{{beam.get_rx.up.5.3}}</td> | |
|
565 | 345 | </tr> |
|
566 | 346 | <tr> |
|
567 |
<td>{{ |
|
|
347 | <td>{{beam.get_rx.up.6.0}}</td> <td>{{beam.get_rx.up.6.1}}</td> <td>{{beam.get_rx.up.6.2}}</td> <td>{{beam.get_rx.up.6.3}}</td> | |
|
568 | 348 | </tr> |
|
569 | 349 | <tr> |
|
570 |
<td>{{ |
|
|
350 | <td>{{beam.get_rx.up.7.0}}</td> <td>{{beam.get_rx.up.7.1}}</td> <td>{{beam.get_rx.up.7.2}}</td> <td>{{beam.get_rx.up.7.3}}</td> | |
|
571 | 351 | </tr> |
|
572 | 352 | </table> |
|
573 | 353 | </td> |
|
574 | 354 | <td> South Quarter |
|
575 | 355 | <table align="center" class="south_quarter"> |
|
576 | 356 | <tr> |
|
577 |
<td>{{ |
|
|
357 | <td>{{beam.get_rx.up.4.4}}</td> <td>{{beam.get_rx.up.4.5}}</td> <td>{{beam.get_rx.up.4.6}}</td> <td>{{beam.get_rx.up.4.7}}</td> | |
|
578 | 358 | </tr> |
|
579 | 359 | <tr> |
|
580 |
<td>{{ |
|
|
360 | <td>{{beam.get_rx.up.5.4}}</td> <td>{{beam.get_rx.up.5.5}}</td> <td>{{beam.get_rx.up.5.6}}</td> <td>{{beam.get_rx.up.5.7}}</td> | |
|
581 | 361 | </tr> |
|
582 | 362 | <tr> |
|
583 |
<td>{{ |
|
|
363 | <td>{{beam.get_rx.up.6.4}}</td> <td>{{beam.get_rx.up.6.5}}</td> <td>{{beam.get_rx.up.6.6}}</td> <td>{{beam.get_rx.up.6.7}}</td> | |
|
584 | 364 | </tr> |
|
585 | 365 | <tr> |
|
586 |
<td>{{ |
|
|
366 | <td>{{beam.get_rx.up.7.4}}</td> <td>{{beam.get_rx.up.7.5}}</td> <td>{{beam.get_rx.up.7.6}}</td> <td>{{beam.get_rx.up.7.7}}</td> | |
|
587 | 367 | </tr> |
|
588 | 368 | </table> |
|
589 | 369 | </td> |
@@ -594,17 +374,17 $(document).ready(function() { | |||
|
594 | 374 | </table> |
|
595 | 375 | |
|
596 | 376 | {% if not edit %} |
|
597 | {% include "abs_pattern_img.html" %} | |
|
377 | {% include "abs_uppattern_img.html" %} | |
|
598 | 378 | {% endif %} |
|
599 | 379 | |
|
600 | 380 | <br> |
|
601 | 381 | |
|
602 | 382 | <div id="up_ues" style="display: inline-block"> |
|
603 |
Ues: {{ |
|
|
383 | Ues: {{beam.get_up_ues}} | |
|
604 | 384 | </div> |
|
605 | 385 | |
|
606 | 386 | <div style="margin-left: 70px; display: inline-block"> |
|
607 |
<input type="checkbox" id="up_onlyrx" {% if |
|
|
387 | <input type="checkbox" id="up_onlyrx" {% if beam.get_up_onlyrx == True %} checked="True" {% endif %} disabled> | |
|
608 | 388 | Only RX |
|
609 | 389 | </input> |
|
610 | 390 | </div> |
@@ -624,68 +404,36 $(document).ready(function() { | |||
|
624 | 404 | <tr> |
|
625 | 405 | <td> <b>North Quarter</b> |
|
626 | 406 | <table class="north_quarter"> |
|
627 | <tr> | |
|
628 | <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td> | |
|
629 | </tr> | |
|
630 | <tr> | |
|
631 | <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td> | |
|
632 | </tr> | |
|
633 | <tr> | |
|
634 | <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td> | |
|
635 | </tr> | |
|
636 | <tr> | |
|
637 | <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td> | |
|
638 | </tr> | |
|
407 | <tr> <td>{{beam.get_downvalues.0}}</td> <td>{{beam.get_downvalues.1}}</td> <td>{{beam.get_downvalues.2}}</td> <td>{{beam.get_downvalues.3}}</td> </tr> | |
|
408 | <tr> <td>{{beam.get_downvalues.8}}</td> <td>{{beam.get_downvalues.9}}</td> <td>{{beam.get_downvalues.10}}</td> <td>{{beam.get_downvalues.11}}</td> </tr> | |
|
409 | <tr> <td>{{beam.get_downvalues.16}}</td> <td>{{beam.get_downvalues.17}}</td> <td>{{beam.get_downvalues.18}}</td> <td>{{beam.get_downvalues.19}}</td> </tr> | |
|
410 | <tr> <td>{{beam.get_downvalues.24}}</td> <td>{{beam.get_downvalues.25}}</td> <td>{{beam.get_downvalues.26}}</td> <td>{{beam.get_downvalues.27}}</td> </tr> | |
|
639 | 411 | </table> |
|
640 | 412 | </td> |
|
641 | 413 | <td> <b>East Quarter</b> |
|
642 | 414 | <table class="east_quarter"> |
|
643 | <tr> | |
|
644 | <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td> | |
|
645 | </tr> | |
|
646 | <tr> | |
|
647 | <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td> | |
|
648 | </tr> | |
|
649 | <tr> | |
|
650 | <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td> | |
|
651 | </tr> | |
|
652 | <tr> | |
|
653 | <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td> | |
|
654 | </tr> | |
|
415 | <tr> <td>{{beam.get_downvalues.4}}</td> <td>{{beam.get_downvalues.5}}</td> <td>{{beam.get_downvalues.6}}</td> <td>{{beam.get_downvalues.7}}</td> </tr> | |
|
416 | <tr> <td>{{beam.get_downvalues.12}}</td> <td>{{beam.get_downvalues.13}}</td> <td>{{beam.get_downvalues.14}}</td> <td>{{beam.get_downvalues.15}}</td> </tr> | |
|
417 | <tr> <td>{{beam.get_downvalues.20}}</td> <td>{{beam.get_downvalues.21}}</td> <td>{{beam.get_downvalues.22}}</td> <td>{{beam.get_downvalues.23}}</td> </tr> | |
|
418 | <tr> <td>{{beam.get_downvalues.28}}</td> <td>{{beam.get_downvalues.29}}</td> <td>{{beam.get_downvalues.30}}</td> <td>{{beam.get_downvalues.31}}</td> </tr> | |
|
655 | 419 | </table> |
|
656 | 420 | </td> |
|
657 | 421 | </tr> |
|
658 | 422 | <tr> |
|
659 | 423 | <td> <b>West Quarter</b> |
|
660 | 424 | <table class="west_quarter"> |
|
661 | <tr> | |
|
662 | <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td> | |
|
663 | </tr> | |
|
664 | <tr> | |
|
665 | <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td> | |
|
666 | </tr> | |
|
667 | <tr> | |
|
668 | <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td> | |
|
669 | </tr> | |
|
670 | <tr> | |
|
671 | <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td> | |
|
672 | </tr> | |
|
425 | <tr> <td>{{beam.get_downvalues.32}}</td> <td>{{beam.get_downvalues.33}}</td> <td>{{beam.get_downvalues.34}}</td> <td>{{beam.get_downvalues.35}}</td> </tr> | |
|
426 | <tr> <td>{{beam.get_downvalues.40}}</td> <td>{{beam.get_downvalues.41}}</td> <td>{{beam.get_downvalues.42}}</td> <td>{{beam.get_downvalues.43}}</td> </tr> | |
|
427 | <tr> <td>{{beam.get_downvalues.48}}</td> <td>{{beam.get_downvalues.49}}</td> <td>{{beam.get_downvalues.50}}</td> <td>{{beam.get_downvalues.51}}</td> </tr> | |
|
428 | <tr> <td>{{beam.get_downvalues.56}}</td> <td>{{beam.get_downvalues.57}}</td> <td>{{beam.get_downvalues.58}}</td> <td>{{beam.get_downvalues.59}}</td> </tr> | |
|
673 | 429 | </table> |
|
674 | 430 | </td> |
|
675 | 431 | <td> <b>South Quarter</b> |
|
676 | 432 | <table class="south_quarter"> |
|
677 | <tr> | |
|
678 | <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td> | |
|
679 | </tr> | |
|
680 | <tr> | |
|
681 | <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td> | |
|
682 | </tr> | |
|
683 | <tr> | |
|
684 | <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td> | |
|
685 | </tr> | |
|
686 | <tr> | |
|
687 | <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td> | |
|
688 | </tr> | |
|
433 | <tr> <td>{{beam.get_downvalues.36}}</td> <td>{{beam.get_downvalues.37}}</td> <td>{{beam.get_downvalues.38}}</td> <td>{{beam.get_downvalues.39}}</td> </tr> | |
|
434 | <tr> <td>{{beam.get_downvalues.44}}</td> <td>{{beam.get_downvalues.45}}</td> <td>{{beam.get_downvalues.46}}</td> <td>{{beam.get_downvalues.47}}</td> </tr> | |
|
435 | <tr> <td>{{beam.get_downvalues.52}}</td> <td>{{beam.get_downvalues.53}}</td> <td>{{beam.get_downvalues.54}}</td> <td>{{beam.get_downvalues.55}}</td> </tr> | |
|
436 | <tr> <td>{{beam.get_downvalues.60}}</td> <td>{{beam.get_downvalues.61}}</td> <td>{{beam.get_downvalues.62}}</td> <td>{{beam.get_downvalues.63}}</td> </tr> | |
|
689 | 437 | </table> |
|
690 | 438 | </td> |
|
691 | 439 | </tr> |
@@ -702,32 +450,32 $(document).ready(function() { | |||
|
702 | 450 | <td> <b>North Quarter</b> |
|
703 | 451 | <table align="center" class="north_quarter"> |
|
704 | 452 | <tr> |
|
705 |
<td>{{ |
|
|
453 | <td>{{beam.get_tx.down.0.0}}</td> <td>{{beam.get_tx.down.0.1}}</td> <td>{{beam.get_tx.down.0.2}}</td> <td>{{beam.get_tx.down.0.3}}</td> | |
|
706 | 454 | </tr> |
|
707 | 455 | <tr> |
|
708 |
<td>{{ |
|
|
456 | <td>{{beam.get_tx.down.1.0}}</td> <td>{{beam.get_tx.down.1.1}}</td> <td>{{beam.get_tx.down.1.2}}</td> <td>{{beam.get_tx.down.1.3}}</td> | |
|
709 | 457 | </tr> |
|
710 | 458 | <tr> |
|
711 |
<td>{{ |
|
|
459 | <td>{{beam.get_tx.down.2.0}}</td> <td>{{beam.get_tx.down.2.1}}</td> <td>{{beam.get_tx.down.2.2}}</td> <td>{{beam.get_tx.down.2.3}}</td> | |
|
712 | 460 | </tr> |
|
713 | 461 | <tr> |
|
714 |
<td>{{ |
|
|
462 | <td>{{beam.get_tx.down.3.0}}</td> <td>{{beam.get_tx.down.3.1}}</td> <td>{{beam.get_tx.down.3.2}}</td> <td>{{beam.get_tx.down.3.3}}</td> | |
|
715 | 463 | </tr> |
|
716 | 464 | </table> |
|
717 | 465 | </td> |
|
718 | 466 | <td> <b>East Quarter</b> |
|
719 | 467 | <table align="center" class="east_quarter"> |
|
720 | 468 | <tr> |
|
721 |
<td>{{ |
|
|
469 | <td>{{beam.get_tx.down.0.4}}</td> <td>{{beam.get_tx.down.0.5}}</td> <td>{{beam.get_tx.down.0.6}}</td> <td>{{beam.get_tx.down.0.7}}</td> | |
|
722 | 470 | </tr> |
|
723 | 471 | <tr> |
|
724 |
<td>{{ |
|
|
472 | <td>{{beam.get_tx.down.1.4}}</td> <td>{{beam.get_tx.down.1.5}}</td> <td>{{beam.get_tx.down.1.6}}</td> <td>{{beam.get_tx.down.1.7}}</td> | |
|
725 | 473 | </tr> |
|
726 | 474 | <tr> |
|
727 |
<td>{{ |
|
|
475 | <td>{{beam.get_tx.down.2.4}}</td> <td>{{beam.get_tx.down.2.5}}</td> <td>{{beam.get_tx.down.2.6}}</td> <td>{{beam.get_tx.down.2.7}}</td> | |
|
728 | 476 | </tr> |
|
729 | 477 | <tr> |
|
730 |
<td>{{ |
|
|
478 | <td>{{beam.get_tx.down.3.4}}</td> <td>{{beam.get_tx.down.3.5}}</td> <td>{{beam.get_tx.down.3.6}}</td> <td>{{beam.get_tx.down.3.7}}</td> | |
|
731 | 479 | </tr> |
|
732 | 480 | </table> |
|
733 | 481 | </td> |
@@ -736,32 +484,32 $(document).ready(function() { | |||
|
736 | 484 | <td> <b>West Quarter</b> |
|
737 | 485 | <table align="center" class="west_quarter"> |
|
738 | 486 | <tr> |
|
739 |
<td>{{ |
|
|
487 | <td>{{beam.get_tx.down.4.0}}</td> <td>{{beam.get_tx.down.4.1}}</td> <td>{{beam.get_tx.down.4.2}}</td> <td>{{beam.get_tx.down.4.3}}</td> | |
|
740 | 488 | </tr> |
|
741 | 489 | <tr> |
|
742 |
<td>{{ |
|
|
490 | <td>{{beam.get_tx.down.5.0}}</td> <td>{{beam.get_tx.down.5.1}}</td> <td>{{beam.get_tx.down.5.2}}</td> <td>{{beam.get_tx.down.5.3}}</td> | |
|
743 | 491 | </tr> |
|
744 | 492 | <tr> |
|
745 |
<td>{{ |
|
|
493 | <td>{{beam.get_tx.down.6.0}}</td> <td>{{beam.get_tx.down.6.1}}</td> <td>{{beam.get_tx.down.6.2}}</td> <td>{{beam.get_tx.down.6.3}}</td> | |
|
746 | 494 | </tr> |
|
747 | 495 | <tr> |
|
748 |
<td>{{ |
|
|
496 | <td>{{beam.get_tx.down.7.0}}</td> <td>{{beam.get_tx.down.7.1}}</td> <td>{{beam.get_tx.down.7.2}}</td> <td>{{beam.get_tx.down.7.3}}</td> | |
|
749 | 497 | </tr> |
|
750 | 498 | </table> |
|
751 | 499 | </td> |
|
752 | 500 | <td> <b>South Quarter</b> |
|
753 | 501 | <table align="center" class="south_quarter"> |
|
754 | 502 | <tr> |
|
755 |
<td>{{ |
|
|
503 | <td>{{beam.get_tx.down.4.4}}</td> <td>{{beam.get_tx.down.4.5}}</td> <td>{{beam.get_tx.down.4.6}}</td> <td>{{beam.get_tx.down.4.7}}</td> | |
|
756 | 504 | </tr> |
|
757 | 505 | <tr> |
|
758 |
<td>{{ |
|
|
506 | <td>{{beam.get_tx.down.5.4}}</td> <td>{{beam.get_tx.down.5.5}}</td> <td>{{beam.get_tx.down.5.6}}</td> <td>{{beam.get_tx.down.5.7}}</td> | |
|
759 | 507 | </tr> |
|
760 | 508 | <tr> |
|
761 |
<td>{{ |
|
|
509 | <td>{{beam.get_tx.down.6.4}}</td> <td>{{beam.get_tx.down.6.5}}</td> <td>{{beam.get_tx.down.6.6}}</td> <td>{{beam.get_tx.down.6.7}}</td> | |
|
762 | 510 | </tr> |
|
763 | 511 | <tr> |
|
764 |
<td>{{ |
|
|
512 | <td>{{beam.get_tx.down.7.4}}</td> <td>{{beam.get_tx.down.7.5}}</td> <td>{{beam.get_tx.down.7.6}}</td> <td>{{beam.get_tx.down.7.7}}</td> | |
|
765 | 513 | </tr> |
|
766 | 514 | </table> |
|
767 | 515 | </td> |
@@ -780,32 +528,32 $(document).ready(function() { | |||
|
780 | 528 | <td> <b>North Quarter</b> |
|
781 | 529 | <table align="center" class="north_quarter"> |
|
782 | 530 | <tr> |
|
783 |
<td>{{ |
|
|
531 | <td>{{beam.get_rx.down.0.0}}</td> <td>{{beam.get_rx.down.0.1}}</td> <td>{{beam.get_rx.down.0.2}}</td> <td>{{beam.get_rx.down.0.3}}</td> | |
|
784 | 532 | </tr> |
|
785 | 533 | <tr> |
|
786 |
<td>{{ |
|
|
534 | <td>{{beam.get_rx.down.1.0}}</td> <td>{{beam.get_rx.down.1.1}}</td> <td>{{beam.get_rx.down.1.2}}</td> <td>{{beam.get_rx.down.1.3}}</td> | |
|
787 | 535 | </tr> |
|
788 | 536 | <tr> |
|
789 |
<td>{{ |
|
|
537 | <td>{{beam.get_rx.down.2.0}}</td> <td>{{beam.get_rx.down.2.1}}</td> <td>{{beam.get_rx.down.2.2}}</td> <td>{{beam.get_rx.down.2.3}}</td> | |
|
790 | 538 | </tr> |
|
791 | 539 | <tr> |
|
792 |
<td>{{ |
|
|
540 | <td>{{beam.get_rx.down.3.0}}</td> <td>{{beam.get_rx.down.3.1}}</td> <td>{{beam.get_rx.down.3.2}}</td> <td>{{beam.get_rx.down.3.3}}</td> | |
|
793 | 541 | </tr> |
|
794 | 542 | </table> |
|
795 | 543 | </td> |
|
796 | 544 | <td> <b>East Quarter</b> |
|
797 | 545 | <table align="center" class="east_quarter"> |
|
798 | 546 | <tr> |
|
799 |
<td>{{ |
|
|
547 | <td>{{beam.get_rx.down.0.4}}</td> <td>{{beam.get_rx.down.0.5}}</td> <td>{{beam.get_rx.down.0.6}}</td> <td>{{beam.get_rx.down.0.7}}</td> | |
|
800 | 548 | </tr> |
|
801 | 549 | <tr> |
|
802 |
<td>{{ |
|
|
550 | <td>{{beam.get_rx.down.1.4}}</td> <td>{{beam.get_rx.down.1.5}}</td> <td>{{beam.get_rx.down.1.6}}</td> <td>{{beam.get_rx.down.1.7}}</td> | |
|
803 | 551 | </tr> |
|
804 | 552 | <tr> |
|
805 |
<td>{{ |
|
|
553 | <td>{{beam.get_rx.down.2.4}}</td> <td>{{beam.get_rx.down.2.5}}</td> <td>{{beam.get_rx.down.2.6}}</td> <td>{{beam.get_rx.down.2.7}}</td> | |
|
806 | 554 | </tr> |
|
807 | 555 | <tr> |
|
808 |
<td>{{ |
|
|
556 | <td>{{beam.get_rx.down.3.4}}</td> <td>{{beam.get_rx.down.3.5}}</td> <td>{{beam.get_rx.down.3.6}}</td> <td>{{beam.get_rx.down.3.7}}</td> | |
|
809 | 557 | </tr> |
|
810 | 558 | </table> |
|
811 | 559 | </td> |
@@ -814,32 +562,32 $(document).ready(function() { | |||
|
814 | 562 | <td> <b>West Quarter</b> |
|
815 | 563 | <table align="center" class="west_quarter"> |
|
816 | 564 | <tr> |
|
817 |
<td>{{ |
|
|
565 | <td>{{beam.get_rx.down.4.0}}</td> <td>{{beam.get_rx.down.4.1}}</td> <td>{{beam.get_rx.down.4.2}}</td> <td>{{beam.get_rx.down.4.3}}</td> | |
|
818 | 566 | </tr> |
|
819 | 567 | <tr> |
|
820 |
<td>{{ |
|
|
568 | <td>{{beam.get_rx.down.5.0}}</td> <td>{{beam.get_rx.down.5.1}}</td> <td>{{beam.get_rx.down.5.2}}</td> <td>{{beam.get_rx.down.5.3}}</td> | |
|
821 | 569 | </tr> |
|
822 | 570 | <tr> |
|
823 |
<td>{{ |
|
|
571 | <td>{{beam.get_rx.down.6.0}}</td> <td>{{beam.get_rx.down.6.1}}</td> <td>{{beam.get_rx.down.6.2}}</td> <td>{{beam.get_rx.down.6.3}}</td> | |
|
824 | 572 | </tr> |
|
825 | 573 | <tr> |
|
826 |
<td>{{ |
|
|
574 | <td>{{beam.get_rx.down.7.0}}</td> <td>{{beam.get_rx.down.7.1}}</td> <td>{{beam.get_rx.down.7.2}}</td> <td>{{beam.get_rx.down.7.3}}</td> | |
|
827 | 575 | </tr> |
|
828 | 576 | </table> |
|
829 | 577 | </td> |
|
830 | 578 | <td> <b>South Quarter</b> |
|
831 | 579 | <table class="south_quarter"> |
|
832 | 580 | <tr> |
|
833 |
<td>{{ |
|
|
581 | <td>{{beam.get_rx.down.4.4}}</td> <td>{{beam.get_rx.down.4.5}}</td> <td>{{beam.get_rx.down.4.6}}</td> <td>{{beam.get_rx.down.4.7}}</td> | |
|
834 | 582 | </tr> |
|
835 | 583 | <tr> |
|
836 |
<td>{{ |
|
|
584 | <td>{{beam.get_rx.down.5.4}}</td> <td>{{beam.get_rx.down.5.5}}</td> <td>{{beam.get_rx.down.5.6}}</td> <td>{{beam.get_rx.down.5.7}}</td> | |
|
837 | 585 | </tr> |
|
838 | 586 | <tr> |
|
839 |
<td>{{ |
|
|
587 | <td>{{beam.get_rx.down.6.4}}</td> <td>{{beam.get_rx.down.6.5}}</td> <td>{{beam.get_rx.down.6.6}}</td> <td>{{beam.get_rx.down.6.7}}</td> | |
|
840 | 588 | </tr> |
|
841 | 589 | <tr> |
|
842 |
<td>{{ |
|
|
590 | <td>{{beam.get_rx.down.7.4}}</td> <td>{{beam.get_rx.down.7.5}}</td> <td>{{beam.get_rx.down.7.6}}</td> <td>{{beam.get_rx.down.7.7}}</td> | |
|
843 | 591 | </tr> |
|
844 | 592 | </table> |
|
845 | 593 | </td> |
@@ -850,17 +598,17 $(document).ready(function() { | |||
|
850 | 598 | </table> |
|
851 | 599 | |
|
852 | 600 | {% if not edit %} |
|
853 | {% include "abs_pattern_img.html" %} | |
|
601 | {% include "abs_downpattern_img.html" %} | |
|
854 | 602 | {% endif %} |
|
855 | 603 | |
|
856 | 604 | <br> |
|
857 | 605 | |
|
858 | 606 | <div id="down_ues" style="display: inline-block"> |
|
859 |
Ues: {{ |
|
|
607 | Ues: {{beam.get_down_ues}} | |
|
860 | 608 | </div> |
|
861 | 609 | |
|
862 | 610 | <div style="margin-left: 70px; display: inline-block"> |
|
863 |
<input type="checkbox" id="up_onlyrx" {% if |
|
|
611 | <input type="checkbox" id="up_onlyrx" {% if beam.get_down_onlyrx == True %} checked="True" {% endif %} disabled> | |
|
864 | 612 | Only RX |
|
865 | 613 | </input> |
|
866 | 614 | </div> |
@@ -8,27 +8,28 | |||
|
8 | 8 | |
|
9 | 9 | </style> |
|
10 | 10 | |
|
11 | ||
|
12 | ||
|
11 | 13 | {% if abs_beams %} |
|
12 | 14 | <div> |
|
13 | 15 | <h4>Beams:</h4> |
|
14 | 16 | |
|
15 | 17 | <div class="container"> |
|
16 |
< |
|
|
17 | ||
|
18 | {% for beam in abs_beams %} | |
|
19 | <li {% if forloop.counter == 1 %} class="active" {% endif %}> | |
|
20 | <a data-toggle="pill" id="button-{{ forloop.counter }}" href="#">{{ forloop.counter }}</a> | |
|
21 | </li> | |
|
22 | {% endfor %} | |
|
23 | ||
|
24 | </ul> | |
|
18 | <div class="btn-group"> | |
|
19 | {% for abs_beam in abs_beams %} | |
|
20 | <button id="bt_beam{{ forloop.counter }}" type="button" class="btn btn-default">{{ forloop.counter }}</button> | |
|
21 | {% endfor %} | |
|
22 | </div> | |
|
25 | 23 | </div> |
|
26 | 24 | |
|
27 | </div> | |
|
28 | 25 | |
|
26 | </div> | |
|
29 | 27 | <br> |
|
30 | {% include "abs_pattern.html" %} | |
|
31 | <br> | |
|
28 | ||
|
29 | {% if beam %} | |
|
30 | {% include "abs_pattern.html" %} | |
|
31 | {% endif %} | |
|
32 | ||
|
32 | 33 | |
|
33 | 34 | {% else %} |
|
34 | 35 | <div> |
@@ -37,11 +38,17 | |||
|
37 | 38 | </div> |
|
38 | 39 | {% endif %} |
|
39 | 40 | |
|
40 | {% endblock %} | |
|
41 | 41 | |
|
42 | 42 | <script> |
|
43 | function ChangeColor() { | |
|
44 | document.getElementById("button_1").style.backgroundColor = "#2c3e50"; | |
|
45 | document.getElementById("button_1").style.color = "#ecf0f1"; | |
|
46 | } | |
|
43 | {% for abs_beam in abs_beams %} | |
|
44 | $("#bt_beam{{ forloop.counter }}").click(function() { | |
|
45 | document.location = "{% url 'url_plot_abs_pattern' abs_beam.abs_conf.id abs_beam.id %}"; | |
|
46 | }); | |
|
47 | {% endfor %} | |
|
48 | //function ChangeColor() { | |
|
49 | // document.getElementById("button_1").style.backgroundColor = "#2c3e50"; | |
|
50 | // document.getElementById("button_1").style.color = "#ecf0f1"; | |
|
51 | //} | |
|
47 | 52 | </script> |
|
53 | ||
|
54 | {% endblock %} |
General Comments 0
You need to be logged in to leave comments.
Login now