예제 #1
0
def test_spectral_model(spectral_model_inputs, freq):
    I, spi, log_si, ref_freq = spectral_model_inputs

    # Compute spectral model with numpy implementations
    ordinary_spec_model = ordinary_spectral_model(I, spi, log_si, freq,
                                                  ref_freq)
    log_spec_model = log_spectral_model(I, spi, log_si, freq, ref_freq)

    # Choose between ordinary and log spectral index
    # based on log_si array
    spec_model = np.where(
        log_si[:, None] == True,  # noqa
        log_spec_model,
        ordinary_spec_model)

    # Compare with our implementation
    model = spectra(I, spi, log_si, ref_freq, freq)
    assert_array_almost_equal(model, spec_model)

    # Ensure positive flux
    posI = I.copy()
    posI[I < 0.0] = -posI[I < 0.0]
    log_si_all_true = np.full(posI.shape, True, dtype=np.bool)
    log_spec_model = log_spectral_model(posI, spi, log_si_all_true, freq,
                                        ref_freq)
    model = spectra(posI, spi, True, ref_freq, freq)
    assert_array_almost_equal(model, log_spec_model)

    model = spectra(I, spi, False, ref_freq, freq)
    assert_array_almost_equal(model, ordinary_spec_model)
예제 #2
0
def test_spectral_model(spectral_model_inputs, freq):
    I, spi, log_si, ref_freq = spectral_model_inputs

    # Ensure positive flux for logarithmic polynomials
    I[log_si] = np.abs(I[log_si])
    spi[log_si] = np.abs(spi[log_si])

    # Compute spectral model with numpy implementations
    ordinary_spec_model = ordinary_spectral_model(I, spi, log_si,
                                                  freq, ref_freq)
    log_spec_model = log_spectral_model(I, spi, log_si,
                                        freq, ref_freq)

    # Choose between ordinary and log spectral index
    # based on log_si array
    spec_model = np.where(log_si[:, None] == True,  # noqa
                          log_spec_model,
                          ordinary_spec_model)

    # Compare with our implementation
    model = spectra(I, spi, log_si, ref_freq, freq)
    assert_array_almost_equal(model, spec_model)

    model = spectra(I, spi, False, ref_freq, freq)
    assert_array_almost_equal(model, ordinary_spec_model)

    log_si_all_true = np.full(I.shape, True, dtype=np.bool)
    I = np.abs(I)  # noqa
    spi = np.abs(spi)
    log_spec_model = log_spectral_model(I, spi, log_si_all_true,
                                        freq, ref_freq)
    model = spectra(I, spi, True, ref_freq, freq)
    assert_array_almost_equal(model, log_spec_model)
def test_wsclean_predict(chunks):
    row = sum(chunks['rows'])
    src = sum(chunks['source'])
    chan = sum(chunks['channels'])

    rs = np.random.RandomState(42)
    source_sel = rs.randint(0, 2, src).astype(np.bool)
    source_type = np.where(source_sel, "POINT", "GAUSSIAN")

    gauss_shape = rs.normal(size=(src, 3))
    uvw = rs.normal(size=(row, 3))
    lm = rs.normal(size=(src, 2)) * 1e-5
    flux = rs.normal(size=src)
    coeffs = rs.normal(size=(src, 2))
    log_poly = rs.randint(0, 2, src, dtype=np.bool)
    flux[log_poly] = np.abs(flux[log_poly])
    coeffs[log_poly] = np.abs(coeffs[log_poly])
    freq = np.linspace(.856e9, 2 * .856e9, chan)
    ref_freq = np.full(src, freq[freq.shape[0] // 2])

    # WSClean visibilities
    vis = wsclean_predict(uvw, lm, source_type, flux, coeffs, log_poly,
                          ref_freq, gauss_shape, freq)

    # Compute it another way. Note the CASA coordinate convention
    # used by wsclean
    phase = phase_delay(lm, uvw, freq, convention='casa')
    spectrum = spectra(flux, coeffs, log_poly, ref_freq, freq)
    shape = gaussian(uvw, freq, gauss_shape)
    # point sources don't' contribute to the shape
    shape[source_sel] = 1.0
    np_vis = np.einsum("srf,srf,sf->rf", shape, phase, spectrum)[:, :, None]

    assert_almost_equal(np_vis, vis)
예제 #4
0
 def impl(uvw, lm, source_type, flux, coeffs, log_poly, ref_freq,
          gauss_shape, frequency):
     spectrum = spectra(flux, coeffs, log_poly, ref_freq, frequency)
     return wsclean_predict_impl(uvw, lm, source_type, gauss_shape,
                                 frequency, spectrum, dtype)