-
Notifications
You must be signed in to change notification settings - Fork 95
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Axial bucket projection issue #1375
Axial bucket projection issue #1375
Conversation
@markus-jehl, the modification to use |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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...) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.md
has been updated with any functionality change (if applicable)