7. C++ API reference¶
The core of |galario| is implemented in C++ with a functional API. All functions are in namespace galario.
7.1. Sample and chi2 functions¶
lhere are four main functions that should serve the standard use of |galario|.
-
void
sample_profile(int nr, const dreal *intensity, dreal Rmin, dreal dR, dreal dxy, int nxy, dreal inc, dreal dRA, dreal dDec, dreal duv, dreal PA, int nd, const dreal *u, const dreal *v, dcomplex *vis_int)¶ Compute visibilities for a model defined by a radial profile.
The parameters are described in more detail in the python function
sampleProfile().- Parameters
nr – The number of points of the radial profile.
intensity – The intensities of the radial profile. Size: nr
Rmin – Inner edge of radial grid.
dR – Radial-grid cell size.
dxy – Image cell size.
nxy – Number of image pixels in x- and y-direction.
inc – Inclination.
dRa – Rectascension offset.
dDec – Dec. offset.
duv – The size of a pixel, uniform in u- and v-direction. Units: same as u, v.
PA – Position angle.
nd – Number of visibility points.
u – u coordinate of visibility points. Size: nd
v – v coordinate of visibility points. Size: nd
vis_int – Interpolated visibilities at the points u, v. Size: nd
-
void
sample_image(int nx, int ny, const dreal *image, dreal dRA, dreal dDec, dreal duv, dreal PA, int nd, const dreal *u, const dreal *v, dcomplex *vis_int)¶ Compute visibilities for a model defined by a real image.
- Parameters
nx – The number of points of image in x-direction
ny – The number of points of image in y-direction
image – A rectangular image of size nx*ny.
For the other parameters, see
sample_profile().
-
dreal
chi2_profile(int nr, const dreal *intensity, dreal Rmin, dreal dR, dreal dxy, int nxy, dreal inc, dreal dRA, dreal dDec, dreal duv, dreal PA, int nd, const dreal *u, const dreal *v, const dreal *vis_obs_re, const dreal *vis_obs_im, const dreal *weights)¶ Compute the \(\chi^2\) between observed visibilities and the interpolation based on a radial profile and return in chi2.
For details, see the python function
chi2Profile().All parameters are identical to
sample_profile()except that the model visibilities are not returned but directly compared to weighted observations.- Parameters
vis_obs_re – The real part of the visibilities. Size: nd.
vis_obs_im – The imaginary part of the visibilities. Size: nd.
weights – The weights of the observations. Size: nd.
-
dreal
chi2_image(int nx, int ny, const dreal *image, dreal dRA, dreal dDec, dreal duv, dreal PA, int nd, const dreal *u, const dreal *v, const dreal *vis_obs_re, const dreal *vis_obs_im, const dreal *weights)¶ Compute the \(\chi^2\) between observed visibilities and the interpolation based on the input image and return in chi2.
For details, see
chi2_profile()and the python functionchi2Image().
Danger
The values of duv and and u, v have to be consistent; i.e., \(\max |u| \leq \frac{n}{2} + 1\) and \(v \leq \frac{n}{2}\), where \(n\) is the number of rows and columns of the real input image. For performance reasons, the interpolate function does not check this. Inconsistent values may lead to segfaults.
7.2. Management functions¶
-
void
init()¶ Initialize memory and environment for galario.
Call this function before any computation is performed.
-
void
cleanup()¶ Free memory and clean up environment created by
init(). Call after all computations in galario.
-
int
threads(int num = 0)¶ Set the number of openMP threads that galario uses in parallel regions to num. The default of 0 doesn’t change the number of threads. Return the current number of threads.
By default, use the settings in the openMP runtime that can be affected for example by setting the OMP_NUM_THREADS variable.
For the cuda version, this sets the number of threads per block in cuda kernels.
For more details, see the python function
threads().
-
int
ngpus()¶ Get the number of available GPUs.
-
void
use_gpu(int device_id)¶ Set the GPU to be used for the computations.
For details, see the python function
use_gpu().
7.3. Individual operations¶
The following functions provide low-level access to individual operations performed by the sample and chi2 functions. A standard user will likely have little use for them. Refer to the python API documentation of the wrappers for details on the individual functions.
-
void
sweep(int nr, dreal *intensity, dreal Rmin, dreal dR, int nxy, dreal dxy, dreal inc, dcomplex *image)¶
-
void
uv_rotate(dreal PA, dreal dRA, dreal dDec, dreal *dRArot, dreal *dDecrot, int nd, const dreal *u, const dreal *v, dreal *urot, dreal *vrot)¶
-
dcomplex *
copy_input(int nx, int ny, const dreal *image)¶
-
void
galario_free(void*)¶
Free the memory buffer allocated and returned by copy_input().
-
void
fft2d(int nx, int ny, dcomplex *image)¶
-
void
fftshift(int nx, int ny, dcomplex *image)¶
-
void
fftshift_axis0(int nx, int ny, dcomplex *matrix)¶
-
void
interpolate(int nrow, int ncol, const dcomplex *image, int nd, const dreal *u, const dreal *v, const dreal duv, dcomplex *vis_int)¶
-
void
apply_phase_sampled(dreal dRA, dreal dDec, int nd, const dreal *u, const dreal *v, dcomplex *vis_int)¶
-
void
reduce_chi2(int nd, const dreal *vis_obs_re, const dreal *vis_obs_im, const dcomplex *vis_int, const dreal *weights, dreal *chi2)¶