add subtract_bkg funcition
Allow subtracting the bkg simpler
This commit is contained in:
@@ -239,19 +239,22 @@ def bkg_fit(data, error, mask, headers, subtract_error=True, display=False, save
|
||||
|
||||
error_bkg[i] *= bkg
|
||||
|
||||
n_error_array[i] = np.sqrt(n_error_array[i]**2 + error_bkg[i]**2)
|
||||
# n_error_array[i] = np.sqrt(n_error_array[i]**2 + error_bkg[i]**2)
|
||||
|
||||
# Substract background
|
||||
if subtract_error > 0:
|
||||
n_data_array[i][mask] = n_data_array[i][mask] - bkg
|
||||
n_data_array[i][np.logical_and(mask, n_data_array[i] <= 1e-3*bkg)] = 1e-3*bkg
|
||||
# if subtract_error > 0:
|
||||
# n_data_array[i][mask] = n_data_array[i][mask] - bkg
|
||||
# n_data_array[i][np.logical_and(mask, n_data_array[i] <= 1e-3*bkg)] = 1e-3*bkg
|
||||
|
||||
std_bkg[i] = image[np.abs(image-bkg)/bkg < 1.].std()
|
||||
background[i] = bkg
|
||||
|
||||
if subtract_error > 0:
|
||||
n_data_array, n_error_array, background, error_bkg = subtract_bkg(n_data_array, n_error_array, mask, background, error_bkg)
|
||||
|
||||
if display:
|
||||
display_bkg(data, background, std_bkg, headers, histograms=histograms, binning=binning, coeff=coeff, savename=savename, plots_folder=plots_folder)
|
||||
return n_data_array, n_error_array, headers, background
|
||||
return n_data_array, n_error_array, headers, background, error_bkg
|
||||
|
||||
|
||||
def bkg_hist(data, error, mask, headers, sub_type=None, subtract_error=True, display=False, savename=None, plots_folder=""):
|
||||
@@ -343,19 +346,22 @@ def bkg_hist(data, error, mask, headers, sub_type=None, subtract_error=True, dis
|
||||
|
||||
error_bkg[i] *= bkg
|
||||
|
||||
n_error_array[i] = np.sqrt(n_error_array[i]**2 + error_bkg[i]**2)
|
||||
# n_error_array[i] = np.sqrt(n_error_array[i]**2 + error_bkg[i]**2)
|
||||
|
||||
# Substract background
|
||||
if subtract_error > 0:
|
||||
n_data_array[i][mask] = n_data_array[i][mask] - bkg
|
||||
n_data_array[i][np.logical_and(mask, n_data_array[i] <= 1e-3*bkg)] = 1e-3*bkg
|
||||
# if subtract_error > 0:
|
||||
# n_data_array[i][mask] = n_data_array[i][mask] - bkg
|
||||
# n_data_array[i][np.logical_and(mask, n_data_array[i] <= 1e-3*bkg)] = 1e-3*bkg
|
||||
|
||||
std_bkg[i] = image[np.abs(image-bkg)/bkg < 1.].std()
|
||||
background[i] = bkg
|
||||
|
||||
if subtract_error > 0:
|
||||
n_data_array, n_error_array, background, error_bkg = subtract_bkg(n_data_array, n_error_array, mask, background, error_bkg)
|
||||
|
||||
if display:
|
||||
display_bkg(data, background, std_bkg, headers, histograms=histograms, binning=binning, coeff=coeff, savename=savename, plots_folder=plots_folder)
|
||||
return n_data_array, n_error_array, headers, background
|
||||
return n_data_array, n_error_array, headers, background, error_bkg
|
||||
|
||||
|
||||
def bkg_mini(data, error, mask, headers, sub_shape=(15, 15), subtract_error=True, display=False, savename=None, plots_folder=""):
|
||||
@@ -440,16 +446,31 @@ def bkg_mini(data, error, mask, headers, sub_shape=(15, 15), subtract_error=True
|
||||
bkg = np.sqrt(np.sum(sub_image**2)/sub_image.size)*subtract_error if subtract_error > 0 else np.sqrt(np.sum(sub_image**2)/sub_image.size)
|
||||
error_bkg[i] *= bkg
|
||||
|
||||
n_error_array[i] = np.sqrt(n_error_array[i]**2 + error_bkg[i]**2)
|
||||
# n_error_array[i] = np.sqrt(n_error_array[i]**2 + error_bkg[i]**2)
|
||||
|
||||
# Substract background
|
||||
if subtract_error > 0.:
|
||||
n_data_array[i][mask] = n_data_array[i][mask] - bkg
|
||||
n_data_array[i][np.logical_and(mask, n_data_array[i] <= 1e-3*bkg)] = 1e-3*bkg
|
||||
# if subtract_error > 0.:
|
||||
# n_data_array[i][mask] = n_data_array[i][mask] - bkg
|
||||
# n_data_array[i][np.logical_and(mask, n_data_array[i] <= 1e-3*bkg)] = 1e-3*bkg
|
||||
|
||||
std_bkg[i] = image[np.abs(image-bkg)/bkg < 1.].std()
|
||||
background[i] = bkg
|
||||
|
||||
if subtract_error > 0:
|
||||
n_data_array, n_error_array, background, error_bkg = subtract_bkg(n_data_array, n_error_array, mask, background, error_bkg)
|
||||
|
||||
if display:
|
||||
display_bkg(data, background, std_bkg, headers, rectangle=rectangle, savename=savename, plots_folder=plots_folder)
|
||||
return n_data_array, n_error_array, headers, background
|
||||
return n_data_array, n_error_array, headers, background, error_bkg
|
||||
|
||||
def subtract_bkg(data, error, mask, background, error_bkg):
|
||||
assert data.ndim == 3, "Input data must have more than 1 image."
|
||||
|
||||
n_data_array, n_error_array = deepcopy(data), deepcopy(error)
|
||||
|
||||
for i in range(data.shape[0]):
|
||||
n_data_array[i][mask] = n_data_array[i][mask] - background[i]
|
||||
n_data_array[i][np.logical_and(mask, n_data_array[i] <= 1e-3 * background[i])] = 1e-3 * background[i]
|
||||
n_error_array[i] = np.sqrt(n_error_array[i]**2 + error_bkg[i]**2)
|
||||
|
||||
return n_data_array, n_error_array, background, error_bkg
|
||||
@@ -267,7 +267,7 @@ def plot_Stokes(Stokes, savename=None, plots_folder=""):
|
||||
|
||||
|
||||
def polarization_map(Stokes, data_mask=None, rectangle=None, SNRp_cut=3., SNRi_cut=3.,
|
||||
flux_lim=None, step_vec=1, vec_scale=2., savename=None, plots_folder="", display="default"):
|
||||
flux_lim=None, step_vec=1, vec_scale=2., savename=None, plots_folder="", display="default", **kwargs):
|
||||
"""
|
||||
Plots polarization map from Stokes HDUList.
|
||||
----------
|
||||
|
||||
@@ -477,17 +477,18 @@ def get_error(data_array, headers, error_array=None, data_mask=None, sub_type=No
|
||||
err_flat = data*0.03
|
||||
|
||||
if (sub_type is None):
|
||||
n_data_array, c_error_bkg, headers, background = bkg_hist(
|
||||
n_data_array, c_error_bkg, headers, background, error_bkg = bkg_hist(
|
||||
data, error, mask, headers, subtract_error=subtract_error, display=display, savename=savename, plots_folder=plots_folder)
|
||||
|
||||
elif isinstance(sub_type, str):
|
||||
if sub_type.lower() in ['auto']:
|
||||
n_data_array, c_error_bkg, headers, background = bkg_fit(
|
||||
n_data_array, c_error_bkg, headers, background, error_bkg = bkg_fit(
|
||||
data, error, mask, headers, subtract_error=subtract_error, display=display, savename=savename, plots_folder=plots_folder)
|
||||
else:
|
||||
n_data_array, c_error_bkg, headers, background = bkg_hist(
|
||||
n_data_array, c_error_bkg, headers, background, error_bkg = bkg_hist(
|
||||
data, error, mask, headers, sub_type=sub_type, subtract_error=subtract_error, display=display, savename=savename, plots_folder=plots_folder)
|
||||
elif isinstance(sub_type, tuple):
|
||||
n_data_array, c_error_bkg, headers, background = bkg_mini(
|
||||
n_data_array, c_error_bkg, headers, background, error_bkg = bkg_mini(
|
||||
data, error, mask, headers, sub_shape=sub_type, subtract_error=subtract_error, display=display, savename=savename, plots_folder=plots_folder)
|
||||
else:
|
||||
print("Warning: Invalid subtype.")
|
||||
@@ -496,7 +497,7 @@ def get_error(data_array, headers, error_array=None, data_mask=None, sub_type=No
|
||||
n_error_array = np.sqrt(err_wav**2+err_psf**2+err_flat**2+c_error_bkg**2)
|
||||
|
||||
if return_background:
|
||||
return n_data_array, n_error_array, headers, background
|
||||
return n_data_array, n_error_array, headers, background, error_bkg # return background error as well
|
||||
else:
|
||||
return n_data_array, n_error_array, headers
|
||||
|
||||
|
||||
Reference in New Issue
Block a user