# makeMultiBowl

Create a binary map of multiple bowls within a 3D grid.

## Syntax

```[bowls, bowl_labelled] = makeBowl(grid_size, bowl_pos, radius, diameter, focus_pos)
[bowls, bowl_labelled] = makeBowl(grid_size, bowl_pos, radius, diameter, focus_pos, ...)
```

## Description

`makeMultiBowl` creates a binary map of multiple bowls within a three-dimensional grid using `makeBowl`. The position of the bowls is denoted by 1's in the the matrix with 0's elsewhere. A labelled matrix can also be returned, where the position of the first bowl is denoted by 1's, the position of the second bowl by 2's, and so on.

## Examples

```% define grid parameters
x_size              = 300e-3;
Nx                  = 256;
dx                  = x_size / Nx;
grid_size           = [Nx, Nx, Nx];

% create a Cartesian sphere with the x, y, z positions of the bowls
num_bowls           = 64;
bowl_pos            = makeCartSphere(sphere_radius, num_bowls, [1, 1, 1] * x_size / 2).';

% convert the Cartesian bowl positions to grid points
bowl_pos            = round(bowl_pos/dx);

% define element parameters
radius              = round(x_size / (2 * dx));
diameter            = 21;
focus_pos           = [1, 1, 1] * Nx/2;

% create bowls
makeMultiBowl(grid_size, bowl_pos, radius, diameter, focus_pos, 'Plot', true);
```

## Inputs

 `grid_size` size of the 3D grid given as a three element vector [Nx, Ny, Nz] [grid points] `bowl_pos` centre of the rear surface of each bowl given as matrix of dimensions N x 3, with each row specifying the centre for each bowl as a three element vector [bx, by, bz] [grid points] `radius` radius of curvature of each bowl given as either a single number (if the bowls have the same radius), or an N-element vector containing the radius for each bowl [grid points] `diameter` aperture diameter of each bowl given as either a single number (if the bowls have the same diameter), or an N-element vector containing the diameter for each bowl [grid points] `focus_pos` any point on the beam axis of the bowl given as either a three element vector (if the bowls have the same focus_pos), or as a matrix of dimensions N x 3, with each row specifying the focus_pos for each bowl given as a three element vector [fx, fy, fz] [grid points]

## Optional Inputs

Optional 'string', value pairs that may be used to modify the default computational settings.

Input Valid Settings Default Description
`'Binary'` (Boolean scalar) `false` Boolean controlling whether the bowl map is returned as a double precision matrix (false) or a logical matrix (true).
`'Plot'` (Boolean scalar) `false` Boolean controlling whether the bowl array is plotted using `voxelPlot`.
`'RemoveOverlap'` (Boolean scalar) `false` Boolean controlling whether overlapped grid points within each bowl (not between bowls) are removed.

## Outputs

 `bowls` 3D binary map of a bowls `bowls_labelled` 3D labelled matrix of bowls

`makeBowl`, `makeMultiArc`