# {py:mod}`corrct._projector_backends`

```{py:module} corrct._projector_backends
```

```{autodoc2-docstring} corrct._projector_backends
:allowtitles:
```

## Module Contents

### Classes

````{list-table}
:class: autosummary longtable
:align: left

* - {py:obj}`ProjectorBackend <corrct._projector_backends.ProjectorBackend>`
  - ```{autodoc2-docstring} corrct._projector_backends.ProjectorBackend
    :summary:
    ```
* - {py:obj}`ProjectorBackendSKimage <corrct._projector_backends.ProjectorBackendSKimage>`
  - ```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendSKimage
    :summary:
    ```
* - {py:obj}`ProjectorBackendASTRA <corrct._projector_backends.ProjectorBackendASTRA>`
  - ```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendASTRA
    :summary:
    ```
* - {py:obj}`ProjectorBackendDirectASTRA <corrct._projector_backends.ProjectorBackendDirectASTRA>`
  - ```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendDirectASTRA
    :summary:
    ```
````

### Functions

````{list-table}
:class: autosummary longtable
:align: left

* - {py:obj}`compute_attenuation <corrct._projector_backends.compute_attenuation>`
  - ```{autodoc2-docstring} corrct._projector_backends.compute_attenuation
    :summary:
    ```
````

### API

````{py:function} compute_attenuation(vol: numpy.typing.NDArray, angle_rad: float, invert: bool = False) -> numpy.typing.NDArray
:canonical: corrct._projector_backends.compute_attenuation

```{autodoc2-docstring} corrct._projector_backends.compute_attenuation
```
````

`````{py:class} ProjectorBackend()
:canonical: corrct._projector_backends.ProjectorBackend

Bases: {py:obj}`abc.ABC`

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackend
```

```{rubric} Initialization
```

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackend.__init__
```

````{py:attribute} vol_geom
:canonical: corrct._projector_backends.ProjectorBackend.vol_geom
:type: corrct.models.VolumeGeometry
:value: >
   None

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackend.vol_geom
```

````

````{py:attribute} vol_shape_zxy
:canonical: corrct._projector_backends.ProjectorBackend.vol_shape_zxy
:type: numpy.typing.NDArray[numpy.integer]
:value: >
   None

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackend.vol_shape_zxy
```

````

````{py:attribute} angles_w_rad
:canonical: corrct._projector_backends.ProjectorBackend.angles_w_rad
:type: numpy.typing.NDArray[numpy.floating]
:value: >
   None

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackend.angles_w_rad
```

````

````{py:attribute} prj_shape_vwu
:canonical: corrct._projector_backends.ProjectorBackend.prj_shape_vwu
:type: numpy.typing.NDArray[numpy.integer]
:value: >
   None

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackend.prj_shape_vwu
```

````

````{py:attribute} prj_shape_vu
:canonical: corrct._projector_backends.ProjectorBackend.prj_shape_vu
:type: numpy.typing.NDArray[numpy.integer]
:value: >
   None

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackend.prj_shape_vu
```

````

````{py:attribute} is_initialized
:canonical: corrct._projector_backends.ProjectorBackend.is_initialized
:type: bool
:value: >
   None

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackend.is_initialized
```

````

````{py:attribute} is_ready
:canonical: corrct._projector_backends.ProjectorBackend.is_ready
:type: bool
:value: >
   None

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackend.is_ready
```

````

````{py:method} initialize_geometry(vol_geom: corrct.models.VolumeGeometry, angles_rot_rad: typing.Union[numpy.typing.ArrayLike, numpy.typing.NDArray], rot_axis_shift_pix: typing.Union[numpy.typing.ArrayLike, numpy.typing.NDArray, None] = None, prj_geom: typing.Optional[corrct.models.ProjectionGeometry] = None, create_single_projs: bool = False)
:canonical: corrct._projector_backends.ProjectorBackend.initialize_geometry

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackend.initialize_geometry
```

````

````{py:method} get_vol_shape() -> numpy.typing.NDArray
:canonical: corrct._projector_backends.ProjectorBackend.get_vol_shape

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackend.get_vol_shape
```

````

````{py:method} get_prj_shape() -> numpy.typing.NDArray
:canonical: corrct._projector_backends.ProjectorBackend.get_prj_shape

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackend.get_prj_shape
```

````

````{py:method} make_ready() -> None
:canonical: corrct._projector_backends.ProjectorBackend.make_ready

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackend.make_ready
```

````

````{py:method} dispose() -> None
:canonical: corrct._projector_backends.ProjectorBackend.dispose

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackend.dispose
```

````

````{py:method} __del__()
:canonical: corrct._projector_backends.ProjectorBackend.__del__

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackend.__del__
```

````

````{py:method} __repr__() -> str
:canonical: corrct._projector_backends.ProjectorBackend.__repr__

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackend.__repr__
```

````

````{py:method} fp(vol: numpy.typing.NDArray, angle_ind: typing.Optional[int] = None) -> numpy.typing.NDArray
:canonical: corrct._projector_backends.ProjectorBackend.fp
:abstractmethod:

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackend.fp
```

````

````{py:method} bp(prj: numpy.typing.NDArray, angle_ind: typing.Optional[int] = None) -> numpy.typing.NDArray
:canonical: corrct._projector_backends.ProjectorBackend.bp
:abstractmethod:

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackend.bp
```

````

`````

`````{py:class} ProjectorBackendSKimage()
:canonical: corrct._projector_backends.ProjectorBackendSKimage

Bases: {py:obj}`corrct._projector_backends.ProjectorBackend`

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendSKimage
```

```{rubric} Initialization
```

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendSKimage.__init__
```

````{py:method} initialize_geometry(vol_geom: corrct.models.VolumeGeometry, angles_rot_rad: typing.Union[numpy.typing.ArrayLike, numpy.typing.NDArray], rot_axis_shift_pix: typing.Union[numpy.typing.ArrayLike, numpy.typing.NDArray, None] = None, prj_geom: typing.Optional[corrct.models.ProjectionGeometry] = None, create_single_projs: bool = False)
:canonical: corrct._projector_backends.ProjectorBackendSKimage.initialize_geometry

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendSKimage.initialize_geometry
```

````

````{py:method} _set_filter_name(filt)
:canonical: corrct._projector_backends.ProjectorBackendSKimage._set_filter_name
:staticmethod:

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendSKimage._set_filter_name
```

````

````{py:method} _set_bpj_size(output_size)
:canonical: corrct._projector_backends.ProjectorBackendSKimage._set_bpj_size
:staticmethod:

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendSKimage._set_bpj_size
```

````

````{py:method} fp(vol: numpy.typing.NDArray, angle_ind: typing.Optional[int] = None) -> numpy.typing.NDArray
:canonical: corrct._projector_backends.ProjectorBackendSKimage.fp

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendSKimage.fp
```

````

````{py:method} bp(prj: numpy.typing.NDArray, angle_ind: typing.Optional[int] = None) -> numpy.typing.NDArray
:canonical: corrct._projector_backends.ProjectorBackendSKimage.bp

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendSKimage.bp
```

````

`````

`````{py:class} ProjectorBackendASTRA(super_sampling: int = 1)
:canonical: corrct._projector_backends.ProjectorBackendASTRA

Bases: {py:obj}`corrct._projector_backends.ProjectorBackend`

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendASTRA
```

```{rubric} Initialization
```

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendASTRA.__init__
```

````{py:attribute} proj_id
:canonical: corrct._projector_backends.ProjectorBackendASTRA.proj_id
:type: typing.List
:value: >
   None

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendASTRA.proj_id
```

````

````{py:attribute} astra_vol_geom
:canonical: corrct._projector_backends.ProjectorBackendASTRA.astra_vol_geom
:type: typing.Mapping
:value: >
   None

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendASTRA.astra_vol_geom
```

````

````{py:attribute} proj_geom_ind
:canonical: corrct._projector_backends.ProjectorBackendASTRA.proj_geom_ind
:type: typing.Sequence[typing.Mapping]
:value: >
   None

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendASTRA.proj_geom_ind
```

````

````{py:attribute} proj_geom_all
:canonical: corrct._projector_backends.ProjectorBackendASTRA.proj_geom_all
:type: typing.Mapping
:value: >
   None

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendASTRA.proj_geom_all
```

````

````{py:method} initialize_geometry(vol_geom: corrct.models.VolumeGeometry, angles_rot_rad: typing.Union[numpy.typing.ArrayLike, numpy.typing.NDArray], rot_axis_shift_pix: typing.Union[numpy.typing.ArrayLike, numpy.typing.NDArray, None] = None, prj_geom: typing.Optional[corrct.models.ProjectionGeometry] = None, create_single_projs: bool = False)
:canonical: corrct._projector_backends.ProjectorBackendASTRA.initialize_geometry

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendASTRA.initialize_geometry
```

````

````{py:method} make_ready() -> None
:canonical: corrct._projector_backends.ProjectorBackendASTRA.make_ready

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendASTRA.make_ready
```

````

````{py:method} _check_data(x: numpy.typing.NDArray, expected_shape: typing.Union[typing.Sequence[int], numpy.typing.NDArray[numpy.integer]]) -> numpy.typing.NDArray
:canonical: corrct._projector_backends.ProjectorBackendASTRA._check_data

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendASTRA._check_data
```

````

````{py:method} _check_prj_shape(prj: numpy.typing.NDArray) -> None
:canonical: corrct._projector_backends.ProjectorBackendASTRA._check_prj_shape

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendASTRA._check_prj_shape
```

````

````{py:method} dispose() -> None
:canonical: corrct._projector_backends.ProjectorBackendASTRA.dispose

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendASTRA.dispose
```

````

````{py:method} fp(vol: numpy.typing.NDArray, angle_ind: typing.Optional[int] = None) -> numpy.typing.NDArray
:canonical: corrct._projector_backends.ProjectorBackendASTRA.fp

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendASTRA.fp
```

````

````{py:method} bp(prj: numpy.typing.NDArray, angle_ind: typing.Optional[int] = None) -> numpy.typing.NDArray
:canonical: corrct._projector_backends.ProjectorBackendASTRA.bp

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendASTRA.bp
```

````

`````

`````{py:class} ProjectorBackendDirectASTRA(super_sampling: int = 1)
:canonical: corrct._projector_backends.ProjectorBackendDirectASTRA

Bases: {py:obj}`corrct._projector_backends.ProjectorBackendASTRA`

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendDirectASTRA
```

```{rubric} Initialization
```

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendDirectASTRA.__init__
```

````{py:attribute} astra_vol_shape
:canonical: corrct._projector_backends.ProjectorBackendDirectASTRA.astra_vol_shape
:type: typing.Sequence
:value: >
   None

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendDirectASTRA.astra_vol_shape
```

````

````{py:attribute} astra_prj_shape
:canonical: corrct._projector_backends.ProjectorBackendDirectASTRA.astra_prj_shape
:type: typing.Sequence
:value: >
   None

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendDirectASTRA.astra_prj_shape
```

````

````{py:attribute} astra_angle_prj_shape
:canonical: corrct._projector_backends.ProjectorBackendDirectASTRA.astra_angle_prj_shape
:type: typing.Sequence
:value: >
   None

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendDirectASTRA.astra_angle_prj_shape
```

````

````{py:attribute} angle_prj_shape
:canonical: corrct._projector_backends.ProjectorBackendDirectASTRA.angle_prj_shape
:type: typing.Sequence
:value: >
   None

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendDirectASTRA.angle_prj_shape
```

````

````{py:method} initialize_geometry(vol_geom: corrct.models.VolumeGeometry, angles_rot_rad: typing.Union[numpy.typing.ArrayLike, numpy.typing.NDArray], rot_axis_shift_pix: typing.Union[numpy.typing.ArrayLike, numpy.typing.NDArray, None] = None, prj_geom: typing.Optional[corrct.models.ProjectionGeometry] = None, create_single_projs: bool = False)
:canonical: corrct._projector_backends.ProjectorBackendDirectASTRA.initialize_geometry

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendDirectASTRA.initialize_geometry
```

````

````{py:method} make_ready()
:canonical: corrct._projector_backends.ProjectorBackendDirectASTRA.make_ready

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendDirectASTRA.make_ready
```

````

````{py:method} fp(vol: numpy.typing.NDArray, angle_ind: typing.Optional[int] = None)
:canonical: corrct._projector_backends.ProjectorBackendDirectASTRA.fp

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendDirectASTRA.fp
```

````

````{py:method} bp(prj: numpy.typing.NDArray, angle_ind: typing.Optional[int] = None)
:canonical: corrct._projector_backends.ProjectorBackendDirectASTRA.bp

```{autodoc2-docstring} corrct._projector_backends.ProjectorBackendDirectASTRA.bp
```

````

`````