Viewing contents of file '../idllib/contrib/buie/astlist.pro'
;+
; NAME:
; astlist
; PURPOSE:
; Create a summary listing from a final astrometry file.
; DESCRIPTION:
;
; CATEGORY:
; Astrometry
; CALLING SEQUENCE:
; astlist,file
; INPUTS:
; file - Final astrometry file to read and summarize.
; outfile - (Optional), name of file to write results to.
;
; OPTIONAL INPUT PARAMETERS:
;
; KEYWORD INPUT PARAMETERS:
;
; OUTPUTS:
; All information is printed to screen.
; KEYWORD OUTPUT PARAMETERS:
;
; COMMON BLOCKS:
;
; SIDE EFFECTS:
;
; RESTRICTIONS:
;
; PROCEDURE:
;
; MODIFICATION HISTORY:
; 98/03/26, Written by Marc W. Buie, Lowell Observatory
; 98/11/04, MWB, now filters out magnitudes fainter than 80.0
;
;-
PRO astlist,file,outfile
if n_params() eq 0 then begin
print,'astlist,file[,outfile]'
return
endif
blanks = ' '
if badpar(file,7,0,CALLER='ASTLIST: (file) ') then return
if badpar(outfile,[0,7],0,CALLER='ASTLIST: (outfile) ',default='[none]') then return
rdast,file,fn,jd,raobs,decobs,mag,obs,id,nobs
IF nobs eq 0 THEN BEGIN
print,'File ',file,' is either empty or non-existent.'
return
ENDIF
; Sort astrometry by jd.
idx=sort(jd)
fn=fn[idx]
jd=jd[idx]
raobs=raobs[idx]
decobs=decobs[idx]
mag=mag[idx]
obs=obs[idx]
id=id[idx]
; Get a unique list of objects
object = id[uniq(id,sort(id))]
nobj = n_elements(object)
avgmag=fltarr(nobj)
magerr=fltarr(nobj)
objdir=fltarr(nobj)
dis =fltarr(nobj)
dt =fltarr(nobj)
rate =fltarr(nobj)
count =intarr(nobj)
rsig =fltarr(nobj)
ffn =strarr(nobj)
elong =intarr(nobj)
for i=0,nobj-1 do begin
z=where(id eq object[i],count0)
count[i] = count0
ffn[i] = fn[z[0]]
zg=where(id eq object[i] and mag lt 80.0 ,countgood)
IF countgood gt 1 THEN begin
avgmag[i] = mean(mag[zg])
magerr[i] = stdev(mag[zg])
endif else if countgood eq 1 then begin
avgmag[i] = mag[zg[0]]
magerr[i] = 0.
endif else begin
avgmag[i] = 99.9
magerr[i] = 0.
endelse
i1 = z[0]
i2 = z[count0-1]
; Compute rate and direction of motion using first and last points.
objdir[i] = atan(decobs[i2]-decobs[i1],raobs[i1]-raobs[i2])*!radeg
dis[i] = angsep(raobs[i1],decobs[i1],raobs[i2],decobs[i2])*!radeg*3600.0
dt[i] = (jd[i2]-jd[i1])*24.0
rate[i] = dis[i]/dt[i]
; compute rate from all adjacent pairs
if count0 ge 3 then begin
i1 = z[0:count0-2]
i2 = z[1:count0-1]
dr = angsep(raobs[i1],decobs[i1],raobs[i2],decobs[i2])*!radeg*3600.0 $
/ ((jd[i2]-jd[i1])*24.0)
rsig[i] = stdev([dr,rate[i]])
endif else begin
rsig[i] = 0.
endelse
; compute solar elongation at time of first point
sunpos,jd[z[0]],sra,sdec,/radian
elong[i] = fix(angsep(raobs[z[0]],decobs[z[0]],sra,sdec)*!radeg+0.5)
endfor
; Compute an estimate of the target range in AU. This assumes object
; is precisely at opposition. Rather than inverting the VT equation
; interpolate to get an idea of the distance.
rt=reverse(findgen(21*5)*3+0.5)
vt=148.0*((1.0-1.0/sqrt(rt))/(rt-1))
interp,vt,rt,rate,range
; range = 29.785 / (rate/3600.0/3600.0/!radeg) / 1.495978e8 / 2.0
fmt = '(a10,1x,a,1x,i2,2x,f4.1," +- ",f3.1,1x,f6.2,1x,f6.1,2x,' + $
'f5.1,1x,f4.1,2x,f4.2,2x,i3,1x,f5.1)'
idx=sort(rate)
; idx=sort(avgmag)
; idx=sort(objdir)
; idx=sort(elong)
title = 'Object 1st file N R mag (err)'+ $
' "/hr dir dr(") dt(h) vsig sel AU'
print,title
for i=0,nobj-1 do begin
print,object[idx[i]]+blanks,ffn[idx[i]], $
count[idx[i]],avgmag[idx[i]],magerr[idx[i]], $
rate[idx[i]],objdir[idx[i]],dis[idx[i]],dt[idx[i]],rsig[idx[i]], $
elong[idx[i]],range[idx[i]], $
format=fmt
endfor
if outfile ne '[none]' then begin
openw,lun,outfile,/get_lun
printf,lun,title
for i=0,nobj-1 do begin
printf,lun,object[idx[i]]+blanks,ffn[idx[i]], $
count[idx[i]],avgmag[idx[i]],magerr[idx[i]], $
rate[idx[i]],objdir[idx[i]],dis[idx[i]],dt[idx[i]],rsig[idx[i]], $
elong[idx[i]],range[idx[i]], $
format=fmt
endfor
free_lun,lun
endif
END