Exemple #1
0
def two_order_image():
    # generate 2 flat traces.
    traces = np.zeros((60, 20))
    traces[[10, 11, 12], :] = 1
    # the second trace that does not span the image entirely
    traces[[50, 51, 52], :] = 2
    traces[[50, 51, 52], 0] = 0
    traces[[50, 51, 52], -1] = 0
    # generate test data with zero noise
    data = np.ones_like(traces, dtype=float)
    data[~np.isclose(traces, 0)] = 100.
    uncertainty = 1. * data
    wavelengths = (traces > 0).astype(float) * 5
    image = NRESObservationFrame([
        CCDData(data=data,
                uncertainty=uncertainty,
                meta={'OBJECTS': 'tung&tung&none'})
    ], 'foo.fits')
    image.wavelengths = wavelengths
    image.traces = traces
    image.fibers = {'fiber': np.arange(2), 'order': np.arange(2)}
    image.blaze = {
        'id': np.arange(2),
        'blaze': [np.arange(20), np.arange(20)],
        'blaze_error': [np.arange(20), np.arange(20)]
    }
    return image
Exemple #2
0
 def test_do_stage_on_empty_features(self):
     input_context = context.Context({})
     image = NRESObservationFrame([CCDData(data=self.data, uncertainty=self.err,
                                   meta={'OBJECTS': 'tung&tung&none'})], 'foo.fits')
     image.traces = np.ones_like(self.data, dtype=int)
     image.blaze = {'blaze': np.ones_like(self.data, dtype=int)}
     stage = IdentifyFeatures(input_context)
     stage.fwhm, stage.nsigma = self.sigma, 1.5
     image = stage.do_stage(image)
     assert len(image.features) == 0
Exemple #3
0
    def test_do_stage(self):
        blaze_factor = 0.5
        input_context = context.Context({})
        ccd_data = CCDData(data=self.data, uncertainty=self.err, meta={'OBJECTS': 'tung&tung&none'})
        image = NRESObservationFrame([ccd_data], 'foo.fits')
        image.traces = np.ones_like(self.data, dtype=int)
        image.blaze = {'blaze': blaze_factor * np.ones((1, self.data.shape[1]), dtype=int)}

        stage = IdentifyFeatures(input_context)
        stage.fwhm, stage.nsigma = self.sigma, 0.5
        image = stage.do_stage(image)
        image.features.sort('pixel')
        assert np.allclose(image.features['corrected_flux'], image.features['flux'] / blaze_factor, rtol=1E-4)
        assert np.allclose(image.features['pixel'], self.xcoords, atol=0.001)
        assert np.allclose(image.features['ycentroid'], self.ycoords, atol=0.001)
        assert np.allclose(image.features['id'], 1)
Exemple #4
0
def five_hundred_square_image(maxflux,
                              number_traces,
                              trace_width,
                              read_noise=10,
                              seed=None):
    traces = np.zeros((500, 500))
    data = np.ones_like(traces, dtype=float)
    profile = np.zeros_like(traces, dtype=float)
    ix = np.arange(trace_width)
    for i in range(1, number_traces + 1):
        traces[40 * i:40 * i + trace_width, :] = i
        for j in range(0, trace_width):
            data[40 * i + j, :] += maxflux * np.exp(
                (-1.) * (ix[j] - trace_width / 2.)**2 / (trace_width / 6.)**2)
        for j in range(0, trace_width):
            profile[40 * i + j, :] = data[40 * i + j, :] / np.sum(
                data[40 * i:40 * i + trace_width, 0])
    np.random.seed(seed=seed)
    data += np.random.poisson(data)
    data += np.random.normal(0.0, read_noise, size=data.shape)
    uncertainty = np.sqrt(data + read_noise**2)
    wavelengths = np.ones_like(
        traces
    ) * 5  # dummy wavelengths image that has values distinct from flux and traces.
    image = NRESObservationFrame([
        CCDData(data=data,
                uncertainty=uncertainty,
                meta={'OBJECTS': 'tung&tung&none'})
    ], 'foo.fits')
    image.traces = traces
    image.profile = profile
    image.wavelengths = wavelengths
    image.blaze = {
        'id': np.arange(number_traces) + 1,
        'blaze': [np.ones(traces.shape[1]) for i in range(number_traces)],
        'blaze_error':
        [np.ones(traces.shape[1]) for i in range(number_traces)]
    }
    image.fibers = {
        'fiber': np.arange(number_traces) + 1,
        'order': np.arange(number_traces) + 1
    }
    return image