def test_error(self): '''Test that using edges outside of x range raises ValueError''' nx = 10 x = np.arange(nx) y = np.ones(nx) with self.assertRaises(ValueError): yy = rebin.trapz_rebin(x, y, edges=np.arange(-1, nx - 1)) with self.assertRaises(ValueError): yy = rebin.trapz_rebin(x, y, edges=np.arange(1, nx + 1))
def test_error(self): '''Test that using edges outside of x range raises ValueError''' nx = 10 x = np.arange(nx) y = np.ones(nx) with self.assertRaises(ValueError): yy = rebin.trapz_rebin(x, y, edges=np.arange(-1, nx-1)) with self.assertRaises(ValueError): yy = rebin.trapz_rebin(x, y, edges=np.arange(1, nx+1))
def test_nonuniform(self): '''test rebinning a non-uniform density''' for nx in range(5, 12): x = np.linspace(0, 2 * np.pi, nx) y = np.sin(x) edges = [0, 2 * np.pi] yy = rebin.trapz_rebin(x, y, edges=edges) self.assertTrue(np.allclose(yy, 0.0)) x = np.linspace(0, 2 * np.pi, 100) y = np.sin(x) edges = [0, 0.5 * np.pi, np.pi, 1.5 * np.pi, 2 * np.pi] yy = rebin.trapz_rebin(x, y, edges=edges) self.assertTrue(np.allclose(yy[0:2], 2 / np.pi, atol=5e-4)) self.assertTrue(np.allclose(yy[2:4], -2 / np.pi, atol=5e-4))
def test_nonuniform(self): '''test rebinning a non-uniform density''' for nx in range(5,12): x = np.linspace(0, 2*np.pi, nx) y = np.sin(x) edges = [0, 2*np.pi] yy = rebin.trapz_rebin(x, y, edges=edges) self.assertTrue(np.allclose(yy, 0.0)) x = np.linspace(0, 2*np.pi, 100) y = np.sin(x) edges = [0, 0.5*np.pi, np.pi, 1.5*np.pi, 2*np.pi] yy = rebin.trapz_rebin(x, y, edges=edges) self.assertTrue(np.allclose(yy[0:2], 2/np.pi, atol=5e-4)) self.assertTrue(np.allclose(yy[2:4], -2/np.pi, atol=5e-4))
def test_centers(self): '''Test with centers instead of edges''' nx = 10 x = np.arange(nx) y = np.ones(nx) xx = np.linspace(0.5, nx - 1.5) yy = rebin.trapz_rebin(x, y, xx) self.assertTrue(np.allclose(yy, 1.0), msg=str(yy))
def test_centers(self): '''Test with centers instead of edges''' nx = 10 x = np.arange(nx) y = np.ones(nx) xx = np.linspace(0.5, nx-1.5) yy = rebin.trapz_rebin(x, y, xx) self.assertTrue(np.allclose(yy, 1.0), msg=str(yy))
def test_trapzrebin(self): '''Test constant flux density at various binnings''' nx = 10 x = np.arange(nx) * 1.1 y = np.ones(nx) #- test various binnings for nedge in range(3, 10): edges = np.linspace(min(x), max(x), nedge) yy = rebin.trapz_rebin(x, y, edges=edges) self.assertTrue(np.all(yy == 1.0), msg=str(yy)) #- edges starting/stopping in the interior sum = rebin.trapz_rebin(x, y, edges=[0.5, 8.3])[0] for nedge in range(3, 3 * nx): edges = np.linspace(0.5, 8.3, nedge) yy = rebin.trapz_rebin(x, y, edges=edges) self.assertTrue(np.allclose(yy, 1.0), msg=str(yy))
def test_trapzrebin(self): '''Test constant flux density at various binnings''' nx = 10 x = np.arange(nx)*1.1 y = np.ones(nx) #- test various binnings for nedge in range(3,10): edges = np.linspace(min(x), max(x), nedge) yy = rebin.trapz_rebin(x, y, edges=edges) self.assertTrue(np.all(yy == 1.0), msg=str(yy)) #- edges starting/stopping in the interior sum = rebin.trapz_rebin(x, y, edges=[0.5, 8.3])[0] for nedge in range(3, 3*nx): edges = np.linspace(0.5, 8.3, nedge) yy = rebin.trapz_rebin(x, y, edges=edges) self.assertTrue(np.allclose(yy, 1.0), msg=str(yy))
def eval(self, coeff, wave, z): ''' Return template for given coefficients, wavelengths, and redshift Args: coeff : array of coefficients length self.nbasis wave : wavelengths at which to evaluate template flux z : redshift at which to evaluate template flux Returns: template flux array Notes: A single factor of (1+z)^-1 is applied to the resampled flux to conserve integrated flux after redshifting. ''' assert len(coeff) == self.nbasis flux = self.flux.T.dot(coeff).T / (1 + z) return trapz_rebin(self.wave * (1 + z), flux, wave)