Example #1
0
void oskar_simulator_check_init(oskar_Simulator* h, int* status)
{
    if (*status) return;

    /* Check that the telescope model has been set. */
    if (!h->tel)
    {
        oskar_log_error(h->log, "Telescope model not set.");
        *status = OSKAR_ERR_SETTINGS_TELESCOPE;
        return;
    }

    /* Create the visibility header if required. */
    if (!h->header)
        set_up_vis_header(h, status);

    /* Calculate source parameters if required. */
    if (!h->init_sky)
    {
        int i, num_failed = 0;
        double ra0, dec0;

        /* Compute source direction cosines relative to phase centre. */
        ra0 = oskar_telescope_phase_centre_ra_rad(h->tel);
        dec0 = oskar_telescope_phase_centre_dec_rad(h->tel);
        for (i = 0; i < h->num_sky_chunks; ++i)
        {
            oskar_sky_evaluate_relative_directions(h->sky_chunks[i],
                    ra0, dec0, status);

            /* Evaluate extended source parameters. */
            oskar_sky_evaluate_gaussian_source_parameters(h->sky_chunks[i],
                    h->zero_failed_gaussians, ra0, dec0, &num_failed, status);
        }
        if (num_failed > 0)
        {
            if (h->zero_failed_gaussians)
                oskar_log_warning(h->log, "Gaussian ellipse solution failed "
                        "for %i sources. These will have their fluxes "
                        "set to zero.", num_failed);
            else
                oskar_log_warning(h->log, "Gaussian ellipse solution failed "
                        "for %i sources. These will be simulated "
                        "as point sources.", num_failed);
        }
        h->init_sky = 1;
    }

    /* Check that each compute device has been set up. */
    set_up_device_data(h, status);
}
void oskar_beam_pattern_check_init(oskar_BeamPattern* h, int* status)
{
    if (*status) return;

    /* Check that the telescope model has been set. */
    if (!h->tel)
    {
        oskar_log_error(h->log, "Telescope model not set.");
        *status = OSKAR_ERR_SETTINGS_TELESCOPE;
        return;
    }

    /* Check that each compute device has been set up. */
    set_up_host_data(h, status);
    set_up_device_data(h, status);
}