|
Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://xmm.vilspa.esa.es/sas/8.0.0/doc/embadpixfind/node16.html
Дата изменения: Wed Jul 2 04:57:39 2008 Дата индексирования: Fri Sep 5 22:55:42 2008 Кодировка: Поисковые слова: http www.astronomy.ru forum index.php topic 4644.0.html |
Read the parameters
Define goodPixel array, set to True
if incremental then
Read the bad pixels already in file
goodPixel(bad pixels) = False
endif
if usecal then
Read the bad pixels in CAL
goodPixel(uplinked and dead pixel) = False
if includedeadpixels then Write dead pixels to output list
endif
Read map = projected image
Iterate
call findAllBad(map, goodPixel, bad)
until nothing new is found or niter is reached
Write bad pixels file
subroutine findAllBad(map, goodPixel, bad)
! Get local average around each pixel and estimated significance
call avMedFilter(map, goodPixel, medsmooth, badtest)
! Look for bright pixels
call findBadPix(map, goodPixel, medsmooth, badtest, False, bad)
if findbadsegments then
! Look for bright/dark columns
profil = sum(map,2)
call findBad1D(profil, bad)
! Look for bright/dark rows
profil = sum(map,1)
call findBad1D(profil, bad)
Update goodPixel and medsmooth/badtest around bad columns/rows
endif
! Look for dark pixels
call findBadPix(map, goodPixel, medsmooth, badtest, True, bad)
end subroutine findAllBad
subroutine avMedFilter(map, goodPixel, medsmooth, badtest)
Loop over current pixel
Consider all good pixels in window around current pixel
Extract average (or median+1 if smaller) into medsmooth
Estimate dispersion from average absolute deviation divided by 0.8
Estimate significance S1 of excess using Gaussian law
If larger than 3, estimate significance S2 of excess using Li and Ma
badtest = min(S1,S2)
endloop
end subroutine avMedFilter
subroutine findBadPix(map, goodPixel, medsmooth, badtest, negative, bad)
Loop over current bad pixel
Find maximum in badtest (minimum if negative) down to probathreshold
Get probability of excess using binomial law
if probability < probathreshold then
add bad pixel to list
Update goodPixel and medsmooth/badtest around maximum
endif
endloop
end subroutine findBadPix
subroutine findBad1D(profil, psf1D, bad)
Find bad columns in profil (same as findBadPix)
Loop over bad columns
Get expected distribution along column from its neighbours
width = 1/(expected count rate per pixel)
Get running integral over bins of width pixels
While total(rest of column) larger (lower if negative) than expected
Find maximum integral (minimum if negative)
Remove segment of width pixels around it
endwhile
endloop
end subroutine findBad1D