Axial bucket projection issue#1375
Conversation
|
@markus-jehl, the modification to use |
KrisThielemans
left a comment
There was a problem hiding this comment.
house-keeping comments, not about the actual methodology (which does look fine to me)
|
I believe the issue described in #1374 is caused by the axial bucket spacing is not taken into account in the z component of the STIR/src/buildblock/GeometryBlocksOnCylindrical.cxx Lines 123 to 127 in ee307c7 In my tests, the cart_coord.z() was always less than 0. Detectors at higher axial_coord are assigned CartesianCoordinates z components that do not account for the "ax_bucket_spacing". However, this variable does not exist.
Is this an oversight or a feature? Crystals > Blocks > Bucket(s). BlocksOnCylindrical does not support multiple buckets, transaxially or axially as there is no Possible solutions
@KrisThielemans @markus-jehl @danieldeidda thoughts? |
|
First of all, "buckets" consist of a number of "blocks" which have a number of "crystals". #776 by @NikEfth tried to address some of this by adding a facility for extra virtual crystals between buckets. Sadly, this get stuck in changing meaning of various variables with a long-ish discussion. I cannot recall how far this got, and it will need revision now since various merges. In any case, that isn't completely general anyway as the extra spacing can only be a crystal. The whole issue of arbitrary geometries and virtual crystals is a very difficult one. Getting the detector-map sorted is relatively easy, but things like symmetries (ok, we just switch them off), component-based normalisation, and down/upsampling for scatter and even nomenclature are hard. While this should be rather high on our priority list, I suggest we don't try to resolve that in this PR, or discuss it here either. I think for now we should just fix the code such that it does a sensible thing (and document it). Luckily, the fact that the code is currently broken for Looking at the current definition,the On to the proposed solutions. Keep in mind there are 2 different things: how do we get information (
Yes, this is rather easy. In the first instance, I would suggest we do this initially with "gaps between blocks" = "gaps between buckets". So, I suggest to have only a
"module" is not STIR terminology ATM, so I have no idea what you mean @robbietuk
This is a So, I prefer the first option. It's a fairly easy fix, and the 3rd option can then be done later. (Thinking how we add virtual crystals to all this gives me a headache. They are a pain, but they do enable easy use of symmetries...) |
KrisThielemans
left a comment
There was a problem hiding this comment.
extra comments, also, don't forget to add you as \author, and when done release_6.1
|
I agree with all of the above (#1375 (comment)). The third option requires reconsidering of "how do we define the scanner" which would require a "change to existing Interfile headers, and loads of scanner definitions". This is uncomfortable and I don't have time. I agree the first option is the most useful.
For my own scanner development I need "gaps between blocks" != "gaps between buckets" but I will make this a separate PR. I suggest we hold off implementing "incorrectly" functioning I therefore I have two options.
Really this is a case of trying to distinguish a line between two PRs, one a bug fix and the other an added feature. I would prefer to proceed with 2. and bug fix the current issue and then create a new PR with |
robbietuk
left a comment
There was a problem hiding this comment.
Some comments on the latest changes. Running CI to ensure everything still works with GeometryBlocksOnCylindrical constructor changes
This is of course up to you. I guess in the second PR, you can still do it in stages (i.e. first commit(s), assume bucket_gaps==block_gap and see if tests work).
Which one? It seems a bit to introduce test code now that will fail soon. Or maybe you mean "disable the check on num_axial_blocks_per_bucket"? That'd of course be fine. |
|
I'm a bit confused by the clang-format situation. Did you run it through? I guess so, as the |
Ignore this, I modified the tests to use
I am running clang-format on save. I don't see where the problem is... |
great
no problem. I'm just surprised by some of the formatting choices it makes, but anyway. |
|
@KrisThielemans b758eaf CI passed. Everything since is documentation or simple changes. I believe this is ready. |
|
@markus-jehl can you have a look please? |
|
Looks good to me, apart from the release note comment that seems to refer to something that isn't there (anymore?). |
The release notes comment refers to the inclusion of |
|
thanks! Squash-merge ok? |
|
Yes. Remember there is another bug fix in there with |
|
ok. well, you could update the release notes, and/or clean-up the commits, or just let me know if you prefer squash-merge or normal-merge... |
5bdd786 to
1bb2af0
Compare
|
I combine the past five commits into one. They were mostly documentation changes. I suggest a regular merge. |
Changes in this pull request
In response to #1374, add an integration CTest that ensures BlocksOnCylindrical with more than 1 axial bucket back project into all z slices of a volume derived from the projection data.
Add a guard to ensure
num_rings % num_crystals_per_block == 0.Testing performed
Added a new CTest
Related issues
#1374
Checklist before requesting a review
documentation/release_XXX.mdhas been updated with any functionality change (if applicable)