# 2. Basic Usage¶

Let’s say you have an observational dataset of `M`

visibility points located at \((u_j, v_j)\), with \(j=1...M\) and \(u_j\), \(v_j\) expressed in units of the observing wavelength. \(V_{obs\ j}\) (Jy) is the \(j\)-th complex visibility with associated theoretical weight \(w_j\).
With **galario** you can:

**1) Compute visibilities from a model image**

If you want to compute the visibilities of a model

`image`

(Jy/px) with pixel size`dxy`

(rad) in the same \((u_j, v_j)\) locations of the observations, you can easily do it with the GPU acceleratedgalario:from galario.double_cuda import sampleImage vis = sampleImage(image, dxy, u, v)where

`vis`

is a complex array of length \(N\) containing the real (`vis.real`

) and imaginary (`vis.imag`

) part of the synthetic visibilities.

**2) Compute visibilities from an axisymmetric brightness profile**

If you want to compare the observations with a model characterized by an

axisymmetric brightness profile,galariooffers dedicated functions that exploit the symmetry of the model to accelerate the image creation.If \(I(R)\) (Jy/sr) is the radial brightness profile, the command is as simple as:

from galario.double_cuda import sampleProfile vis = sampleProfile(I, Rmin, dR, nxy, dxy, u, v)where

`Rmin`

and`dR`

are expressed in radians and are the innermost radius and the cell size of the grid on which \(I(R)\) is computed. An analogous function`chi2Profile`

allows one to compute directly the chi square.

**3) Compute the** \(\chi^2\) **of a model (image or brightness profile)**

If you are doing a

fitand the only number you are interested in is the \(\chi^2\) for the likelihood computation, you can use directly one of these:from galario.double_cuda import chi2Image chi2 = chi2Image(image, dxy, u, v, V_obs.real, V_obs.imag, w) chi2 = chi2Profile(I, Rmin, dR, nxy, dxy, u, v, V_obs.real, V_obs.imag, w)

**4) Do all the above operations + translate and rotate the model image**

To translate the model image in Right Ascension and Declination direction by (dRA, dDec) offsets (rad), or to rotate the image by a Position Angle PA (rad) (defined East of North), you can specify them as optional parameters.

This works for all the

`sampleImage`

,`sampleProfile`

,`chi2Image`

and`chi2Profile`

functions:from galario.double_cuda import sampleImage vis = sampleImage(image, dxy, u, v, dRA=dRA, dDec=dDec, PA=PA)

Note

If you work on a machine **without** a CUDA-enabled GPU, don’t worry: you can use the CPU version
of **galario** by just removing the subscript `"_cuda"`

from the imports above and benefit from the openMP parallelization.
All the function names and interfaces are the same for GPU and CPU version!