I wanner test all physics correction in pytomography with own data. So I got cylinder root data(radius: 85 mm) by GATE simulation (with phantom and water, it means those LORs contain attenuation, randoms and scatters).
At first, It looks well when I only recon with attenuation or normalization. But when I added both, it seems bad in profile,the value in center is higher than the edge, as below.
Lastly, I try to do single scatter simulation. It always shows wrong in scale_estimated_scatter(norm_BP = system_matrix.compute_normalization_factor()).as below.
I found there is a problem about scanner info from GATE, as blow. I found there miss submodules information. Before adding submodule, proj_meta(sino_proj_meta) is [48, 97, 1296] instead of [96, 193, 1296],so there is mistake about system_matrix in get_sss_scatter_estimate function.
After adding submodule, code is working. But there is no difference between norm, norm with random correction, norm with random and scatter correction in profile, as below.
Good on you for catching that bug in sinogram_to_spatial! Glad you were able to delve into the source code. Can you make a pull request on github with those changes made?
In GATE, are you sure that you’re actually simulating the phantom (i.e. simulating attenuation + scatter interactions)? Based on what I see here, it seems likely that perhaps those flags was disabled, since reconstruction with normalization correction (and no attenuation correction) looks really good, and attenuation correction seems to be over-correcting. In other words, you may be simulating the source only, but with no interactions in the phantom.
This would explain why all 3 profiles look the same: SSS scales the scatter estimate based on values outside the phantom (via masking based on attenuation values), so if there are no scatters anywhere outside the phantom, the SSS estimate will simply scale to 0.