Satellite Trails Detection
This module contains the tools needed for satellite detection within an ACS/WFC image as published in ACS ISR 2016-01.
Note
Only tested for ACS/WFC FLT and FLC images, but it should theoretically work for any instrument.
Requires skimage version 0.11.x or later.
skimage.transform.probabilistic_hough_line()
gives
slightly different results from run to run, but this should
not matter since detsat()
only provides a crude
approximation of the actual trail(s).
Performance is faster when plot=False
, where applicable.
Examples
>>> from acstools.satdet import detsat, make_mask
>>> from acstools.utils_findsat_mrt import update_dq
Find trail segments for a single image and extension without multiprocessing, and display plots (not shown) and verbose information:
>>> results, errors = detsat(
... 'jc8m10syq_flc.fits', chips=[4], n_processes=1,
... plot=True, verbose=True)
1 file(s) found...
Processing jc8m10syq_flc.fits[4]...
Rescale intensity percentiles: 110.161376953, 173.693756409
Length of PHT result: 42
min(x0)= 1, min(x1)= 269, min(y0)= 827, min(y1)= 780
max(x0)=3852, max(x1)=4094, max(y0)=1611, max(y1)=1545
buf=200
topx=3896, topy=1848
...
Trail Direction: Right to Left
42 trail segment(s) detected
...
End point list:
1. (1256, 1345), (2770, 1037)
2. ( 11, 1598), ( 269, 1545)
...
Total run time: 22.4326269627 s
>>> results[('jc8m10syq_flc.fits', 4)]
array([[[1242, 1348],
[2840, 1023]],
[[1272, 1341],
[2688, 1053]],
...
[[2697, 1055],
[2967, 1000]]])
>>> errors
{}
Find trail segments for multiple images and all ACS/WFC science extensions with multiprocessing:
>>> results, errors = detsat(
... '*_flc.fits', chips=[1, 4], n_processes=12, verbose=True)
6 file(s) found...
Using 12 processes
Number of trail segment(s) found:
abell2744-hffpar_acs-wfc_f814w_13495_11_01_jc8n11q9q_flc.fits[1]: 0
abell2744-hffpar_acs-wfc_f814w_13495_11_01_jc8n11q9q_flc.fits[4]: 4
abell2744_acs-wfc_f814w_13495_51_04_jc8n51hoq_flc.fits[1]: 2
abell2744_acs-wfc_f814w_13495_51_04_jc8n51hoq_flc.fits[4]: 34
abell2744_acs-wfc_f814w_13495_93_02_jc8n93a7q_flc.fits[1]: 20
abell2744_acs-wfc_f814w_13495_93_02_jc8n93a7q_flc.fits[4]: 20
j8oc01sxq_flc.fits[1]: 0
j8oc01sxq_flc.fits[4]: 0
jc8m10syq_flc.fits[1]: 0
jc8m10syq_flc.fits[4]: 38
jc8m32j5q_flc.fits[1]: 42
jc8m32j5q_flc.fits[4]: 12
Total run time: 34.6021330357 s
>>> results[('jc8m10syq_flc.fits', 4)]
array([[[1242, 1348],
[2840, 1023]],
[[1272, 1341],
[2688, 1053]],
...
[[2697, 1055],
[2967, 1000]]])
>>> errors
{}
For a given image and extension, create a DQ mask for a satellite trail using the first segment (other segments should give similar masks) based on the results from above (plots not shown):
>>> trail_coords = results[('jc8m10syq_flc.fits', 4)]
>>> trail_segment = trail_coords[0]
>>> trail_segment
array([[1199, 1357],
[2841, 1023]])
>>> mask = make_mask('jc8m10syq_flc.fits', 4, trail_segment,
... plot=True, verbose=True)
Rotation: -11.4976988695
Hit image edge at counter=26
Hit rotate edge at counter=38
Run time: 19.476323843 s
Update the corresponding DQ array using the mask from above:
>>> update_dq('jc8m10syq_flc.fits', 6, mask, verbose=True)
DQ flag value is 16384
Input... flagged NPIX=156362
Existing flagged NPIX=0
Newly... flagged NPIX=156362
jc8m10syq_flc.fits[6] updated
Functions
|
Find satellite trails in the given images and extensions. |
|
Create DQ mask for an image for a given satellite trail. |