Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
5c2dad5
Implemented cone-beam geometry calibration from rotating spheres.
Obi-Wan Feb 7, 2022
90aab93
Switched dims convention to be coherent with other alignment functions
Obi-Wan Aug 28, 2023
092924f
Cone-beam: refactored Ellipse class, and reorganized visualizer
Obi-Wan Aug 28, 2023
1e0ade4
Linting fixes
Obi-Wan Sep 3, 2023
057064b
Modernized code to Python 3.10
Obi-Wan May 17, 2026
784bc09
Alignment: fix type hinting
Obi-Wan May 18, 2026
cecd865
Fixed some imports
Obi-Wan May 18, 2026
3168912
Changed Ellipse class initialization interface and fixed center fitti…
Obi-Wan May 29, 2026
43bf455
Alignment/cone-beam: added ellipse fitting tests
Obi-Wan May 29, 2026
23405ca
More fixes for the eta fitting
Obi-Wan May 29, 2026
3aee57d
First round of geometry overhaul, including a fix for specific ellips…
Obi-Wan May 31, 2026
9399822
Tests: added one simple unit test for the geometry calibration
Obi-Wan Jun 1, 2026
0813574
Further simplified function arguments and improved presentation
Obi-Wan Jun 2, 2026
6af86c9
Fixed tests and improved geometry plotting
Obi-Wan Jun 3, 2026
0ab9c53
More fixes
Obi-Wan Jun 3, 2026
b3a54d3
Fixed geometry plotting to work with parallel geometry
Obi-Wan Jun 4, 2026
77ce927
Small formatting changes to tests
Obi-Wan Jun 4, 2026
1c20757
Removed unnnecessary newlines
Obi-Wan Jun 5, 2026
a8763ee
Added checkbox for selecting the objects to set as visible
Obi-Wan Jun 5, 2026
d395401
Added example on how to use the calibration data
Obi-Wan Jun 8, 2026
6e53e4e
Models: Added projection lines to geometry visualization
Obi-Wan Jun 8, 2026
b69046c
Added fine-tuning to the example
Obi-Wan Jun 9, 2026
a42fc54
Added tutorial
Obi-Wan Jun 10, 2026
70ca9a3
Fixed example script
Obi-Wan Jun 10, 2026
a0a8ec7
Final tweaks to the tutorial
Obi-Wan Jun 10, 2026
745f6f2
Added one last check that should avoid mixing the order of the ellipses
Obi-Wan Jun 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
293 changes: 293 additions & 0 deletions doc_sources/apidocs/corrct/corrct.alignment.cone_beam.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,293 @@
# {py:mod}`corrct.alignment.cone_beam`

```{py:module} corrct.alignment.cone_beam
```

```{autodoc2-docstring} corrct.alignment.cone_beam
:allowtitles:
```

## Module Contents

### Classes

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

* - {py:obj}`ConeBeamGeometry <corrct.alignment.cone_beam.ConeBeamGeometry>`
- ```{autodoc2-docstring} corrct.alignment.cone_beam.ConeBeamGeometry
:summary:
```
* - {py:obj}`FitConeBeamGeometry <corrct.alignment.cone_beam.FitConeBeamGeometry>`
- ```{autodoc2-docstring} corrct.alignment.cone_beam.FitConeBeamGeometry
:summary:
```
````

### Functions

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

* - {py:obj}`_class_to_json <corrct.alignment.cone_beam._class_to_json>`
- ```{autodoc2-docstring} corrct.alignment.cone_beam._class_to_json
:summary:
```
* - {py:obj}`_get_rot_axis_angle_deg <corrct.alignment.cone_beam._get_rot_axis_angle_deg>`
- ```{autodoc2-docstring} corrct.alignment.cone_beam._get_rot_axis_angle_deg
:summary:
```
* - {py:obj}`tune_acquisition_geometry <corrct.alignment.cone_beam.tune_acquisition_geometry>`
- ```{autodoc2-docstring} corrct.alignment.cone_beam.tune_acquisition_geometry
:summary:
```
````

### API

````{py:function} _class_to_json(obj: object) -> str
:canonical: corrct.alignment.cone_beam._class_to_json

```{autodoc2-docstring} corrct.alignment.cone_beam._class_to_json
```
````

````{py:function} _get_rot_axis_angle_deg(center_1_vu: collections.abc.Sequence[float] | numpy.typing.NDArray, center_2_vu: collections.abc.Sequence[float] | numpy.typing.NDArray, decimals: int | None = 4, dtype: numpy.typing.DTypeLike = np.float32) -> float
:canonical: corrct.alignment.cone_beam._get_rot_axis_angle_deg

```{autodoc2-docstring} corrct.alignment.cone_beam._get_rot_axis_angle_deg
```
````

`````{py:class} ConeBeamGeometry
:canonical: corrct.alignment.cone_beam.ConeBeamGeometry

```{autodoc2-docstring} corrct.alignment.cone_beam.ConeBeamGeometry
```

````{py:attribute} theta_deg
:canonical: corrct.alignment.cone_beam.ConeBeamGeometry.theta_deg
:type: float
:value: >
0.0

```{autodoc2-docstring} corrct.alignment.cone_beam.ConeBeamGeometry.theta_deg
```

````

````{py:attribute} phi_deg
:canonical: corrct.alignment.cone_beam.ConeBeamGeometry.phi_deg
:type: float
:value: >
0.0

```{autodoc2-docstring} corrct.alignment.cone_beam.ConeBeamGeometry.phi_deg
```

````

````{py:attribute} eta_deg
:canonical: corrct.alignment.cone_beam.ConeBeamGeometry.eta_deg
:type: float
:value: >
0.0

```{autodoc2-docstring} corrct.alignment.cone_beam.ConeBeamGeometry.eta_deg
```

````

````{py:attribute} D_pix
:canonical: corrct.alignment.cone_beam.ConeBeamGeometry.D_pix
:type: float
:value: >
0.0

```{autodoc2-docstring} corrct.alignment.cone_beam.ConeBeamGeometry.D_pix
```

````

````{py:attribute} R_pix
:canonical: corrct.alignment.cone_beam.ConeBeamGeometry.R_pix
:type: float
:value: >
0.0

```{autodoc2-docstring} corrct.alignment.cone_beam.ConeBeamGeometry.R_pix
```

````

````{py:attribute} v0_pix
:canonical: corrct.alignment.cone_beam.ConeBeamGeometry.v0_pix
:type: float
:value: >
0.0

```{autodoc2-docstring} corrct.alignment.cone_beam.ConeBeamGeometry.v0_pix
```

````

````{py:attribute} u0_pix
:canonical: corrct.alignment.cone_beam.ConeBeamGeometry.u0_pix
:type: float
:value: >
0.0

```{autodoc2-docstring} corrct.alignment.cone_beam.ConeBeamGeometry.u0_pix
```

````

````{py:attribute} det_size_v_pix
:canonical: corrct.alignment.cone_beam.ConeBeamGeometry.det_size_v_pix
:type: int
:value: >
0

```{autodoc2-docstring} corrct.alignment.cone_beam.ConeBeamGeometry.det_size_v_pix
```

````

````{py:attribute} det_size_u_pix
:canonical: corrct.alignment.cone_beam.ConeBeamGeometry.det_size_u_pix
:type: int
:value: >
0

```{autodoc2-docstring} corrct.alignment.cone_beam.ConeBeamGeometry.det_size_u_pix
```

````

````{py:attribute} pix_size_um
:canonical: corrct.alignment.cone_beam.ConeBeamGeometry.pix_size_um
:type: float
:value: >
0.0

```{autodoc2-docstring} corrct.alignment.cone_beam.ConeBeamGeometry.pix_size_um
```

````

````{py:method} __str__() -> str
:canonical: corrct.alignment.cone_beam.ConeBeamGeometry.__str__

```{autodoc2-docstring} corrct.alignment.cone_beam.ConeBeamGeometry.__str__
```

````

````{py:method} get_prj_geom(translate_z_to_center: bool = True) -> corrct.models.ProjectionGeometry
:canonical: corrct.alignment.cone_beam.ConeBeamGeometry.get_prj_geom

```{autodoc2-docstring} corrct.alignment.cone_beam.ConeBeamGeometry.get_prj_geom
```

````

````{py:method} get_vol_geom(up_sampling: int = 1) -> corrct.models.VolumeGeometry
:canonical: corrct.alignment.cone_beam.ConeBeamGeometry.get_vol_geom

```{autodoc2-docstring} corrct.alignment.cone_beam.ConeBeamGeometry.get_vol_geom
```

````

````{py:method} update(field: str, val: float, is_relative: bool = True, decimals: int | None = 3) -> corrct.alignment.cone_beam.ConeBeamGeometry
:canonical: corrct.alignment.cone_beam.ConeBeamGeometry.update

```{autodoc2-docstring} corrct.alignment.cone_beam.ConeBeamGeometry.update
```

````

````{py:method} get_tuning_params(field: str, val_range: collections.abc.Sequence[float] | numpy.typing.NDArray, is_relative: bool = True) -> collections.abc.Sequence[corrct.alignment.cone_beam.ConeBeamGeometry]
:canonical: corrct.alignment.cone_beam.ConeBeamGeometry.get_tuning_params

```{autodoc2-docstring} corrct.alignment.cone_beam.ConeBeamGeometry.get_tuning_params
```

````

````{py:method} to_json() -> str
:canonical: corrct.alignment.cone_beam.ConeBeamGeometry.to_json

```{autodoc2-docstring} corrct.alignment.cone_beam.ConeBeamGeometry.to_json
```

````

````{py:method} from_json(data_json: str) -> None
:canonical: corrct.alignment.cone_beam.ConeBeamGeometry.from_json

```{autodoc2-docstring} corrct.alignment.cone_beam.ConeBeamGeometry.from_json
```

````

`````

`````{py:class} FitConeBeamGeometry(prj_size_vu: collections.abc.Sequence[int] | numpy.typing.NDArray, points_ell1: collections.abc.Sequence[collections.abc.Sequence[float]] | numpy.typing.NDArray, points_ell2: collections.abc.Sequence[collections.abc.Sequence[float]] | numpy.typing.NDArray, points_axis: collections.abc.Sequence[collections.abc.Sequence[float]] | numpy.typing.NDArray | None = None, pix_size_um: float | None = None, use_l1_norm: bool = False, verbose: bool = True, plot_result: bool = False)
:canonical: corrct.alignment.cone_beam.FitConeBeamGeometry

```{autodoc2-docstring} corrct.alignment.cone_beam.FitConeBeamGeometry
```

```{rubric} Initialization
```

```{autodoc2-docstring} corrct.alignment.cone_beam.FitConeBeamGeometry.__init__
```

````{py:attribute} acq_geom
:canonical: corrct.alignment.cone_beam.FitConeBeamGeometry.acq_geom
:type: corrct.alignment.cone_beam.ConeBeamGeometry
:value: >
None

```{autodoc2-docstring} corrct.alignment.cone_beam.FitConeBeamGeometry.acq_geom
```

````

````{py:method} _initialize(use_l1_norm: bool) -> None
:canonical: corrct.alignment.cone_beam.FitConeBeamGeometry._initialize

```{autodoc2-docstring} corrct.alignment.cone_beam.FitConeBeamGeometry._initialize
```

````

````{py:method} fit(r: float, e: float = 1, meas_D_pix: float | None = None) -> corrct.alignment.cone_beam.ConeBeamGeometry
:canonical: corrct.alignment.cone_beam.FitConeBeamGeometry.fit

```{autodoc2-docstring} corrct.alignment.cone_beam.FitConeBeamGeometry.fit
```

````

````{py:method} _fit_distance_det2src(ellipse_1: corrct.alignment.fitting.Ellipse, ellipse_2: corrct.alignment.fitting.Ellipse, e: float = 1) -> float
:canonical: corrct.alignment.cone_beam.FitConeBeamGeometry._fit_distance_det2src
:staticmethod:

```{autodoc2-docstring} corrct.alignment.cone_beam.FitConeBeamGeometry._fit_distance_det2src
```

````

`````

````{py:function} tune_acquisition_geometry(acq_geom_init: corrct.alignment.cone_beam.ConeBeamGeometry, data: numpy.typing.NDArray, angles_rot_rad: collections.abc.Sequence[float] | numpy.typing.NDArray, params: dict[str, collections.abc.Sequence[float] | numpy.typing.NDArray], data_mask: numpy.typing.NDArray | None = None, verbose: bool = True) -> corrct.alignment.cone_beam.ConeBeamGeometry
:canonical: corrct.alignment.cone_beam.tune_acquisition_geometry

```{autodoc2-docstring} corrct.alignment.cone_beam.tune_acquisition_geometry
```
````
Loading
Loading