Replies: 5 comments 6 replies
-
Notes for myself. It is currently assumed that a scanner is defined from two parts. Consider STIR/src/buildblock/Scanner.cxx Lines 1428 to 1431 in 79a1e83 The number of these "modules", incrementally rotated by angle The axial information is derived from the above axial variables in the code quote and the To expand to BucketsOnCylindrical, "modules" need to be derived from the bucket per module details too. This will require an expansion in the scanner definition to add I should also mention that in #1375 (comment) I suggested replacing
This is method is similar to how GATE handles PET geometries and it doesn't require the user to pre-calculate |
Beta Was this translation helpful? Give feedback.
-
What are a set of parallel buckets called?Do you mean "What are a set of parallel blocks called"? Maybe not... I'm still confused if you want to have a difference between "buckets" and "modules". These days, PET scanners can have a whole hierarchy of things. I know of at least
Other notes:
Given all this, I think that at present it would be enough to stick to 3 levels as we currently do, and the highest level can be called buckets or modules, but they mean the same thing in STIR. If this is not enough for your scanner, we need to do more thinking (and code modification). If you can, a description with enough detail of what you need would be necessary. Transaxial Buckets are maybe not supported?
That's correct for transaxial buckets (obviously, in axial direction, they still can be) So, do you need more? |
Beta Was this translation helpful? Give feedback.
-
Is there an equation that explains STIR/src/buildblock/GeometryBlocksOnCylindrical.cxx Lines 89 to 91 in 37f799f I believe it finds the distance from the first and last axial crystals and then divides by 2 but the exact methodology here is hard to understand. This should be refactored to make this clear. |
Beta Was this translation helpful? Give feedback.
-
I have an issue with the use of non-descriptive variable names and code readability in the BlocksOnCylindrical project. I don't understand half of the shorthand variables in https://github.com/UCL/STIR/blob/master/examples/python/plot_scanner_LORs.py and trying to comprehend how positions of detectors are calculated is challenging and likely prone to errors, see #1390 and the cause STIR/src/buildblock/GeometryBlocksOnCylindrical.cxx Lines 81 to 98 in 37f799f |
Beta Was this translation helpful? Give feedback.
-
I agree with Robbie that in transaxial direction having the module concept would be required to support different spacings between blocks and buckets. We would actually require this with our scanner, but chose to spread out the overall sum of block and bucket spacing evenly on the module. Then we rely on the geometric normalisation to correct for the resulting small modelling errors. It would obviously be nice to be able to model any sort of geometry without resorting to hand-made crystal maps, but it could complicate the code a lot and lead to potential additional bugs that would be very hard to find. |
Beta Was this translation helpful? Give feedback.
-
Primarily an extension of issue #1374 and PR #1375. The motivation for this was detailed here with an initial plan laid out. This issue serves as an extension of that comment.
STIR does not support multiple axial buckets of blocks of crystals on a ring. #1375 disabled the ability to use multiple axial buckets due to a bug in an assumptive implementation.
I require the use of
gaps_between blocks != gaps_between_buckets
therefore I am planning the implementation ofBucketsOnCylindrical
using theBlocksOnCylindrical
current frame work. I do not plan to change the name, just the implementation.Below are some of the main points worth discussion.
What do are a set of parallel buckets called?
I will refer to them as
modules
in this issue but the name can change via a refactor.Modules are rotated by angle
alpha
around the z axis of the scanner. It is important a suitable name is given to the collection of bucketsSome other ideas:
rsectors
for CylindricalPET (see GATE example.mac
file)STIR/documentation/STIR-UsersGuide.tex
Lines 779 to 797 in 37f799f
STIR could adopt
rsectors
,sectors
orsections
modules
. This would might make the translation between STIR and GATE even more annoying but it is a good fit.Suggestions welcome
Transaxial Buckets are maybe not supported?
#1375 (comment). I am not sure this is the case upon further review.
STIR/src/buildblock/GeometryBlocksOnCylindrical.cxx
Lines 128 to 129 in 37f799f
It seems
trans_bucket_num
is only used in the computation ofalpha
and in thetangential_coord
(similar toaxial_bucket_num
in calculation ofaxial_coord
). Thealpha
is used to determine therotation_matrix
, i.e.alpha
is an angle around the z axis.I understand this as no two buckets can be parallel.
In this case, additional variables is needed throughout:
num_axial_buckets_per_module
andnum_transaxial_buckets_per_module
.1
.GeometryBlocksOnCylindrical::build_crystal_maps
loops will need to be extended.get_num_modules()
,get_num_axial_crystals_per_module()
andget_num_transaxial_crystals_per_module()
Spacing between buckets (Axial & Transaxial)
#1375 (comment) . Not too much to add. The value should probably default to
num_axial_blocks_per_bucket*get_axial_block_spacing()
, otherwise a user defined variable > 0.More tests
#1375 adds a test requiring the axial crystals position to increase monotonically with the axial crystal coordinate.
Additional tests should be added for the transaxial. As an idea, the angle sequential coordinate vectors in the detector map should never be greater than 90 degrees, i.e.
cos(A -> B, B->C) >= 0
. Except maybe in the instance of only two modules.Virtual Crystals
#776 by @NikEfth tries to add virtual crystals. I am not 100% sure on the status of this and neither do I want to delve into it but I assume any issues encountered with adding virtual crystals to
BucketsOnCylindrical
would also be present in theBlocksOnCylindrical
, so no significant change there.Data Correction
Will there be any other issues with data correction methods etc. that we have not taken into account? e.g. scatter correction and normalization? I expect the same issues, maybe further complicated by this proposal.
@KrisThielemans @markus-jehl @danieldeidda
Beta Was this translation helpful? Give feedback.
All reactions