;+
; Contains the fill_tab_error procedure
;
; :Author:
; Laurent Lamy
;
; :History:
; 2008/03/01: Created
;
; 2009/11/24: Last Edit
;-
;
;+
; Routine de remplissage des images radio (df_signal_plot.pro)
;
; :Params:
; tab: out, required, type=sometype
; image radio
; x: in, required, type=sometype
; séries temporelles de coordonnées
; y: in, required, type=sometype
; séries temporelles de coordonnées
; signal: in, required, type=sometype
; A parameter named signal
; reso: in, required, type=float
; a- pour les images dans le plan d'observation: valeur réelle donnant la résolution angulaire en degrés (typiquement 2)
; b- pour les images projetées: séries temporelles de coordonnées pour les points définissant la barre d'erreur associée au signal
; npts: in, required, type=int
; nombre de points de chaque barre d'erreur (typiquement 8)
; lim: in, required, type=sometype
; dimension de la carte (en rayons planétaires)
;
; :Keywords:
; dB: in, optional, type=byte
; change la convention de remplissage en "produit de flux"
; sum: in, optional, type=byte
; change la convention de remplissage en somme simple (occurrence)
;-
PRO fill_tab_error,tab,x,y,signal,reso,npts,lim,dB=dB,sum=sum
; Options: remplissage par défaut par "dilution" du signal initial dans sa
; barre d'erreur associée (division par le nombre de pixels correspondant,
sz=size(tab)
bin=2.*lim/sz(1)
n=n_elements(x)
for k=0l,n-1l do begin
; Coordonnées des points (x,y) dans l'image finale:
xx=long(x(k)/bin+sz(1)/2.)
yy=long(y(k)/bin+sz(2)/2.)
error=fltarr(2,npts)
; Coordonnées de leur barre d'erreur dans l'image finale:
if n_elements(reso) eq 1 then begin
; Cas image dans le plan d'observation:
rdeg=tan(reso*!dtor)*lim
error(0,*)=round((cos(findgen(npts)/npts*2.*!pi)*rdeg+x(k))/bin+sz(1)/2.)+0.5
error(1,*)=round((sin(findgen(npts)/npts*2.*!pi)*rdeg+y(k))/bin+sz(1)/2.)+0.5
endif else begin
; Cas image projetée:
error(0,*)=long(reso(0,*,k)/bin+sz(1)/2.)+0.5
error(1,*)=long(reso(1,*,k)/bin+sz(2)/2.)+0.5
endelse
; Remplissage:
if n_elements(error(0,*)) gt 2 then begin
result=polyfillv(error(0,*),error(1,*),sz(1),sz(1))
test=where(result eq (yy*sz(1)+xx))
if test(0) ne -1 then begin
if result(0) ne -1 and ~keyword_set(dB) and ~keyword_set(sum) then tab(result)+=signal(k)/n_elements(result)
if result(0) ne -1 and keyword_set(dB) then tab(result)+=10*alog10(signal(k)/n_elements(result)/1e-23>1)
if result(0) ne -1 and keyword_set(sum) then tab(result)+=signal(k)
endif
endif
endfor
end