Example #1
0
    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.)
Example #2
0
    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)
Example #3
0
    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)
Example #4
0
    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)
Example #5
0
    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)
Example #6
0
    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)
Example #7
0
    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)
Example #8
0
    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))
Example #9
0
    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])
Example #10
0
    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)
Example #11
0
#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)