Skip to content

Commit

Permalink
Merge pull request #428 from GSTT-CSC/improve_user_documentation
Browse files Browse the repository at this point in the history
Updated user documentation
  • Loading branch information
mollybuckley authored Sep 10, 2024
2 parents 49d6264 + 3614fac commit c6014a0
Show file tree
Hide file tree
Showing 10 changed files with 1,629 additions and 27 deletions.
Binary file removed docs/source/_static/slice_par.jpg
Binary file not shown.
Binary file removed docs/source/_static/snr.jpg
Binary file not shown.
Binary file removed docs/source/_static/sp_res.jpg
Binary file not shown.
Binary file removed docs/source/_static/uniformity.jpg
Binary file not shown.
436 changes: 436 additions & 0 deletions docs/source/acquisitionrequirements.html

Large diffs are not rendered by default.

107 changes: 107 additions & 0 deletions docs/source/acquisitionrequirements.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
Acquisition requirements
=================================
The *hazen* application provides automatic quantitative analysis for MRI data acquired with the ACR Large MRI phantom and MagNET Test Objects. Images should be acquired as detailed in the ACR\ :footcite:p:`2015:acrQC` and MagNET guidelines respectively. Acquisition requires precise phantom positioning such that the structures in the phantoms are orientated correctly with respect to the scanner.


ACR Large MRI Phantom
------------------------
The phantom should be positioned such that the images are orientated as shown below, with the vertical bars at the top of each slice.

.. figure:: /_static/all_slices.png
:width: 525
:height: 400
:align: center

Slices 1 to 11 of the ACR phantom used for analysis in Hazen

It should be noted that ACR guidance is limited to acquisition in the transverse plane. If acquiring in the sagittal and coronal planes, it is important to position the phantom such that the images are in the correct orientation:

* Transverse: the central axis of the phantom should be aligned with the z-axis of the scanner, with the chin marker positioned at the inferior.

* Sagittal: the central axis of the phantom should be aligned with the x-axis of the scanner, with the chin marker positioned at the right. Images may need to be rotated by 90° either on-line or off-line.

* Coronal: the central axis of the phantom should be aligned with the y-axis of the scanner, with the chin marker positioned at the anterior.

.. figure:: /_static/ACR_photos.png
:width: 600
:height: 210
:align: center

ACR Phantom. The central axis is defined as the line which runs along the length of the phantom through the nose marker (highlighted in yellow).

Each ACR associated task in Hazen requires a series of 11 images. Please refer to the ACR Large Phantom guidance for suggested sequence parameters. The user may want to use different filter options depending on the test being performed. Other than these filters, the acquisition for each task should be identical.

The series should be planned on a sagittal localiser such that slices 1 and 11 are prescribed so that they align with the vertices of the pairs of wedges at each end of the phantom. Slice 1 should be positioned at the end labelled CHIN and where the spatial resolution and slice width inserts are positioned.

.. figure:: /_static/localiser.png
:width: 390
:height: 320
:align: center

Sagittal localiser showing where slices 1 and 11 should be prescribed


MagNET test objects
----------------------
Unlike the ACR phantom, each task designed to be used with the MagNET test objects, requires a unique acquisition with a specific phantom. Please refer to the MagNET guidance for suggested sequence parameters.

Flood field test object
^^^^^^^^^^^^^^^^^^^^^^^^^
The water based (<= 1.5T) and oil based (3T) MagNET flood field phantoms are used to measure snr and uniformity. The phantom should be positioned centrally in the head coil and a single slice acquired in each of the transverse, sagittal and coronal planes. The user may want to repeat the acquisition for the purposes of subtraction snr.

.. figure:: /_static/magnet_flood_field_Acquisition.png
:width: 864
:height: 260
:align: center

Diagram of MagNET flood field test object highlighting the appropriate positioning and slice planning for snr and uniformity tests

Spatial resolution test object
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The MagNET spatial resolution test object should be positioned centrally in the head coil in each plane in turn. A single slice is acquired through the centre of the phantom.

.. figure:: /_static/magnet_resolution.png
:width: 864
:height: 260
:align: center

Diagram of MagNET spatial resolution test object highlighting the appropriate positioning and slice planning for spatial resolution

Ghosting
^^^^^^^^^^^^
Images of an off-centre test object should be acquired at four different echo times (30,60,90,120 ms). The test object can be any small water or oil based phantom. The phantom should be positioned off centre in the head coil and a single image acquired at each echo time in the transverse plane only. The user may choose to acquire data with both one and two averages, to be tested separately.

.. figure:: /_static/ghost.jpg
:width: 300
:height: 300
:align: center

Acquisition for ghosting test with small bottle method

Slice position test object
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The MagNET slice position test object should be positioned centrally in the head coil. A series of sixty images is acquired in the transverse plane only, the phantom should be positioned such that the bars in the test object are orientated vertically.

.. figure:: /_static/magnet_slice_position.png
:width: 400
:height: 500
:align: center

Diagram of MagNET flood field test object highlighting the appropriate positioning and slice planning for snr and uniformity tests.


Geometric/slice width test object
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The MagNET geometric test object should be positioned centrally in the head coil in each plane in turn. A single slice is acquired through the angled glass plates.

.. figure:: /_static/magnet_geometric.png
:width: 864
:height: 260
:align: center

Diagram of MagNET geometric test object highlighting the appropriate positioning and slice planning for slice width, linearity and distortion tests.


References
------------------
.. footbibliography::
Loading

2 comments on commit c6014a0

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Coverage

Coverage Report
FileStmtsMissCoverMissing
hazenlib
   ACRObject.py1121388%48, 82–88, 125, 140–143, 171–172, 210–213
   HazenTask.py28389%67–71
   __init__.py631773%104, 142–151, 153–162, 164–166, 185–191, 195
   exceptions.py21576%19–23, 42
   utils.py2406274%90, 94, 115, 128, 161, 176–189, 208, 215–222, 239, 246–248, 263–267, 283–287, 301, 326, 331, 342, 360, 422–423, 425–426, 431–456, 509, 512, 520–525, 528, 583, 592, 621
hazenlib/tasks
   acr_geometric_accuracy.py1115848%53–100, 124–239
   acr_ghosting.py1064260%42–58, 104–107, 154–157, 201–283
   acr_slice_position.py1364865%56–80, 281–348
   acr_slice_thickness.py1446654%47–79, 178, 256–340
   acr_snr.py1325757%60–111, 131, 227–242, 287–305, 355–380
   acr_spatial_resolution.py2066867%70–100, 187, 285, 302–313, 460–539
   acr_uniformity.py803260%43–60, 150–202
   ghosting.py1485265%28–47, 67, 168–169, 176, 193–194, 249–253, 268–272, 343–385
   relaxometry.py2908969%210–211, 213, 226–231, 238–246, 277–326, 375, 409–431, 609, 655–659, 726, 811–833, 851–866
   slice_position.py1244068%30, 43–71, 129–130, 157, 273, 283–306
   slice_width.py3515385%44–48, 52, 123, 188–213, 383, 555, 560–561, 567, 572, 648–649, 1020–1084
   snr.py1736960%45–48, 87, 103–113, 206–225, 237–247, 287–302, 328–338, 343–359, 397–413, 426–432, 475–493
   snr_map.py107199%159
   spatial_resolution.py2464582%50–54, 58, 90, 191, 213, 294, 460–501
   uniformity.py791976%59–63, 67, 118–119, 126, 174–204
TOTAL292283971% 

Tests Skipped Failures Errors Time
205 0 💤 0 ❌ 0 🔥 2m 21s ⏱️

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Coverage

Coverage Report
FileStmtsMissCoverMissing
hazenlib
   ACRObject.py1121388%48, 82–88, 125, 140–143, 171–172, 210–213
   HazenTask.py29390%67–71
   __init__.py641773%104, 142–151, 153–162, 164–166, 185–191, 195
   exceptions.py21576%19–23, 42
   utils.py2406274%90, 94, 115, 128, 161, 176–189, 208, 215–222, 239, 246–248, 263–267, 283–287, 301, 326, 331, 342, 360, 422–423, 425–426, 431–456, 509, 512, 520–525, 528, 583, 592, 621
hazenlib/tasks
   acr_geometric_accuracy.py1115848%53–100, 124–239
   acr_ghosting.py1064260%42–58, 104–107, 154–157, 201–283
   acr_slice_position.py1364865%56–80, 281–348
   acr_slice_thickness.py1446654%47–79, 178, 256–340
   acr_snr.py1325757%60–111, 131, 227–242, 287–305, 355–380
   acr_spatial_resolution.py2066867%70–100, 187, 285, 302–313, 460–539
   acr_uniformity.py803260%43–60, 150–202
   ghosting.py1485265%28–47, 67, 168–169, 176, 193–194, 249–253, 268–272, 343–385
   relaxometry.py2918969%210–211, 213, 226–231, 238–246, 277–326, 375, 409–431, 609, 655–659, 726, 811–833, 851–866
   slice_position.py1244068%30, 43–71, 129–130, 157, 273, 283–306
   slice_width.py3525285%44–48, 52, 123, 188–213, 555, 560–561, 567, 572, 648–649, 1020–1084
   snr.py1736960%45–48, 87, 103–113, 206–225, 237–247, 287–302, 328–338, 343–359, 397–413, 426–432, 475–493
   snr_map.py108199%159
   spatial_resolution.py2464482%50–54, 58, 90, 213, 294, 460–501
   uniformity.py791976%59–63, 67, 118–119, 126, 174–204
TOTAL292783771% 

Tests Skipped Failures Errors Time
205 0 💤 0 ❌ 0 🔥 2m 30s ⏱️

Please sign in to comment.