listmode projectors/ parallelproj for listmode
Nobody has claimed this yet.
- Dominant language
- C++
- Stars
- 160
- Forks
- 113
- Avg merge
- 12d 15h
- Merged PRs (30d)
- 1
Description
Current listmode objective functions are essentially written in terms of ProjMatrixByBin. This is not suitable for GPU.
Some pointers:
- actual multi-threaded gradient calculation is here
https://github.com/UCL/STIR/blob/8ced2d73933420457e0bc76074964b7d4ff00f0c/src/recon_buildblock/distributable.cxx#L599-L607 - This takes
BinAndCorr:
https://github.com/UCL/STIR/blob/8ced2d73933420457e0bc76074964b7d4ff00f0c/src/include/stir/Bin.h#L110-L114
which sadly is not aBin(although that has avaluefield, and in the caching we re-use that for the "additive correction" I believe) - non-multi-threaded calculation of gradient, i.e. without caching is here
- the Listmode objective hierarchy is split into 2 (not always logically)
- PoissonLogLikelihoodWithLinearModelForMeanAndListModeData
- PoissonLogLikelihoodWithLinearModelForMeanAndListModeDataWithProjMatrixByBin, adding stuff for computing sensitivity and obviously the gradient
Probably with not too much work the PoissonLogLikelihoodWithLinearModelForMeanAndListModeDataWithProjMatrixByBin can be generalised. We might need (and seem relatively easily add)
virtual void ForwardProjectorByBin::forward_project(std::vector<Bin>&), storing results in the value. (Currently a by bin version is disabled).virtual void BackProjectorByBin::back_project(std::vector<Bin>&)
These would have to be implemented for the ProjMatrixByBin and Parallelproj projectors, but throw an error by default (for other projectors).
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with PoissonLogLikelihoodWithLinearModelForMeanAndListModeDataWithProjMatrixByBin and its gradient and sensitivity code, then read ForwardProjectorByBin.h, BackProjectorByBin, and the distributable.cxx gradient path. Compare the existing ProjMatrixByBin interfaces with the Parallelproj projector implementations. Done means listmode objective calculations can use vector for forward and back projection, with supported projectors implementing the operations and other projectors reporting an error.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- data
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100