def _sn_func(index, signal=None, noise=None):
"""
Default function to calculate the S/N of a bin with spaxels "index".
The Voronoi binning algorithm does not require this function to have a
specific form and this default one can be changed by the user if needed
by passing a different function as
... = voronoi_2d_binning(..., sn_func=sn_func)
The S/N returned by sn_func() does not need to be an analytic
function of S and N.
There is also no need for sn_func() to return the actual S/N.
Instead sn_func() could return any quantity the user needs to equalize.
For example sn_func() could be a procedure which uses ppxf to measure
the velocity dispersion from the coadded spectrum of spaxels "index"
and returns the relative error in the dispersion.
Of course an analytic approximation of S/N, like the one below,
speeds up the calculation.
:param index: integer vector of length N containing the indices of
the spaxels for which the combined S/N has to be returned.
The indices refer to elements of the vectors signal and noise.
:param signal: vector of length M>N with the signal of all spaxels.
:param noise: vector of length M>N with the noise of all spaxels.
:return: scalar S/N or another quantity that needs to be equalized.
"""
sn = np.sum(signal[index])/np.sqrt(np.sum(noise[index]**2))
# The following commented line illustrates, as an example, how one
# would include the effect of spatial covariance using the empirical
# Eq.(1) from http://adsabs.harvard.edu/abs/2015A%26A...576A.135G
# Note however that the formula is not accurate for large bins.
#
# sn /= 1 + 1.07*np.log10(index.size)
return sn
#----------------------------------------------------------------------
评论列表
文章目录