diff --git a/qsoabsfind/absfinder.py b/qsoabsfind/absfinder.py index 501d997..0c393ea 100644 --- a/qsoabsfind/absfinder.py +++ b/qsoabsfind/absfinder.py @@ -69,8 +69,8 @@ def read_single_spectrum_and_find_absorber(fits_file, spec_index, absorber, **kw lam_obs = spectra.wavelength # Define the wavelength range for searching the absorber - min_wave, max_wave = lam_obs.min() + kwargs["lam_edge_sep"], lam_obs.max() - kwargs["lam_edge_sep"] # avoiding edges - + min_wave, max_wave = lam_obs.min(), lam_obs.max() + # Retrieve flux and error data, ensuring consistent dtype for Numba compatibility residual, error = spectra.flux.astype('float64'), spectra.error.astype('float64') lam_obs = lam_obs.astype('float64') @@ -81,7 +81,7 @@ def read_single_spectrum_and_find_absorber(fits_file, spec_index, absorber, **kw # Identify the wavelength region for searching the specified absorber lam_search, unmsk_residual, unmsk_error = absorber_search_window( - lam_obs, residual, error, z_qso, absorber, min_wave, max_wave, verbose=kwargs['verbose']) + lam_obs, residual, error, z_qso, absorber, min_wave, max_wave, lam_edge_sep= kwargs["lam_edge_sep"], verbose=kwargs['verbose']) # Verify that the arrays are of equal size assert lam_search.size == unmsk_residual.size == unmsk_error.size, "Mismatch in array sizes of lam_search, unmsk_residual, and unmsk_error" diff --git a/qsoabsfind/absorberutils.py b/qsoabsfind/absorberutils.py index aef418c..65cbf28 100644 --- a/qsoabsfind/absorberutils.py +++ b/qsoabsfind/absorberutils.py @@ -534,7 +534,7 @@ def redshift_estimate(fitted_obs_l1, fitted_obs_l2, std_fitted_obs_l1, std_fitte return z_corr, z_err -def absorber_search_window(wavelength, residual, err_residual, zqso, absorber, min_wave, max_wave, verbose=False): +def absorber_search_window(wavelength, residual, err_residual, zqso, absorber, min_wave, max_wave, lam_edge_sep=0, verbose=False): """ Wrapper function to return the most basic wavelength window for absorber search. @@ -547,6 +547,7 @@ def absorber_search_window(wavelength, residual, err_residual, zqso, absorber, m absorber (str): Options 'CIV', 'MgII'. min_wave (float): minimum wavelength edge (in Ang) max_wave (float): maximum wavelength edge (in Ang) + lam_edge_sep (float): separation from minimum wavelength, i.e. lam_min + lam_edge_sep, this is just to make sure that we avoid the very edge of the spectrum verbose (bool, optional): If True will print time info. Default is False. Returns: @@ -557,12 +558,12 @@ def absorber_search_window(wavelength, residual, err_residual, zqso, absorber, m if absorber == 'MgII': lam_CIV = lines['CIV_1549'] * (1 + zqso + lines['dz_start']) #redshifted from CIV emission lines lam_MgII = lines['MgI_2799'] * (1 + zqso - lines['dz_end']) #blueshifted MgII emission lines - lam_start = max(min_wave, lam_CIV) + lam_start = max(min_wave, lam_CIV) + lam_edge_sep lam_end = min(max_wave, lam_MgII) elif absorber == 'CIV': dz = (lines['dv'] / speed_of_light) * (1 + zqso) lam_CIV = lines['CIV_1549'] * (1 + zqso + dz) - lam_start = max(min_wave, 1310 * (1 + zqso)) # This is from Cooksey et al 2013 + lam_start = max(min_wave, 1310 * (1 + zqso)) + lam_edge_sep # This is from Cooksey et al 2013 lam_end = min(lam_CIV, max_wave) else: raise ValueError("Absorber must be 'CIV' or 'MgII'")