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-directionny – The number of points of
image
in y-directionimage – 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 inchi2
.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 tonum
. 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 theOMP_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)¶