void oskar_telescope_load_position(oskar_Telescope* telescope,
                                   const char* filename, int* status)
{
    int num_coords;
    oskar_Mem *lon, *lat, *alt;

    /* Load columns from file. */
    lon = oskar_mem_create(OSKAR_DOUBLE, OSKAR_CPU, 0, status);
    lat = oskar_mem_create(OSKAR_DOUBLE, OSKAR_CPU, 0, status);
    alt = oskar_mem_create(OSKAR_DOUBLE, OSKAR_CPU, 0, status);
    num_coords = (int) oskar_mem_load_ascii(filename, 3, status,
                                            lon, "", lat, "", alt, "0.0");

    /* Set the telescope centre coordinates. */
    if (num_coords == 1)
    {
        telescope->lon_rad = (oskar_mem_double(lon, status))[0] * M_PI / 180.0;
        telescope->lat_rad = (oskar_mem_double(lat, status))[0] * M_PI / 180.0;
        telescope->alt_metres = (oskar_mem_double(alt, status))[0];
    }
    else
    {
        *status = OSKAR_ERR_BAD_COORD_FILE;
    }

    /* Free memory. */
    oskar_mem_free(lon, status);
    oskar_mem_free(lat, status);
    oskar_mem_free(alt, status);
}
Ejemplo n.º 2
0
int main(int argc, char** argv)
{
    int status = 0;
    oskar::OptionParser opt("oskar_convert_geodetic_to_ecef",
            oskar_version_string());
    opt.set_description("Converts geodetic longitude/latitude/altitude to "
            "Cartesian ECEF coordinates. Assumes WGS84 ellipsoid.");
    opt.add_required("input file", "Path to file containing input coordinates. "
            "Angles must be in degrees.");
    if (!opt.check_options(argc, argv))
        return OSKAR_FAIL;
    const char* filename = opt.get_arg();

    // Load the input file.
    oskar_Mem *lon = oskar_mem_create(OSKAR_DOUBLE, OSKAR_CPU, 0, &status);
    oskar_Mem *lat = oskar_mem_create(OSKAR_DOUBLE, OSKAR_CPU, 0, &status);
    oskar_Mem *alt = oskar_mem_create(OSKAR_DOUBLE, OSKAR_CPU, 0, &status);
    size_t num_points = oskar_mem_load_ascii(filename, 3, &status,
            lon, "", lat, "", alt, "0.0");
    oskar_mem_scale_real(lon, M_PI / 180.0, &status);
    oskar_mem_scale_real(lat, M_PI / 180.0, &status);

    // Convert coordinates.
    oskar_Mem *x = oskar_mem_create(OSKAR_DOUBLE, OSKAR_CPU,
            num_points, &status);
    oskar_Mem *y = oskar_mem_create(OSKAR_DOUBLE, OSKAR_CPU,
            num_points, &status);
    oskar_Mem *z = oskar_mem_create(OSKAR_DOUBLE, OSKAR_CPU,
            num_points, &status);
    oskar_convert_geodetic_spherical_to_ecef(num_points,
            oskar_mem_double_const(lon, &status),
            oskar_mem_double_const(lat, &status),
            oskar_mem_double_const(alt, &status),
            oskar_mem_double(x, &status),
            oskar_mem_double(y, &status),
            oskar_mem_double(z, &status));

    // Print converted coordinates.
    oskar_mem_save_ascii(stdout, 3, num_points, &status, x, y, z);

    // Clean up.
    oskar_mem_free(lon, &status);
    oskar_mem_free(lat, &status);
    oskar_mem_free(alt, &status);
    oskar_mem_free(x, &status);
    oskar_mem_free(y, &status);
    oskar_mem_free(z, &status);
    if (status)
    {
        oskar_log_error(0, oskar_get_error_string(status));
        return status;
    }

    return 0;
}
Ejemplo n.º 3
0
void oskar_telescope_set_noise_rms_file(oskar_Telescope* model,
        const char* filename, int* status)
{
    int i;
    if (*status) return;
    for (i = 0; i < model->num_stations; ++i)
    {
        oskar_mem_load_ascii(filename, 1, status,
                oskar_station_noise_rms_jy(model->station[i]), "");
    }
}
void oskar_telescope_load_station_coords_wgs84(oskar_Telescope* telescope,
        const char* filename, double longitude, double latitude,
        double altitude, int* status)
{
    int num_stations;
    oskar_Mem *lon_deg, *lat_deg, *alt_m;

    /* Load columns from file into memory. */
    lon_deg = oskar_mem_create(OSKAR_DOUBLE, OSKAR_CPU, 0, status);
    lat_deg = oskar_mem_create(OSKAR_DOUBLE, OSKAR_CPU, 0, status);
    alt_m   = oskar_mem_create(OSKAR_DOUBLE, OSKAR_CPU, 0, status);
    num_stations = (int) oskar_mem_load_ascii(filename, 3, status,
            lon_deg, "", lat_deg, "", alt_m, "0.0");

    /* Set the station coordinates. */
    oskar_telescope_set_station_coords_wgs84(telescope, longitude, latitude,
            altitude, num_stations, lon_deg, lat_deg, alt_m, status);

    /* Free memory. */
    oskar_mem_free(lon_deg, status);
    oskar_mem_free(lat_deg, status);
    oskar_mem_free(alt_m, status);
}