/edit/', views.edit_beam, name='url_edit_abs_beam'),
)
diff --git a/apps/abs/utils/Astro_Coords.py b/apps/abs/utils/Astro_Coords.py
index 73ca019..6392594 100644
--- a/apps/abs/utils/Astro_Coords.py
+++ b/apps/abs/utils/Astro_Coords.py
@@ -16,8 +16,8 @@ import numpy
import scipy.interpolate
import os
import sys
-import TimeTools
-import Misc_Routines
+from .TimeTools import Julian , Time
+from .Misc_Routines import CoFactors
class EquatorialCorrections():
def __init__(self):
@@ -81,21 +81,21 @@ class EquatorialCorrections():
eps0 = (23.4392911*3600.) - (46.8150*T) - (0.00059*T**2) + (0.001813*T**3)
# True obliquity of the ecliptic in radians
- eps = (eps0 + d_eps)/3600.*Misc_Routines.CoFactors.d2r
+ eps = (eps0 + d_eps)/3600.*CoFactors.d2r
# Useful numbers
ce = numpy.cos(eps)
se = numpy.sin(eps)
# Convert Ra-Dec to equatorial rectangular coordinates
- x = numpy.cos(ra*Misc_Routines.CoFactors.d2r)*numpy.cos(dec*Misc_Routines.CoFactors.d2r)
- y = numpy.sin(ra*Misc_Routines.CoFactors.d2r)*numpy.cos(dec*Misc_Routines.CoFactors.d2r)
- z = numpy.sin(dec*Misc_Routines.CoFactors.d2r)
+ x = numpy.cos(ra*CoFactors.d2r)*numpy.cos(dec*CoFactors.d2r)
+ y = numpy.sin(ra*CoFactors.d2r)*numpy.cos(dec*CoFactors.d2r)
+ z = numpy.sin(dec*CoFactors.d2r)
# Apply corrections to each rectangular coordinate
- x2 = x - (y*ce + z*se)*d_psi*Misc_Routines.CoFactors.s2r
- y2 = y + (x*ce*d_psi - z*d_eps)*Misc_Routines.CoFactors.s2r
- z2 = z + (x*se*d_psi + y*d_eps)*Misc_Routines.CoFactors.s2r
+ x2 = x - (y*ce + z*se)*d_psi*CoFactors.s2r
+ y2 = y + (x*ce*d_psi - z*d_eps)*CoFactors.s2r
+ z2 = z + (x*se*d_psi + y*d_eps)*CoFactors.s2r
# Convert bask to equatorial spherical coordinates
r = numpy.sqrt(x2**2. + y2**2. + z2**2.)
@@ -128,8 +128,8 @@ class EquatorialCorrections():
dec2[w2] = numpy.arcsin(z2[w2]/r[w2])
# Converting to degree
- ra2 = ra2/Misc_Routines.CoFactors.d2r
- dec2 = dec2/Misc_Routines.CoFactors.d2r
+ ra2 = ra2/CoFactors.d2r
+ dec2 = dec2/CoFactors.d2r
w = numpy.where(ra2<0.)
if w[0].size>0:
@@ -178,32 +178,32 @@ class EquatorialCorrections():
# Mean elongation of the moon
coeff1 = numpy.array([1/189474.0,-0.0019142,445267.111480,297.85036])
d = numpy.poly1d(coeff1)
- d = d(t)*Misc_Routines.CoFactors.d2r
+ d = d(t)*CoFactors.d2r
d = self.cirrange(d,rad=1)
# Sun's mean elongation
coeff2 = numpy.array([-1./3e5,-0.0001603,35999.050340,357.52772])
m = numpy.poly1d(coeff2)
- m = m(t)*Misc_Routines.CoFactors.d2r
+ m = m(t)*CoFactors.d2r
m = self.cirrange(m,rad=1)
# Moon's mean elongation
coeff3 = numpy.array([1.0/5.625e4,0.0086972,477198.867398,134.96298])
mprime = numpy.poly1d(coeff3)
- mprime = mprime(t)*Misc_Routines.CoFactors.d2r
+ mprime = mprime(t)*CoFactors.d2r
mprime = self.cirrange(mprime,rad=1)
# Moon's argument of latitude
coeff4 = numpy.array([-1.0/3.27270e5,-0.0036825,483202.017538,93.27191])
f = numpy.poly1d(coeff4)
- f = f(t)*Misc_Routines.CoFactors.d2r
+ f = f(t)*CoFactors.d2r
f = self.cirrange(f,rad=1)
# Longitude fo the ascending node of the Moon's mean orbit on the ecliptic, measu-
# red from the mean equinox of the date.
coeff5 = numpy.array([1.0/4.5e5,0.0020708,-1934.136261,125.04452])
omega = numpy.poly1d(coeff5)
- omega = omega(t)*Misc_Routines.CoFactors.d2r
+ omega = omega(t)*CoFactors.d2r
omega = self.cirrange(omega,rad=1)
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,\
@@ -335,7 +335,7 @@ class EquatorialCorrections():
coeff = 23 + 26/60. + 21.488/3600.
eps0 = coeff*3600. - 46.8150*T - 0.00059*T**2. + 0.001813*T**3.
# True obliquity of the ecliptic in radians
- eps = (eps0 + d_epsilon)/3600*Misc_Routines.CoFactors.d2r
+ eps = (eps0 + d_epsilon)/3600*CoFactors.d2r
celestialbodies = CelestialBodies()
[sunra,sundec,sunlon,sunobliq] = celestialbodies.sunpos(jd)
@@ -349,11 +349,11 @@ class EquatorialCorrections():
# Constant of aberration, in arcseconds
k = 20.49552
- cd = numpy.cos(dec*Misc_Routines.CoFactors.d2r) ; sd = numpy.sin(dec*Misc_Routines.CoFactors.d2r)
+ cd = numpy.cos(dec*CoFactors.d2r) ; sd = numpy.sin(dec*CoFactors.d2r)
ce = numpy.cos(eps) ; te = numpy.tan(eps)
- cp = numpy.cos(pi*Misc_Routines.CoFactors.d2r) ; sp = numpy.sin(pi*Misc_Routines.CoFactors.d2r)
- cs = numpy.cos(sunlon*Misc_Routines.CoFactors.d2r) ; ss = numpy.sin(sunlon*Misc_Routines.CoFactors.d2r)
- ca = numpy.cos(ra*Misc_Routines.CoFactors.d2r) ; sa = numpy.sin(ra*Misc_Routines.CoFactors.d2r)
+ cp = numpy.cos(pi*CoFactors.d2r) ; sp = numpy.sin(pi*CoFactors.d2r)
+ cs = numpy.cos(sunlon*CoFactors.d2r) ; ss = numpy.sin(sunlon*CoFactors.d2r)
+ ca = numpy.cos(ra*CoFactors.d2r) ; sa = numpy.sin(ra*CoFactors.d2r)
term1 = (ca*cs*ce + sa*ss)/cd
term2 = (ca*cp*ce + sa*sp)/cd
@@ -407,8 +407,8 @@ class EquatorialCorrections():
dec = numpy.atleast_1d(dec)
if rad==0:
- ra_rad = ra*Misc_Routines.CoFactors.d2r
- dec_rad = dec*Misc_Routines.CoFactors.d2r
+ ra_rad = ra*CoFactors.d2r
+ dec_rad = dec*CoFactors.d2r
else:
ra_rad = ra
dec_rad = dec
@@ -427,9 +427,9 @@ class EquatorialCorrections():
dec_rad = numpy.arcsin(x2[2,:])
if rad==0:
- ra = ra_rad/Misc_Routines.CoFactors.d2r
+ ra = ra_rad/CoFactors.d2r
ra = ra + (ra<0)*360.
- dec = dec_rad/Misc_Routines.CoFactors.d2r
+ dec = dec_rad/CoFactors.d2r
else:
ra = ra_rad
ra = ra + (ra<0)*numpy.pi*2.
@@ -472,15 +472,15 @@ class EquatorialCorrections():
if FK4==0:
st=0.001*(equinox1 - 2000.)
# Computing 3 rotation angles.
- A=Misc_Routines.CoFactors.s2r*t*(23062.181+st*(139.656+0.0139*st)+t*(30.188-0.344*st+17.998*t))
- B=Misc_Routines.CoFactors.s2r*t*t*(79.280+0.410*st+0.205*t)+A
- C=Misc_Routines.CoFactors.s2r*t*(20043.109-st*(85.33+0.217*st)+ t*(-42.665-0.217*st-41.833*t))
+ A=CoFactors.s2r*t*(23062.181+st*(139.656+0.0139*st)+t*(30.188-0.344*st+17.998*t))
+ B=CoFactors.s2r*t*t*(79.280+0.410*st+0.205*t)+A
+ C=CoFactors.s2r*t*(20043.109-st*(85.33+0.217*st)+ t*(-42.665-0.217*st-41.833*t))
else:
st=0.001*(equinox1 - 1900)
# Computing 3 rotation angles
- A=Misc_Routines.CoFactors.s2r*t*(23042.53+st*(139.75+0.06*st)+t*(30.23-0.27*st+18.0*t))
- B=Misc_Routines.CoFactors.s2r*t*t*(79.27+0.66*st+0.32*t)+A
- C=Misc_Routines.CoFactors.s2r*t*(20046.85-st*(85.33+0.37*st)+t*(-42.67-0.37*st-41.8*t))
+ A=CoFactors.s2r*t*(23042.53+st*(139.75+0.06*st)+t*(30.23-0.27*st+18.0*t))
+ B=CoFactors.s2r*t*t*(79.27+0.66*st+0.32*t)+A
+ C=CoFactors.s2r*t*(20046.85-st*(85.33+0.37*st)+t*(-42.67-0.37*st-41.8*t))
sina = numpy.sin(A); sinb = numpy.sin(B); sinc = numpy.sin(C)
cosa = numpy.cos(A); cosb = numpy.cos(B); cosc = numpy.cos(C)
@@ -595,39 +595,39 @@ class CelestialBodies(EquatorialCorrections):
# Allow for ellipticity of the orbit (equation of centre) using the Earth's mean
# anomoly ME
me = 358.475844 + ((35999.049750*t) % 360.0)
- ellcor = (6910.1 - 17.2*t)*numpy.sin(me*Misc_Routines.CoFactors.d2r) + 72.3*numpy.sin(2.0*me*Misc_Routines.CoFactors.d2r)
+ ellcor = (6910.1 - 17.2*t)*numpy.sin(me*CoFactors.d2r) + 72.3*numpy.sin(2.0*me*CoFactors.d2r)
l = l + ellcor
# Allow for the Venus perturbations using the mean anomaly of Venus MV
mv = 212.603219 + ((58517.803875*t) % 360.0)
- vencorr = 4.8*numpy.cos((299.1017 + mv - me)*Misc_Routines.CoFactors.d2r) + \
- 5.5*numpy.cos((148.3133 + 2.0*mv - 2.0*me )*Misc_Routines.CoFactors.d2r) + \
- 2.5*numpy.cos((315.9433 + 2.0*mv - 3.0*me )*Misc_Routines.CoFactors.d2r) + \
- 1.6*numpy.cos((345.2533 + 3.0*mv - 4.0*me )*Misc_Routines.CoFactors.d2r) + \
- 1.0*numpy.cos((318.15 + 3.0*mv - 5.0*me )*Misc_Routines.CoFactors.d2r)
+ vencorr = 4.8*numpy.cos((299.1017 + mv - me)*CoFactors.d2r) + \
+ 5.5*numpy.cos((148.3133 + 2.0*mv - 2.0*me )*CoFactors.d2r) + \
+ 2.5*numpy.cos((315.9433 + 2.0*mv - 3.0*me )*CoFactors.d2r) + \
+ 1.6*numpy.cos((345.2533 + 3.0*mv - 4.0*me )*CoFactors.d2r) + \
+ 1.0*numpy.cos((318.15 + 3.0*mv - 5.0*me )*CoFactors.d2r)
l = l + vencorr
# Allow for the Mars perturbations using the mean anomaly of Mars MM
mm = 319.529425 + ((19139.858500*t) % 360.0)
- marscorr = 2.0*numpy.cos((343.8883 - 2.0*mm + 2.0*me)*Misc_Routines.CoFactors.d2r ) + \
- 1.8*numpy.cos((200.4017 - 2.0*mm + me)*Misc_Routines.CoFactors.d2r)
+ marscorr = 2.0*numpy.cos((343.8883 - 2.0*mm + 2.0*me)*CoFactors.d2r ) + \
+ 1.8*numpy.cos((200.4017 - 2.0*mm + me)*CoFactors.d2r)
l = l + marscorr
# Allow for the Jupiter perturbations using the mean anomaly of Jupiter MJ
mj = 225.328328 + ((3034.6920239*t) % 360.0)
- jupcorr = 7.2*numpy.cos((179.5317 - mj + me )*Misc_Routines.CoFactors.d2r) + \
- 2.6*numpy.cos((263.2167 - mj)*Misc_Routines.CoFactors.d2r) + \
- 2.7*numpy.cos((87.1450 - 2.0*mj + 2.0*me)*Misc_Routines.CoFactors.d2r) + \
- 1.6*numpy.cos((109.4933 - 2.0*mj + me)*Misc_Routines.CoFactors.d2r)
+ jupcorr = 7.2*numpy.cos((179.5317 - mj + me )*CoFactors.d2r) + \
+ 2.6*numpy.cos((263.2167 - mj)*CoFactors.d2r) + \
+ 2.7*numpy.cos((87.1450 - 2.0*mj + 2.0*me)*CoFactors.d2r) + \
+ 1.6*numpy.cos((109.4933 - 2.0*mj + me)*CoFactors.d2r)
l = l + jupcorr
# Allow for Moons perturbations using mean elongation of the Moon from the Sun D
d = 350.7376814 + ((445267.11422*t) % 360.0)
- mooncorr = 6.5*numpy.sin(d*Misc_Routines.CoFactors.d2r)
+ mooncorr = 6.5*numpy.sin(d*CoFactors.d2r)
l = l + mooncorr
# Allow for long period terms
- longterm = + 6.4*numpy.sin((231.19 + 20.20*t)*Misc_Routines.CoFactors.d2r)
+ longterm = + 6.4*numpy.sin((231.19 + 20.20*t)*CoFactors.d2r)
l = l + longterm
l = (l + 2592000.0) % 1296000.0
longmed = l/3600.0
@@ -637,26 +637,26 @@ class CelestialBodies(EquatorialCorrections):
# Allow for Nutation using the longitude of the Moons mean node OMEGA
omega = 259.183275 - ((1934.142008*t) % 360.0)
- l = l - 17.2*numpy.sin(omega*Misc_Routines.CoFactors.d2r)
+ l = l - 17.2*numpy.sin(omega*CoFactors.d2r)
# Form the True Obliquity
- oblt = 23.452294 - 0.0130125*t + (9.2*numpy.cos(omega*Misc_Routines.CoFactors.d2r))/3600.0
+ oblt = 23.452294 - 0.0130125*t + (9.2*numpy.cos(omega*CoFactors.d2r))/3600.0
# Form Right Ascension and Declination
l = l/3600.0
- ra = numpy.arctan2((numpy.sin(l*Misc_Routines.CoFactors.d2r)*numpy.cos(oblt*Misc_Routines.CoFactors.d2r)),numpy.cos(l*Misc_Routines.CoFactors.d2r))
+ ra = numpy.arctan2((numpy.sin(l*CoFactors.d2r)*numpy.cos(oblt*CoFactors.d2r)),numpy.cos(l*CoFactors.d2r))
neg = numpy.where(ra < 0.0)
if neg[0].size > 0: ra[neg] = ra[neg] + 2.0*numpy.pi
- dec = numpy.arcsin(numpy.sin(l*Misc_Routines.CoFactors.d2r)*numpy.sin(oblt*Misc_Routines.CoFactors.d2r))
+ dec = numpy.arcsin(numpy.sin(l*CoFactors.d2r)*numpy.sin(oblt*CoFactors.d2r))
if rad==1:
- oblt = oblt*Misc_Routines.CoFactors.d2r
- longmed = longmed*Misc_Routines.CoFactors.d2r
+ oblt = oblt*CoFactors.d2r
+ longmed = longmed*CoFactors.d2r
else:
- ra = ra/Misc_Routines.CoFactors.d2r
- dec = dec/Misc_Routines.CoFactors.d2r
+ ra = ra/CoFactors.d2r
+ dec = dec/CoFactors.d2r
return ra, dec, longmed, oblt
@@ -754,30 +754,30 @@ class CelestialBodies(EquatorialCorrections):
lprimed = numpy.poly1d(coeff0)
lprimed = lprimed(t)
lprimed = self.cirrange(lprimed,rad=0)
- lprime = lprimed*Misc_Routines.CoFactors.d2r
+ lprime = lprimed*CoFactors.d2r
# Mean elongation of the moon
coeff1 = numpy.array([-1./1.13065e8,1./545868.,-0.0018819,445267.1114034,297.8501921])
d = numpy.poly1d(coeff1)
- d = d(t)*Misc_Routines.CoFactors.d2r
+ d = d(t)*CoFactors.d2r
d = self.cirrange(d,rad=1)
# Sun's mean anomaly
coeff2 = numpy.array([1.0/2.449e7,-0.0001536,35999.0502909,357.5291092])
M = numpy.poly1d(coeff2)
- M = M(t)*Misc_Routines.CoFactors.d2r
+ M = M(t)*CoFactors.d2r
M = self.cirrange(M,rad=1)
# Moon's mean anomaly
coeff3 = numpy.array([-1.0/1.4712e7,1.0/6.9699e4,0.0087414,477198.8675055,134.9633964])
Mprime = numpy.poly1d(coeff3)
- Mprime = Mprime(t)*Misc_Routines.CoFactors.d2r
+ Mprime = Mprime(t)*CoFactors.d2r
Mprime = self.cirrange(Mprime,rad=1)
# Moon's argument of latitude
coeff4 = numpy.array([1.0/8.6331e8,-1.0/3.526e7,-0.0036539,483202.0175233,93.2720950])
F = numpy.poly1d(coeff4)
- F = F(t)*Misc_Routines.CoFactors.d2r
+ F = F(t)*CoFactors.d2r
F = self.cirrange(F,rad=1)
# Eccentricity of Earth's orbit around the sun
@@ -790,9 +790,9 @@ class CelestialBodies(EquatorialCorrections):
ecorr4 = numpy.where((numpy.abs(m_lat))==2)
# Additional arguments.
- A1 = (119.75 + 131.849*t)*Misc_Routines.CoFactors.d2r
- A2 = (53.09 + 479264.290*t)*Misc_Routines.CoFactors.d2r
- A3 = (313.45 + 481266.484*t)*Misc_Routines.CoFactors.d2r
+ A1 = (119.75 + 131.849*t)*CoFactors.d2r
+ A2 = (53.09 + 479264.290*t)*CoFactors.d2r
+ A3 = (313.45 + 481266.484*t)*CoFactors.d2r
suml_add = 3958.*numpy.sin(A1) + 1962.*numpy.sin(lprime - F) + 318*numpy.sin(A2)
sumb_add = -2235.*numpy.sin(lprime) + 382.*numpy.sin(A3) + 175.*numpy.sin(A1-F) + \
175.*numpy.sin(A1 + F) + 127.*numpy.sin(lprime - Mprime) - 115.*numpy.sin(lprime + Mprime)
@@ -823,8 +823,8 @@ class CelestialBodies(EquatorialCorrections):
[nlon, elon] = self.nutate(jd)
geolon = geolon + nlon/3.6e3
geolon = self.cirrange(geolon,rad=0)
- lamb = geolon*Misc_Routines.CoFactors.d2r
- beta = geolat*Misc_Routines.CoFactors.d2r
+ lamb = geolon*CoFactors.d2r
+ beta = geolat*CoFactors.d2r
# Find mean obliquity and convert lamb, beta to RA, Dec
c = numpy.array([2.45,5.79,27.87,7.12,-39.05,-249.67,-51.38,1999.25,-1.55,-4680.93, \
@@ -832,7 +832,7 @@ class CelestialBodies(EquatorialCorrections):
junk = numpy.poly1d(c);
epsilon = 23. + (26./60.) + (junk(t/1.e2)/3600.)
# True obliquity in radians
- eps = (epsilon + elon/3600. )*Misc_Routines.CoFactors.d2r
+ eps = (epsilon + elon/3600. )*CoFactors.d2r
ra = numpy.arctan2(numpy.sin(lamb)*numpy.cos(eps)-numpy.tan(beta)*numpy.sin(eps),numpy.cos(lamb))
ra = self.cirrange(ra,rad=1)
@@ -843,8 +843,8 @@ class CelestialBodies(EquatorialCorrections):
geolon = lamb
geolat = beta
else:
- ra = ra/Misc_Routines.CoFactors.d2r
- dec = dec/Misc_Routines.CoFactors.d2r
+ ra = ra/CoFactors.d2r
+ dec = dec/CoFactors.d2r
return ra, dec, dist, geolon, geolat
@@ -962,11 +962,11 @@ class CelestialBodies(EquatorialCorrections):
"""
# Defining date to compute SkyNoise.
- [year, month, dom, hour, mis, secs] = TimeTools.Julian(jd).change2time()
+ [year, month, dom, hour, mis, secs] = Julian(jd).change2time()
is_dom = (month==9) & (dom==21)
if is_dom:
tmp = jd
- jd = TimeTools.Time(year,9,22).change2julian()
+ jd = Time(year,9,22).change2julian()
dom = 22
# Reading SkyNoise
@@ -990,9 +990,9 @@ class CelestialBodies(EquatorialCorrections):
hour = numpy.array([0,23]);
mins = numpy.array([0,59]);
secs = numpy.array([0,59]);
- LTrange = TimeTools.Time(year,month,dom,hour,mins,secs).change2julday()
+ LTrange = Time(year,month,dom,hour,mins,secs).change2julday()
LTtime = LTrange[0] + numpy.arange(1440)*((LTrange[1] - LTrange[0])/(1440.-1))
- lst = TimeTools.Julian(LTtime + (-3600.*ut/86400.)).change2lst()
+ lst = Julian(LTtime + (-3600.*ut/86400.)).change2lst()
ipowr = lst*0.0
# Interpolating using scipy (inside max and min "x")
@@ -1098,8 +1098,8 @@ class AltAz(EquatorialCorrections):
[dra1,ddec1,eps,d_psi,d_eps] = self.co_nutate(self.jd,ra_tmp, dec_tmp)
# Getting local mean sidereal time (lmst)
- lmst = TimeTools.Julian(self.jd[0]).change2lst()
- lmst = lmst*Misc_Routines.CoFactors.h2d
+ lmst = Julian(self.jd[0]).change2lst()
+ lmst = lmst*CoFactors.h2d
# Getting local apparent sidereal time (last)
last = lmst + d_psi*numpy.cos(eps)/3600.
@@ -1165,16 +1165,16 @@ class AltAz(EquatorialCorrections):
Converted to Python by Freddy R. Galindo, ROJ, 26 September 2009.
"""
- alt_r = numpy.atleast_1d(self.alt*Misc_Routines.CoFactors.d2r)
- az_r = numpy.atleast_1d(self.az*Misc_Routines.CoFactors.d2r)
- lat_r = numpy.atleast_1d(self.lat*Misc_Routines.CoFactors.d2r)
+ alt_r = numpy.atleast_1d(self.alt*CoFactors.d2r)
+ az_r = numpy.atleast_1d(self.az*CoFactors.d2r)
+ lat_r = numpy.atleast_1d(self.lat*CoFactors.d2r)
# Find local hour angle (in degrees, from 0 to 360.)
y_ha = -1*numpy.sin(az_r)*numpy.cos(alt_r)
x_ha = -1*numpy.cos(az_r)*numpy.sin(lat_r)*numpy.cos(alt_r) + numpy.sin(alt_r)*numpy.cos(lat_r)
ha = numpy.arctan2(y_ha,x_ha)
- ha = ha/Misc_Routines.CoFactors.d2r
+ ha = ha/CoFactors.d2r
w = numpy.where(ha<0.)
if w[0].size>0:ha[w] = ha[w] + 360.
@@ -1182,7 +1182,7 @@ class AltAz(EquatorialCorrections):
# Find declination (positive if north of celestial equatorial, negative if south)
sindec = numpy.sin(lat_r)*numpy.sin(alt_r) + numpy.cos(lat_r)*numpy.cos(alt_r)*numpy.cos(az_r)
- dec = numpy.arcsin(sindec)/Misc_Routines.CoFactors.d2r
+ dec = numpy.arcsin(sindec)/CoFactors.d2r
return ha, dec
@@ -1289,9 +1289,9 @@ class Equatorial(EquatorialCorrections):
dec = dec + (ddec1*self.nutate_ + ddec2*self.aberration_)/3600.
# Getting local mean sidereal time (lmst)
- lmst = TimeTools.Julian(self.jd).change2lst()
+ lmst = Julian(self.jd).change2lst()
- lmst = lmst*Misc_Routines.CoFactors.h2d
+ lmst = lmst*CoFactors.h2d
# Getting local apparent sidereal time (last)
last = lmst + d_psi*numpy.cos(eps)/3600.
@@ -1327,17 +1327,17 @@ class Equatorial(EquatorialCorrections):
Converted to Python by Freddy R. Galindo, ROJ, 26 September 2009.
"""
- sh = numpy.sin(ha*Misc_Routines.CoFactors.d2r) ; ch = numpy.cos(ha*Misc_Routines.CoFactors.d2r)
- sd = numpy.sin(dec*Misc_Routines.CoFactors.d2r) ; cd = numpy.cos(dec*Misc_Routines.CoFactors.d2r)
- sl = numpy.sin(self.lat*Misc_Routines.CoFactors.d2r) ; cl = numpy.cos(self.lat*Misc_Routines.CoFactors.d2r)
+ sh = numpy.sin(ha*CoFactors.d2r) ; ch = numpy.cos(ha*CoFactors.d2r)
+ sd = numpy.sin(dec*CoFactors.d2r) ; cd = numpy.cos(dec*CoFactors.d2r)
+ sl = numpy.sin(self.lat*CoFactors.d2r) ; cl = numpy.cos(self.lat*CoFactors.d2r)
x = -1*ch*cd*sl + sd*cl
y = -1*sh*cd
z = ch*cd*cl + sd*sl
r = numpy.sqrt(x**2. + y**2.)
- az = numpy.arctan2(y,x)/Misc_Routines.CoFactors.d2r
- alt = numpy.arctan2(z,r)/Misc_Routines.CoFactors.d2r
+ az = numpy.arctan2(y,x)/CoFactors.d2r
+ alt = numpy.arctan2(z,r)/CoFactors.d2r
# correct for negative az.
w = numpy.where(az<0.)
@@ -1396,7 +1396,7 @@ class Geodetic():
Converted to Python by Freddy R. Galindo, ROJ, 02 October 2009.
"""
- gdl = self.lat*Misc_Routines.CoFactors.d2r
+ gdl = self.lat*CoFactors.d2r
slat = numpy.sin(gdl)
clat = numpy.cos(gdl)
slat2 = slat**2.
@@ -1414,6 +1414,6 @@ class Geodetic():
y = rgeoid*sbet + self.alt*slat
gcalt = numpy.sqrt(x**2. + y**2.)
- gclat = numpy.arctan2(y,x)/Misc_Routines.CoFactors.d2r
+ gclat = numpy.arctan2(y,x)/CoFactors.d2r
return gclat, gcalt
diff --git a/apps/abs/utils/Graphics_OverJro.py b/apps/abs/utils/Graphics_OverJro.py
index 146f265..f68ebf5 100644
--- a/apps/abs/utils/Graphics_OverJro.py
+++ b/apps/abs/utils/Graphics_OverJro.py
@@ -32,11 +32,10 @@ import matplotlib.pyplot
#import scipy
import scipy.interpolate
-import Astro_Coords
-import TimeTools
-import Graphics_Miscens
-
-import Misc_Routines
+from .Astro_Coords import Equatorial , CelestialBodies
+from .TimeTools import Time , Julian
+from .Graphics_Miscens import ColorTable
+from .Misc_Routines import CoFactors,Vector
class AntPatternPlot:
def __init__(self):
@@ -79,8 +78,8 @@ class AntPatternPlot:
levels = numpy.array([1e-3,1e-2,1e-1,0.5,1.0])
tmp = numpy.round(10*numpy.log10(levels),decimals=1)
- labels = range(5)
- for i in numpy.arange(5):labels[i] = str(numpy.int(tmp[i]))
+ labels = []
+ for i in numpy.arange(5):labels.append(str(numpy.int(tmp[i])))
colors = ((0,0,1.),(0,170/255.,0),(127/255.,1.,0),(1.,109/255.,0),(128/255.,0,0))
@@ -156,11 +155,11 @@ class AntPatternPlot:
dec_axes = numpy.dot(ones_ra,dec_axes.transpose())
dec_axes2 = numpy.array(dec_axes)
- ObjHor = Astro_Coords.Equatorial(ha_axes2,dec_axes2,jd)
+ ObjHor = Equatorial(ha_axes2,dec_axes2,jd)
[alt,az,ha] = ObjHor.change2AltAz()
- z = numpy.transpose(alt)*Misc_Routines.CoFactors.d2r ; z = z.flatten()
- az = numpy.transpose(az)*Misc_Routines.CoFactors.d2r ; az = az.flatten()
+ z = numpy.transpose(alt)*CoFactors.d2r ; z = z.flatten()
+ az = numpy.transpose(az)*CoFactors.d2r ; az = az.flatten()
vect = numpy.array([numpy.cos(z)*numpy.sin(az),numpy.cos(z)*numpy.cos(az),numpy.sin(z)])
@@ -400,11 +399,11 @@ class CelestialObjectsPlot:
marker = ['--^','--s','--*','--o']
# Getting RGB table to plot celestial object over Jicamarca
- colortable = Graphics_Miscens.ColorTable(table=1).readTable()
+ colortable = ColorTable(table=1).readTable()
for io in (numpy.arange(4)+1):
if self.show_object[io]!=0:
- ObjBodies = Astro_Coords.CelestialBodies()
+ ObjBodies = CelestialBodies()
if io==1:
[ra,dec,sunlon,sunobliq] = ObjBodies.sunpos(jd)
elif io==2:
@@ -416,10 +415,10 @@ class CelestialObjectsPlot:
ra = maxra*15.
dec = main_dec
- ObjEq = Astro_Coords.Equatorial(ra,dec,jd,lat=glat,lon=glon)
+ ObjEq = Equatorial(ra,dec,jd,lat=glat,lon=glon)
[alt, az, ha] = ObjEq.change2AltAz()
vect = numpy.array([az,alt]).transpose()
- vect = Misc_Routines.Vector(vect,direction=0).Polar2Rect()
+ vect = Vector(vect,direction=0).Polar2Rect()
dcosx = numpy.array(numpy.dot(vect,xg))
dcosy = numpy.array(numpy.dot(vect,yg))
diff --git a/apps/abs/utils/Misc_Routines.py b/apps/abs/utils/Misc_Routines.py
index 886cbb1..85c46f0 100644
--- a/apps/abs/utils/Misc_Routines.py
+++ b/apps/abs/utils/Misc_Routines.py
@@ -12,7 +12,7 @@ Created by Ing. Freddy Galindo (frederickgalindo@gmail.com). ROJ, 21 October 200
import numpy
import sys
-class CoFactors():
+class CoFactors(object):
"""
CoFactor class used to call pre-defined conversion factor (e.g. degree to radian). The cu-
The current available factor are:
@@ -28,14 +28,14 @@ class CoFactors():
h2r = numpy.pi/12.
h2d = 15.
-class Redirect:
- def __init__(self,stdout):
+class Redirect(object):
+ def __init__(self,stdout=None):
self.stdout = stdout
def write(self,message):
self.stdout.insertPlainText(message)
-class WidgetPrint:
+class WidgetPrint(object):
"""
WidgetPrint class allows to define the standard output.
"""
@@ -49,11 +49,11 @@ class WidgetPrint:
if self.textid != None: sys.stdout = Redirect(self.textid)
print ("")
-class Vector:
+class Vector(object):
"""
direction = 0 Polar to rectangular; direction=1 rectangular to polar
"""
- def __init__(self,vect,direction=0):
+ def __init__(self,vect=numpy.array([]),direction=0):
nsize = numpy.size(vect)
if nsize <= 3:
vect = vect.reshape(1,nsize)
@@ -77,5 +77,10 @@ class Vector:
return mm
-
-
+if __name__ == "__main__":
+
+ a=CoFactors()
+ a=Redirect()
+ a=WidgetPrint()
+ a=WidgetPrint()
+ a=Vector()
diff --git a/apps/abs/utils/OverJRO.py b/apps/abs/utils/OverJRO.py
index 77c3506..08f302e 100644
--- a/apps/abs/utils/OverJRO.py
+++ b/apps/abs/utils/OverJRO.py
@@ -27,7 +27,7 @@ class OverJRO(Files):
def saveFile(self, contentFile):
filename = self.setFilename()
finalpath = os.path.join(self.path, self.setFileExtension(filename))
- print "HAHAH"
+ print ("HAHAH")
finalpath = "apps/abs/static/data/"+finalpath
self.save(finalpath, contentFile)
return finalpath
diff --git a/apps/abs/utils/overJroShow.py b/apps/abs/utils/overJroShow.py
index c2c5440..7fcaa7a 100644
--- a/apps/abs/utils/overJroShow.py
+++ b/apps/abs/utils/overJroShow.py
@@ -1,23 +1,28 @@
#!/usr/bin/python
-
-
import sys, os, os.path
import traceback
-import cgi, Cookie
+import cgi
+from http import cookies
+
import time, datetime
import types
import numpy
import numpy.fft
import scipy.linalg
import scipy.special
-from StringIO import StringIO
-#import Numeric
+from io import StringIO
-import Misc_Routines
-import TimeTools
-import JroAntSetup
-import Graphics_OverJro
-import Astro_Coords
+
+#import Misc_Routines
+from .Misc_Routines import CoFactors
+#import TimeTools
+from .TimeTools import Time , Julian ,Doy2Date
+#import JroAntSetup
+from .JroAntSetup import ReturnSetup
+#import Graphics_OverJro
+from .Graphics_OverJro import AntPatternPlot ,BFieldPlot,CelestialObjectsPlot,PatternCutPlot,SkyNoisePlot
+#import Astro_Coords
+from .Astro_Coords import Geodetic ,AltAz ,CelestialBodies
class JroPattern():
def __init__(self,pattern=0,path=None,filename=None,nptsx=101,nptsy=101,maxphi=5,fftopt=0, \
@@ -62,7 +67,7 @@ class JroPattern():
# Getting antenna configuration.
if filename:
- setup = JroAntSetup.ReturnSetup(path=path,filename=filename,pattern=pattern)
+ setup = ReturnSetup(path=path,filename=filename,pattern=pattern)
ues = setup["ues"]
phase = setup["phase"]
@@ -98,7 +103,7 @@ class JroPattern():
# To get a cut of the pattern.
self.getcut = getcut
- maxdcos = numpy.sin(maxphi*Misc_Routines.CoFactors.d2r)
+ maxdcos = numpy.sin(maxphi*CoFactors.d2r)
if dcosx==None:dcosx = ((numpy.arange(nptsx,dtype=float)/(nptsx-1))-0.5)*2*maxdcos
if dcosy==None:dcosy = ((numpy.arange(nptsy,dtype=float)/(nptsy-1))-0.5)*2*maxdcos
self.dcosx = dcosx
@@ -283,7 +288,7 @@ class JroPattern():
fft_phase[ix1:ix1+ndx-1,iy1:iy1+ndy-1] = phase[ix,ny-1-iy]
- fft_phase = fft_phase*Misc_Routines.CoFactors.d2r
+ fft_phase = fft_phase*CoFactors.d2r
pattern = numpy.abs(numpy.fft.fft2(fft_gain*numpy.exp(numpy.complex(0,1)*fft_phase)))**2
pattern = numpy.fft.fftshift(pattern)
@@ -310,16 +315,33 @@ class JroPattern():
Converted to Python by Freddy R. Galindo, ROJ, 20 September 2009.
"""
- attenuation = None
-# foldr = sys.path[-1] + os.sep + "resource" + os.sep
- base_path = os.path.dirname(os.path.abspath(__file__))
- #foldr = './resource'
- #filen = "attenuation.txt"
- attenuationFile = os.path.join(base_path,"resource","attenuation.txt")
- #ff = open(os.path.join(foldr,filen),'r')
- ff = open(attenuationFile,'r')
- exec(ff.read())
- ff.close()
+# attenuation = None
+# # foldr = sys.path[-1] + os.sep + "resource" + os.sep
+# base_path = os.path.dirname(os.path.abspath(__file__))
+# #foldr = './resource'
+# #filen = "attenuation.txt"
+# attenuationFile = os.path.join(base_path,"resource","attenuation.txt")
+# #ff = open(os.path.join(foldr,filen),'r')
+# ff = open(attenuationFile,'r')
+# print(ff.read())
+# exec(ff.read())
+# ff.close()
+ attenuation = numpy.array([[[-21.25,-15.25,-9.25,-3.25,03.25,09.25,15.25,21.25],
+ [-21.25,-15.25,-9.25,-3.25,03.25,09.25,15.25,21.25],
+ [-21.25,-15.25,-9.25,-3.25,03.25,09.25,15.25,21.25],
+ [-21.25,-15.25,-9.25,-3.25,03.25,09.25,15.25,21.25],
+ [-21.25,-15.25,-9.25,-3.25,03.25,09.25,15.25,21.25],
+ [-21.25,-15.25,-9.25,-3.25,03.25,09.25,15.25,21.25],
+ [-21.25,-15.25,-9.25,-3.25,03.25,09.25,15.25,21.25],
+ [-21.25,-15.25,-9.25,-3.25,03.25,09.25,15.25,21.25]],
+ [[21.25,21.25,21.25,21.25,21.25,21.25,21.25,21.25],
+ [15.25,15.25,15.25,15.25,15.25,15.25,15.25,15.25],
+ [09.25,09.25,09.25,09.25,09.25,09.25,09.25,09.25],
+ [03.25,03.25,03.25,03.25,03.25,03.25,03.25,03.25],
+ [-03.25,-03.25,-03.25,-03.25,-03.25,-03.25,-03.25,-03.25],
+ [-09.25,-09.25,-09.25,-09.25,-09.25,-09.25,-09.25,-09.25],
+ [-15.25,-15.25,-15.25,-15.25,-15.25,-15.25,-15.25,-15.25],
+ [-21.25,-21.25,-21.25,-21.25,-21.25,-21.25,-21.25,-21.25]]])
return attenuation
@@ -396,11 +418,11 @@ class JroPattern():
Converted to Python by Freddy R. Galindo, ROJ, 20 September 2009.
"""
- pos = self.eomwl*self.__readAttenuation()
+ pos = self.eomwl*self.__readAttenuation()
posx = pos[0,:,:]
posy = pos[1,:,:]
- phase = phase*Misc_Routines.CoFactors.d2r
+ phase = phase*CoFactors.d2r
module = numpy.zeros((self.nx,self.ny),dtype=complex)
for iy in range(self.ny):
for ix in range(self.nx):
@@ -452,8 +474,8 @@ class JroPattern():
# Tranforming from indexes to axis' values
xcenter = xx1[0] + (((xx1[xx1.size-1] - xx1[0])/(xx1.size -1))*(params[1]))
ycenter = yy1[0] + (((yy1[yy1.size-1] - yy1[0])/(yy1.size -1))*(params[2]))
- xwidth = ((xx1[xx1.size-1] - xx1[0])/(xx1.size-1))*(params[3])*(1/Misc_Routines.CoFactors.d2r)
- ywidth = ((yy1[yy1.size-1] - yy1[0])/(yy1.size-1))*(params[4])*(1/Misc_Routines.CoFactors.d2r)
+ xwidth = ((xx1[xx1.size-1] - xx1[0])/(xx1.size-1))*(params[3])*(1/CoFactors.d2r)
+ ywidth = ((yy1[yy1.size-1] - yy1[0])/(yy1.size-1))*(params[4])*(1/CoFactors.d2r)
meanwx = (xwidth*ywidth)
meanpos = numpy.array([xcenter,ycenter])
@@ -1057,14 +1079,14 @@ class overJroShow:
self.path = self.madForm.getvalue('path') #path donde se encuentra el archivo: patron de radiacion del usuario
else:
- print "Content-Type: text/html\n"
- print ' This cgi plot script was called without the proper arguments.
'
- print ' This is a script used to plot Antenna Cuts over Jicamarca Antenna
'
- print ' Required arguments:
'
- print ' pattern - chekbox indicating objects over jicamarca antenna
'
- print ' or'
- print '
filename - The pattern defined by users is a file text'
- print '
path - folder with pattern files'
+ print ("Content-Type: text/html\n")
+ print ('
This cgi plot script was called without the proper arguments.
')
+ print (' This is a script used to plot Antenna Cuts over Jicamarca Antenna
')
+ print (' Required arguments:
')
+ print (' pattern - chekbox indicating objects over jicamarca antenna
')
+ print (' or')
+ print ('
filename - The pattern defined by users is a file text')
+ print ('
path - folder with pattern files')
sys.exit(0)
@@ -1094,12 +1116,12 @@ class overJroShow:
if self.showType == 1:
if numpy.sum(self.objects) == 0:
if self.scriptHeaders == 0:
- print "Content-Type: text/html\n"
- print '
This cgi plot script was called without the proper arguments.
'
- print ' This is a script used to plot Antenna Cuts over Jicamarca Antenna
'
- print ' Required arguments:
'
- print ' objects - chekbox indicating objects over jicamarca antenna
'
- print ' Please, options in "Select Object" must be checked'
+ print ("Content-Type: text/html\n")
+ print ('
This cgi plot script was called without the proper arguments.
')
+ print (' This is a script used to plot Antenna Cuts over Jicamarca Antenna
')
+ print (' Required arguments:
')
+ print (' objects - chekbox indicating objects over jicamarca antenna
')
+ print (' Please, options in "Select Object" must be checked')
sys.exit(0)
#considerar para futura implementacion
@@ -1112,19 +1134,19 @@ class overJroShow:
else:
if self.scriptHeaders == 0:
- print "Content-Type: text/html\n"
-
- print '
This cgi plot script was called without the proper arguments.
'
- print ' This is a script used to plot Pattern Field and Celestial Objects over Jicamarca Antenna
'
- print ' Required arguments:
'
- print ' year - year of event
'
- print ' month - month of event
'
- print ' dom - day of month
'
- print ' pattern - pattern is defined by "Select an Experiment" list box
'
- print ' maxphi - maxphi is defined by "Max Angle" text box
'
- print ' objects - objects is a list defined by checkbox in "Select Object"
'
- print ' heights - heights is defined by "Heights" text box, for default heights=[100,500,1000]
'
- print ' showType - showType is a hidden element for show plot of Pattern&Object or Antenna Cuts or Sky Noise
'
+ print ("Content-Type: text/html\n")
+
+ print (' This cgi plot script was called without the proper arguments.
')
+ print (' This is a script used to plot Pattern Field and Celestial Objects over Jicamarca Antenna
')
+ print (' Required arguments:
')
+ print (' year - year of event
')
+ print (' month - month of event
')
+ print (' dom - day of month
')
+ print (' pattern - pattern is defined by "Select an Experiment" list box
')
+ print (' maxphi - maxphi is defined by "Max Angle" text box
')
+ print (' objects - objects is a list defined by checkbox in "Select Object"
')
+ print (' heights - heights is defined by "Heights" text box, for default heights=[100,500,1000]
')
+ print (' showType - showType is a hidden element for show plot of Pattern&Object or Antenna Cuts or Sky Noise
')
sys.exit(0)
@@ -1139,13 +1161,13 @@ class overJroShow:
else:
if self.scriptHeaders == 0:
- print "Content-Type: text/html\n"
- print ' This cgi plot script was called without the proper arguments.
'
- print ' This is a script used to plot Sky Noise over Jicamarca Antenna
'
- print ' Required arguments:
'
- print ' year - year of event
'
- print ' month - month of event
'
- print ' dom - day of month
'
+ print ("Content-Type: text/html\n")
+ print (' This cgi plot script was called without the proper arguments.
')
+ print (' This is a script used to plot Sky Noise over Jicamarca Antenna
')
+ print (' Required arguments:
')
+ print (' year - year of event
')
+ print (' month - month of event
')
+ print (' dom - day of month
')
sys.exit(0)
@@ -1193,11 +1215,11 @@ class overJroShow:
self.glon = -76.874383
- self.junkjd = TimeTools.Time(self.year,self.month,self.dom).change2julday()
- self.junklst = TimeTools.Julian(self.junkjd).change2lst(longitude=self.glon)
+ self.junkjd = Time(self.year,self.month,self.dom).change2julday()
+ self.junklst = Julian(self.junkjd).change2lst(longitude=self.glon)
# Finding RA of observatory for a specific date
- self.ra_obs = self.junklst*Misc_Routines.CoFactors.h2d
+ self.ra_obs = self.junklst*CoFactors.h2d
def initParameters(self):
@@ -1211,9 +1233,9 @@ class overJroShow:
# alfa = 1.46*Misc_Routines.CoFactors.d2r
# theta = 51.01*Misc_Routines.CoFactors.d2r
- alfa = 1.488312*Misc_Routines.CoFactors.d2r
+ alfa = 1.488312*CoFactors.d2r
th = 6.166710 + 45.0
- theta = th*Misc_Routines.CoFactors.d2r
+ theta = th*CoFactors.d2r
sina = numpy.sin(alfa)
cosa = numpy.cos(alfa)
@@ -1232,11 +1254,11 @@ class overJroShow:
self.initParameters()
self.doy = datetime.datetime(date.year,date.month,date.day).timetuple().tm_yday
- self.junkjd = TimeTools.Time(self.year,self.month,self.dom).change2julday()
- self.junklst = TimeTools.Julian(self.junkjd).change2lst(longitude=self.glon)
- self.ra_obs = self.junklst*Misc_Routines.CoFactors.h2d
+ self.junkjd = Time(self.year,self.month,self.dom).change2julday()
+ self.junklst = Julian(self.junkjd).change2lst(longitude=self.glon)
+ self.ra_obs = self.junklst*CoFactors.h2d
- date = TimeTools.Time(date.year,date.month,date.day).change2strdate(mode=2)
+ date = Time(date.year,date.month,date.day).change2strdate(mode=2)
mesg = 'Over Jicamarca: ' + date[0]
@@ -1254,7 +1276,7 @@ class overJroShow:
just_rx=just_rx
)
- dum = Graphics_OverJro.AntPatternPlot()
+ dum = AntPatternPlot()
dum.contPattern(iplot=0,
gpath=self.path4plotname,
@@ -1317,7 +1339,7 @@ class overJroShow:
# Plotting Contour Map
self.path4plotname = '/home/jespinoza/workspace/radarsys/trunk/webapp/apps/abs/static/images'
- dum = Graphics_OverJro.AntPatternPlot()
+ dum = AntPatternPlot()
dum.contPattern(iplot=ii,
gpath=self.path4plotname,
filename=self.plotname0,
@@ -1342,13 +1364,13 @@ class overJroShow:
[ra,dec,ha] = Astro_Coords.AltAz(vect_polar[1],vect_polar[0],self.junkjd).change2equatorial()
- print'Main beam position (HA(min), DEC(degrees)): %f %f'%(ha*4.,dec)
+ print('Main beam position (HA(min), DEC(degrees)): %f %f')%(ha*4.,dec)
self.main_dec = dec
self.ptitle = title
- Graphics_OverJro.AntPatternPlot().plotRaDec(gpath=self.path4plotname,
+ AntPatternPlot().plotRaDec(gpath=self.path4plotname,
filename=self.plotname0,
jd=self.junkjd,
ra_obs=self.ra_obs,
@@ -1377,7 +1399,7 @@ class overJroShow:
# Plotting B field.
# print "Drawing magnetic field over Observatory"
- Obj = Graphics_OverJro.BFieldPlot()
+ Obj = BFieldPlot()
Obj.plotBField(self.path4plotname,self.plotname0,dcos,alpha,nlon,nlat,self.dcosxrange,self.dcosyrange,ObjB.heights,ObjB.alpha_i)
@@ -1423,13 +1445,13 @@ class overJroShow:
tod = numpy.arange(ntod)/ntod*24.
- [month,dom] = TimeTools.Doy2Date(self.year,self.doy).change2date()
+ [month,dom] = Doy2Date(self.year,self.doy).change2date()
- jd = TimeTools.Time(self.year,month,dom,tod+self.UT).change2julday()
+ jd = Time(self.year,month,dom,tod+self.UT).change2julday()
if numpy.sum(self.show_object[1:]>0)!=0:
- self.ObjC = Graphics_OverJro.CelestialObjectsPlot(jd,self.main_dec,tod,self.maxha_min,self.show_object)
+ self.ObjC = CelestialObjectsPlot(jd,self.main_dec,tod,self.maxha_min,self.show_object)
self.ObjC.drawObject(self.glat,
self.glon,
@@ -1452,7 +1474,7 @@ class overJroShow:
#Init ObjCut for PatternCutPlot()
view_objects = numpy.where(self.show_object>0)
subplots = len(view_objects[0])
- ObjCut = Graphics_OverJro.PatternCutPlot(subplots)
+ ObjCut = PatternCutPlot(subplots)
for io in (numpy.arange(5)):
if self.show_object[io]==2:
@@ -1512,7 +1534,7 @@ class overJroShow:
m_distance = 404114.6 # distance to the Earth in km
m_diameter = 1734.4 # diameter in km.
width_star = numpy.arctan(m_distance/m_diameter)
- width_star = width_star/2./Misc_Routines.CoFactors.d2r*4.
+ width_star = width_star/2./CoFactors.d2r*4.
otitle = 'Moon cut'
# else:
# print "Moon is not passing over Observatory"
@@ -1544,7 +1566,7 @@ class overJroShow:
mins = numpy.int32((time - hour)*60.)
secs = numpy.int32(((time - hour)*60. - mins)*60.)
- ObjT = TimeTools.Time(self.year,self.month,self.dom,hour,mins,secs)
+ ObjT = Time(self.year,self.month,self.dom,hour,mins,secs)
subtitle = ObjT.change2strdate()
star_cut = numpy.exp(-(star_ha/width_star)**2./2.)
@@ -1585,46 +1607,45 @@ class overJroShow:
month = self.month
year = self.year
- julian = TimeTools.Time(year,month,dom).change2julday()
+ julian = Time(year,month,dom).change2julday()
[powr,time, lst] = Astro_Coords.CelestialBodies().skyNoise(julian)
- Graphics_OverJro.SkyNoisePlot([year,month,dom],powr,time,lst).getPlot(self.path4plotname,self.plotname2)
+ SkyNoisePlot([year,month,dom],powr,time,lst).getPlot(self.path4plotname,self.plotname2)
def outputHead(self,title):
- print "Content-Type: text/html"
- print
- self.scriptHeaders = 1
- print ''
- print ''
- print '\t' + title + ''
- print ''
+ print ("Content-Type: text/html")
+ print (self).scriptHeaders = 1
+ print ('')
+ print ('')
+ print ('\t' + title + '')
+ print ('')
# self.printJavaScript()
- print ''
+ print ('')
def printJavaScript(self):
print
def printBody(self):
- print ''
+ print ('')
# print 'Test Input Parms
'
# for key in self.madForm.keys():
# #print ' name=' + str(key)
@@ -1636,25 +1657,25 @@ class overJroShow:
# print '
name=' + str(key) + \
# ' value=' + str(cgi.escape(self.madForm.getvalue(key))) + ''
- print '
')
+
+ print ('')
+ print ('')
#def execute(self, serverdocspath, tmpdir, currentdate, finalpath, showType=0, maxphi=5.0, objects="[1,1]", heights="[150,500,1000]"):
def setInputParameters(self, serverpath, currentdate, finalpath, showType=0, maxphi=5.0, objects="[1,1]", heights="[150,500,1000]"):
diff --git a/apps/abs/utils/pat.png b/apps/abs/utils/pat.png
new file mode 100644
index 0000000000000000000000000000000000000000..19e21fbc9f479c2c7104e0e3681e606768978d84
GIT binary patch
literal 201548
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