astropy / ccdproc

Astropy affiliated package for reducing optical/IR CCD data
https://ccdproc.readthedocs.io
BSD 3-Clause "New" or "Revised" License
89 stars 87 forks source link

Cosmic Ray Correction Gives NaN Values on Flats #800

Open kjkoeller opened 1 year ago

kjkoeller commented 1 year ago

Using these versions ccdproc 2.4.0, astropy 5.1.1, and numpy 1.22.3. I go through the whole process of overscan, trimming, bias, dark, and flat field correction. However, after the flats are combined to their respective filters and I run the following code:

good_flat = combined_flats[light.header['filter']]
reduced = ccdp.ccd_process(light, oscan=overscan_region, trim=trim_region, master_bias=zero,
                           master_flat=good_flat, dark_scale=True, gain=gain*u.electron/u.adu,
                           readnoise=rdnoise*u.electron, dark_frame=combined_dark, exposure_key='EXPTIME',
                           exposure_unit=u.second, gain_corrected=True, min_value=1.0)

It runs through the code no problem but the output for the science image is completely blank and the values that are given are NaN's across the whole image. However, when I don't do flat correction the science image is produced. I have also tried doing things more manually like as follows:

# Subtract the overscan, ccd[columns, rows] I think?
ccd = ccdp.subtract_overscan(ccd, fits_section=overscan_region, median=True, overscan_axis=1)

# Trim the overscan
ccd = ccdp.trim_image(ccd, fits_section=trim_region)

# cosmic ray reject above 5 sigmas and gain_apply is set to false because it changes the units of the image
new_ccd = ccdp.cosmicray_lacosmic(ccd, gain_apply=False, readnoise=rdnoise, gain=gain, sigclip=sigclip)

# Subtract bias
sub_ccd = ccdp.subtract_bias(new_ccd, zero)

# Subtract the dark current
reduced = ccdp.subtract_dark(sub_ccd, combined_dark, exposure_time='exptime', exposure_unit=u.second,
                             scale=True)

# flat field correct the science image based on filter
good_flat = combined_flats[reduced.header['filter']]
reduced = ccdp.flat_correct(ccd=reduced, flat=good_flat, min_value=1.0)

However, the same issue arises where the final science image is all NaN values and without flat correcting is a fine image without flat correction though. I have tested to make the sure the program is pulling the correct flat and only the master flats, and from the looks of things it is using the correct master flat image and only the master flat.

kjkoeller commented 1 year ago

So it actually seems that this line is the real issue:

new_ccd = ccdp.cosmicray_lacosmic(ccd, gain_apply=False, readnoise=rdnoise, gain=gain, sigclip=sigclip)

I must be entering something weird or applying a variable wrong.

mwcraig commented 1 year ago

Thanks for submitting this report @kjkoeller -- do you have a data file I could try running this on to see what the problem is?

I can give an email address to send it to if you want to keep the data private.

kjkoeller commented 1 year ago

The data is located here:

https://github.com/kjkoeller/EclipsingBinaries/tree/main/EclipsingBinaries/examples/calibration_images