def test_sanity_check_stack(self): # the average-stacked SED of 6 identical SEDs should just be # one of the SEDs used in the stack. seg1 = sed.Spectrum(x=self.x,y=self.y,yerr=self.yerr,z=self.z) seg2 = sed.Spectrum(x=self.x,y=self.y,yerr=self.yerr,z=self.z) seg3 = sed.Spectrum(x=self.x,y=self.y,yerr=self.yerr,z=self.z) seg4 = sed.Spectrum(x=self.x,y=self.y,yerr=self.yerr,z=self.z) seg5 = sed.Spectrum(x=self.x,y=self.y,yerr=self.yerr,z=self.z) seg6 = sed.Spectrum(x=self.x,y=self.y,yerr=self.yerr,z=self.z) segments = [seg1,seg2,seg3,seg4,seg5,seg6] aggsed = sed.AggregateSed(segments) bin = seg1.x[1] - seg1.x[0] stacksed = sed.stack(aggsed, bin, 'avg') numpy.testing.assert_array_almost_equal(stacksed.y,aggsed.y[0],decimal=6) self.assertEqual(stacksed[3].y,aggsed.y[0][3]) self.assertEqual(len(stacksed.y), len(aggsed.y[0])) self.assertEqual(stacksed.counts[0], 6) stacksed = sed.stack(aggsed, bin, 'wavg') numpy.testing.assert_array_almost_equal(stacksed.y,aggsed.y[0],decimal=6) self.assertEqual(stacksed[3].y,aggsed.y[0][3]) stacksed = sed.stack(aggsed, bin, 'sum') numpy.testing.assert_array_almost_equal(stacksed.y,aggsed.y[0]*6.,decimal=6) self.assertEqual(stacksed[3].y,aggsed.y[0][3]*6.)
def test_log_binning(self): aggsed = load_cat(sed_filename, column_map) stacked_seds = sed.stack(aggsed, 0.2, 'avg', logbin=True) control_x = 10**numpy.array([3.6,3.8,4.0,4.4,4.6,4.8,5.0,5.4]) control_y = numpy.array([23.63388888888888, 22.751176470588234, 21.614166666666, 20.295, 19.485, 19.0783333333, 18.88, 17.565]) numpy.testing.assert_allclose(stacked_seds.x, control_x) numpy.testing.assert_allclose(stacked_seds.y, control_y)
def test_stack_one_segment(self): seg1 = sed.Sed(x=numpy.linspace(1000,10000, num=100), y=numpy.linspace(1000,10000, num=100)*0.001) seg2 = sed.Sed(x=numpy.linspace(1000,10000, num=100), y=numpy.linspace(1000,10000, num=100)*0.001) seg1.add_segment(seg2) bin = seg1.x[1] - seg1.x[0] stackedsed = sed.stack([seg1], bin, 'avg') self.assertEqual(stackedsed[3].y,seg1[3].y) self.assertEqual(stackedsed.counts[0],2)
def test_stack_seds(self): aggsed = load_cat(sed_filename, column_map) stacked_seds = sed.stack(aggsed, 50, 'avg') control_x = numpy.array([3823., 4473., 4773., 5473., 6273., 7623., 9023., 12473., 21573., 36023., 45023., 58023., 80023., 240023.]) control_y = numpy.array([23.9516667, 23.498333333, 23.45166667, 23.071666667, 22.71166667, 22.414, 21.97833333, 21.25, 20.295, 19.61, 19.36, 19.07833333, 18.88, 17.565]) numpy.testing.assert_allclose(stacked_seds.x, control_x) numpy.testing.assert_allclose(stacked_seds.y, control_y) stacked_seds = sed.stack(aggsed, 50, 'wavg') control_x = numpy.array([3823., 4473., 4773., 5473., 6273., 7623., 9023., 12473., 21573., 36023., 45023., 58023., 80023., 240023.]) control_y = numpy.array([23.9516667, 23.498333333, 23.45166667, 23.071666667, 22.71166667, 22.414, 21.97833333, 21.25, 20.295, 19.61, 19.36, 19.07833333, 18.88, 17.565]) numpy.testing.assert_allclose(stacked_seds.x, control_x) numpy.testing.assert_allclose(stacked_seds.y, control_y)
def test_stack_list_of_aggregateseds(self): seg1 = sed.Sed(x=self.x,y=self.y,yerr=self.yerr,z=self.z) seg2 = sed.Sed(x=self.x,y=self.y,yerr=self.yerr,z=self.z) seg3 = sed.Sed(x=self.x,y=self.y,yerr=self.yerr,z=self.z) seg4 = sed.Spectrum(x=self.x,y=self.y,yerr=self.yerr,z=self.z) seg5 = sed.Spectrum(x=self.x,y=self.y,yerr=self.yerr,z=self.z) seg6 = sed.Spectrum(x=self.x,y=self.y,yerr=self.yerr,z=self.z) bin = seg1.x[1] - seg1.x[0] aggsed = sed.AggregateSed([seg1,seg2,seg3,seg4,seg5,seg6]) stacked_seds = sed.stack([aggsed,aggsed], bin, 'avg') self.assertEqual(stacked_seds.y[3],aggsed[0].y[3]) numpy.testing.assert_array_almost_equal(stacked_seds.y[0],aggsed[0].y[0],decimal=6) self.assertEqual(stacked_seds.counts[0], 12)
def test_no_y_errors_avg(self): seg1 = sed.Spectrum(x=self.x,y=self.y,z=self.z) seg2 = sed.Spectrum(x=self.x,y=self.y,z=self.z) seg3 = sed.Spectrum(x=self.x,y=self.y,z=self.z) seg4 = sed.Spectrum(x=self.x,y=self.y,yerr=self.yerr,z=self.z) seg5 = sed.Spectrum(x=self.x,y=self.y,yerr=self.yerr,z=self.z) seg6 = sed.Spectrum(x=self.x,y=self.y,yerr=self.yerr,z=self.z) segments = [seg1,seg2,seg3,seg4,seg5,seg6] aggsed = sed.AggregateSed(segments) bin = seg1.x[1] - seg1.x[0] stacksed = sed.stack(aggsed, bin, 'avg') self.assertEqual(stacksed[3].y,aggsed.y[0][3]) numpy.testing.assert_array_almost_equal(stacksed.y,aggsed.y[0],decimal=6)
def test_stack_segments(self): seg1 = sed.Sed(x=self.x,y=self.y,yerr=self.yerr,z=self.z) seg2 = sed.Sed(x=self.x,y=self.y,yerr=self.yerr,z=self.z) seg3 = sed.Sed(x=self.x,y=self.y,yerr=self.yerr,z=self.z) seg4 = sed.Spectrum(x=self.x,y=self.y,yerr=self.yerr,z=self.z) seg5 = sed.Spectrum(x=self.x,y=self.y,yerr=self.yerr,z=self.z) seg6 = sed.Spectrum(x=self.x,y=self.y,yerr=self.yerr,z=self.z) bin = seg1.x[1] - seg1.x[0] aggsed = [seg1,seg2,seg3,seg4,seg5,seg6] stacked_seds = sed.stack(aggsed, bin, 'wavg') self.assertEqual(stacked_seds.y[3],aggsed[0].y[3]) self.assertEqual(stacked_seds.yerr[3], 0.0) # variance of identical values is 0.0 numpy.testing.assert_array_almost_equal(stacked_seds.y[0],aggsed[0].y[0],decimal=6) self.assertEqual(stacked_seds.counts[0], 6)
def test_no_y_errors_sum(self): seg1 = sed.Spectrum(x=self.x,y=self.y,z=self.z) seg2 = sed.Spectrum(x=self.x,y=self.y,z=self.z) seg3 = sed.Spectrum(x=self.x,y=self.y,z=self.z) seg4 = sed.Spectrum(x=self.x,y=self.y,yerr=self.yerr,z=self.z) seg5 = sed.Spectrum(x=self.x,y=self.y,yerr=self.yerr,z=self.z) seg6 = sed.Spectrum(x=self.x,y=self.y,yerr=self.yerr,z=self.z) segments = [seg1,seg2,seg3,seg4,seg5,seg6] aggsed = sed.AggregateSed(segments) bin = seg1.x[1] - seg1.x[0] stacksed = sed.stack(aggsed, bin, 'sum') stack_sedarray = stacksed._toarray() numpy.testing.assert_array_almost_equal(stacksed.y,aggsed.y[0]*6.,decimal=6) self.assertEqual(stacksed[3].y,aggsed.y[0][3]*6.) self.assertEqual(len(stacksed.xunit), len(stacksed.x))
def test_user_defined_function(self): seg1 = sed.Spectrum(x=self.x,y=self.y,z=self.z) seg2 = sed.Spectrum(x=self.x,y=self.y,z=self.z) seg3 = sed.Spectrum(x=self.x,y=self.y,z=self.z) segments = [seg1,seg2,seg3] aggsed = sed.AggregateSed(segments) bin = seg1.x[1] - seg1.x[0] def my_average(yarr, yerrarr, nans): yout = numpy.average(yarr) yerrarr = numpy.average(yerrarr) counts = len(yarr) return yout, yerrarr, counts stacksed = sed.stack(aggsed, bin, my_average) self.assertEqual(stacksed.counts[0], 3) self.assertEqual(stacksed[3].y,aggsed.y[0][3])
def test_no_y_errors_wavg(self): seg1 = sed.Spectrum(x=self.x,y=self.y,z=self.z) seg2 = sed.Spectrum(x=self.x,y=self.y,z=self.z) seg3 = sed.Spectrum(x=self.x,y=self.y,z=self.z) seg4 = sed.Spectrum(x=self.x,y=self.y,yerr=self.yerr,z=self.z) seg5 = sed.Spectrum(x=self.x,y=self.y,yerr=self.yerr,z=self.z) seg6 = sed.Spectrum(x=self.x,y=self.y,yerr=self.yerr,z=self.z) segments = [seg1,seg2,seg3,seg4,seg5,seg6] aggsed = sed.AggregateSed(segments) bin = seg1.x[1] - seg1.x[0] stacksed = sed.stack(aggsed, bin, 'wavg') # because there are seds with no y-errors, stack() will # use 'avg' instead of 'wavg'. self.assertEqual(stacksed[3].y,aggsed.y[0][3]) self.assertEqual(stacksed[3].yerr,0.0) numpy.testing.assert_array_almost_equal(stacksed.y,aggsed.y[0],decimal=6) self.assertEqual(stacksed.counts[0], 6)
#plt.plot(aggsed.x,aggsed.y,'o') #plt.show() restframe_aggsed = aggsed.shift(0) #plt.loglog(restframe_aggsed.x[0],restframe_aggsed.y[0],'o',restframe_aggsed.x[1],restframe_aggsed.y[1],'o',restframe_aggsed.x[2],restframe_aggsed.y[2],'o',restframe_aggsed.x[3],restframe_aggsed.y[3],'o',restframe_aggsed.x[4],restframe_aggsed.y[4],'o',restframe_aggsed.x[5],restframe_aggsed.y[5],'o') #plt.show() norm_point_aggsed = restframe_aggsed.normalize_at_point(5000.0, 1e-5, norm_operator=1) print '' norm_int_aggsed = restframe_aggsed.normalize_by_int() plt.plot(restframe_aggsed.x[1],restframe_aggsed.y[1],'ko', norm_point_aggsed.x[1],norm_point_aggsed.y[1],'go', norm_int_aggsed.x[1],norm_int_aggsed.y[1],'ro') plt.legend(('restframe','norm_at_point','norm_by_int'), fontsize='x-small', loc=2) plt.show() start = datetime.datetime.now() stack_i = stack(norm_int_aggsed, 0.1, 'wavg', fill='remove', logbin=True) stack_p = stack(norm_point_aggsed, 0.1, 'wavg', fill='remove', logbin=True) stack_rf = stack(restframe_aggsed, 0.1, 'wavg', fill='remove', logbin=True) end = datetime.datetime.now() print(end - start) plt.loglog(stack_rf.x,stack_rf.y,'ko',stack_p.x,stack_p.y,'go',stack_i.x,stack_i.y,'ro') plt.legend(('restframe','norm_at_point','norm_by_int'),fontsize='x-small', loc=2) plt.show()
files = os.listdir(test_directory) specs = [] counter = 0 while counter < 14: spec = load_sed(test_directory+files[counter], sed_type="spectrum") specs.append(spec) counter += 1 #specs = [load_sed(test_directory+f, sed_type="spectrum") for f in files] for spec in specs: spec.z = np.random.random_sample() aggsed = AggregateSed(specs) norm_aggsed = aggsed.normalize_at_point(3500.0, 1.0) stack_spectra = stack(norm_aggsed, 10.0, 'avg', fill='fill') stack_spectra.write(test_directory+'stacked_spectra_maskcc10.dat') stack_spectra = load_sed(test_directory+'stacked_spectra_maskcc10.dat') end = time.clock() plt.plot(stack_.x, stack_.y) plt.show() print '' print 'time it took to do all of this: %.3g sec' % (end-start)