Formatting IOD output
parent
5fd20d9020
commit
23fdea158d
|
@ -1,6 +1,9 @@
|
||||||
# Object files
|
# Object files
|
||||||
*.o
|
*.o
|
||||||
|
|
||||||
|
# Python compiled objects
|
||||||
|
*.pyc
|
||||||
|
|
||||||
# Emacs backup files
|
# Emacs backup files
|
||||||
*~
|
*~
|
||||||
|
|
||||||
|
|
|
@ -21,13 +21,30 @@ def pos2rel(ff,x,y):
|
||||||
|
|
||||||
return world[0,0],world[0,1]
|
return world[0,0],world[0,1]
|
||||||
|
|
||||||
def dec2sex(angle):
|
# IOD position format 2: RA/DEC = HHMMmmm+DDMMmm MX (MX in minutes of arc)
|
||||||
if angle<0.0:
|
def format_position(ra,de):
|
||||||
|
ram=60.0*ra/15.0
|
||||||
|
rah=int(np.floor(ram/60.0))
|
||||||
|
ram-=60.0*rah
|
||||||
|
|
||||||
|
des=np.sign(de)
|
||||||
|
dem=60.0*np.abs(de)
|
||||||
|
ded=int(np.floor(dem/60.0))
|
||||||
|
dem-=60.0*ded
|
||||||
|
|
||||||
|
if des==-1:
|
||||||
sign="-"
|
sign="-"
|
||||||
else:
|
else:
|
||||||
sign="+"
|
sign="+"
|
||||||
angle=60.0*np.abs(angle)
|
|
||||||
|
return ("%02d%06.3f%c%02d%05.2f"%(rah,ram,sign,ded,dem)).replace(".","")
|
||||||
|
|
||||||
|
# Format IOD line
|
||||||
|
def format_iod_line(norad,cospar,site_id,t,ra,de):
|
||||||
|
pstr=format_position(ra,de)
|
||||||
|
tstr=t.replace("-","").replace("T","").replace(":","").replace(".","")
|
||||||
|
|
||||||
|
return "%05d %-9s %04d G %s 17 25 %s 37 S"%(norad,cospar,site_id,tstr,pstr)
|
||||||
|
|
||||||
# Settings
|
# Settings
|
||||||
|
|
||||||
|
@ -78,10 +95,12 @@ for line in lines:
|
||||||
x,y,t,sig=ff.significant(trksig,id.x0,id.y0,id.dxdt,id.dydt,trkrmin)
|
x,y,t,sig=ff.significant(trksig,id.x0,id.y0,id.dxdt,id.dydt,trkrmin)
|
||||||
|
|
||||||
# Fit tracks
|
# Fit tracks
|
||||||
if len(x)>ntrkmin:
|
if len(t)>ntrkmin:
|
||||||
obs=observation(ff,x,y,t,sig)
|
obs=observation(ff,x,y,t,sig)
|
||||||
|
|
||||||
obs.ra,obs.de=pos2rel(ff,obs.x0,obs.y0)
|
print("%s"%format_iod_line(id.norad,"18 555A",ff.site_id,obs.nfd,obs.ra,obs.de))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Plot
|
# Plot
|
||||||
ppgplot.pgopen("/xs")
|
ppgplot.pgopen("/xs")
|
||||||
|
@ -112,12 +131,12 @@ for line in lines:
|
||||||
|
|
||||||
ppgplot.pgend()
|
ppgplot.pgend()
|
||||||
|
|
||||||
plt.figure()
|
# plt.figure()
|
||||||
plt.plot(t,x,'.')
|
# plt.plot(t,x,'.')
|
||||||
plt.plot(t,y,'.')
|
# plt.plot(t,y,'.')
|
||||||
plt.plot([obs.tmin,obs.tmax],[obs.xmin,obs.xmax])
|
# plt.plot([obs.tmin,obs.tmax],[obs.xmin,obs.xmax])
|
||||||
plt.plot([obs.tmin,obs.tmax],[obs.ymin,obs.ymax])
|
# plt.plot([obs.tmin,obs.tmax],[obs.ymin,obs.ymax])
|
||||||
plt.show()
|
# plt.show()
|
||||||
|
|
||||||
# Track and stack
|
# Track and stack
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from astropy.io import fits
|
from astropy.io import fits
|
||||||
from astropy.time import Time
|
from astropy.time import Time
|
||||||
|
from astropy import wcs
|
||||||
|
|
||||||
class observation:
|
class observation:
|
||||||
"""Satellite observation"""
|
"""Satellite observation"""
|
||||||
|
@ -30,6 +31,11 @@ class observation:
|
||||||
self.ymin=self.y0+self.dydt*(self.tmin-self.tmid)
|
self.ymin=self.y0+self.dydt*(self.tmin-self.tmid)
|
||||||
self.xmax=self.x0+self.dxdt*(self.tmax-self.tmid)
|
self.xmax=self.x0+self.dxdt*(self.tmax-self.tmid)
|
||||||
self.ymax=self.y0+self.dydt*(self.tmax-self.tmid)
|
self.ymax=self.y0+self.dydt*(self.tmax-self.tmid)
|
||||||
|
|
||||||
|
# Compute ra/dec
|
||||||
|
world=ff.w.wcs_pix2world(np.array([[self.x0,self.y0]]),1)
|
||||||
|
self.ra=world[0,0]
|
||||||
|
self.de=world[0,1]
|
||||||
|
|
||||||
class satid:
|
class satid:
|
||||||
"""Satellite identifications"""
|
"""Satellite identifications"""
|
||||||
|
@ -109,6 +115,7 @@ class fourframe:
|
||||||
self.cunit=[hdu[0].header['CUNIT1'],hdu[0].header['CUNIT2']]
|
self.cunit=[hdu[0].header['CUNIT1'],hdu[0].header['CUNIT2']]
|
||||||
self.crres=np.array([hdu[0].header['CRRES1'],hdu[0].header['CRRES2']])
|
self.crres=np.array([hdu[0].header['CRRES1'],hdu[0].header['CRRES2']])
|
||||||
|
|
||||||
|
# Compute image properties
|
||||||
self.sx=np.sqrt(self.cd[0,0]**2+self.cd[1,0]**2)
|
self.sx=np.sqrt(self.cd[0,0]**2+self.cd[1,0]**2)
|
||||||
self.sy=np.sqrt(self.cd[0,1]**2+self.cd[1,1]**2)
|
self.sy=np.sqrt(self.cd[0,1]**2+self.cd[1,1]**2)
|
||||||
self.wx=self.nx*self.sx
|
self.wx=self.nx*self.sx
|
||||||
|
@ -116,6 +123,14 @@ class fourframe:
|
||||||
self.vmin=np.mean(self.zmax)-2.0*np.std(self.zmax)
|
self.vmin=np.mean(self.zmax)-2.0*np.std(self.zmax)
|
||||||
self.vmax=np.mean(self.zmax)+6.0*np.std(self.zmax)
|
self.vmax=np.mean(self.zmax)+6.0*np.std(self.zmax)
|
||||||
|
|
||||||
|
# Setup WCS
|
||||||
|
self.w=wcs.WCS(naxis=2)
|
||||||
|
self.w.wcs.crpix=self.crpix
|
||||||
|
self.w.wcs.crval=self.crval
|
||||||
|
self.w.wcs.cd=self.cd
|
||||||
|
self.w.wcs.ctype=self.ctype
|
||||||
|
self.w.wcs.set_pv([(2,1,45.0)])
|
||||||
|
|
||||||
|
|
||||||
def significant(self,sigma,x0,y0,dxdt,dydt,rmin=10.0):
|
def significant(self,sigma,x0,y0,dxdt,dydt,rmin=10.0):
|
||||||
"""Extract significant points"""
|
"""Extract significant points"""
|
||||||
|
|
Loading…
Reference in New Issue