Skip to content
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

SPECTUB matrix unitialised values #1232

Closed
KrisThielemans opened this issue Aug 14, 2023 · 8 comments · Fixed by #1244
Closed

SPECTUB matrix unitialised values #1232

KrisThielemans opened this issue Aug 14, 2023 · 8 comments · Fixed by #1244
Assignees
Milestone

Comments

@KrisThielemans
Copy link
Collaborator

@varzakis got some problems running the simplest forward projection of SPECT images with SIRF (python kernel crash). Skipping SIRF, we got an occasional crash with STIR directly. Trying to diagnose this by running the following

cd recon_test_pack/SPECT/SPECTUB
valgrind OSMAPOSL OSEM_2DPSF.par 

gives a lot of output on uninitialised values. Relevant lines seem to be

info_stream << "Correction for attenuation: " << wmh.att_fn << "\t\tdo_msk_att: " << wmh.do_msk_att << std::endl;

if (!wmh.do_msk_att && wmh.do_msk_file)

generate_msk( msk_3d, msk_2d, mask_from_file, &vol, wmh);

this->maxszb = max_psf_szb( ang, wmh ); // maximum PSF size (horizontal component of PSF)

wm_size_estimation ( kOS, ang, vox, bin, vol, prj, msk_3d, msk_2d, maxszb, &gaussdens, NITEMS[kOS],

full output:

INFO: (subset)sensitivity filename(s) not set so I will compute the (subset)sensitivities

INFO: Using distributable_computation with 5 threads on 6 processors.

WARNING: SPECTUB matrix can currently only use single-threaded code unless all views are kept. Setting num_threads to 1

WARNING: Using OpenMP with number of threads=1 produces parallel overhead. You should compile without OPENMP support
==2465== Conditional jump or move depends on uninitialised value(s)
==2465==    at 0x984EB2A: std::ostreambuf_iterator<char, std::char_traits<char> > std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::_M_insert_int<long>(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, long) const (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25)
==2465==    by 0x984EDCF: std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::do_put(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, bool) const (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25)
==2465==    by 0x985B4B7: std::ostream& std::ostream::_M_insert<bool>(bool) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25)
==2465==    by 0x858290: stir::ProjMatrixByBinSPECTUB::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjMatrixByBinSPECTUB.cxx:480)
==2465==    by 0x874468: stir::ForwardProjectorByBinUsingProjMatrixByBin::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ForwardProjectorByBinUsingProjMatrixByBin.cxx:102)
==2465==    by 0x8DE01C: stir::ProjectorByBinPair::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjectorByBinPair.cxx:48)
==2465==    by 0x878919: stir::ProjectorByBinPairUsingProjMatrixByBin::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjectorByBinPairUsingProjMatrixByBin.cxx:89)
==2465==    by 0x8A9F49: stir::PoissonLogLikelihoodWithLinearModelForMeanAndProjData<stir::DiscretisedDensity<3, float> >::set_up_before_sensitivity(std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (PoissonLogLikelihoodWithLinearModelForMeanAndProjData.cxx:576)
==2465==    by 0x8A3014: stir::PoissonLogLikelihoodWithLinearModelForMean<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (PoissonLogLikelihoodWithLinearModelForMean.cxx:291)
==2465==    by 0x829126: stir::IterativeReconstruction<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (IterativeReconstruction.cxx:477)
==2465==    by 0x79434A: stir::OSMAPOSLReconstruction<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (OSMAPOSLReconstruction.cxx:319)
==2465==    by 0x8287DF: stir::IterativeReconstruction<stir::DiscretisedDensity<3, float> >::reconstruct() (IterativeReconstruction.cxx:407)
==2465== 
==2465== Use of uninitialised value of size 8
==2465==    at 0x984E62E: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25)
==2465==    by 0x984EB53: std::ostreambuf_iterator<char, std::char_traits<char> > std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::_M_insert_int<long>(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, long) const (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25)
==2465==    by 0x984EDCF: std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::do_put(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, bool) const (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25)
==2465==    by 0x985B4B7: std::ostream& std::ostream::_M_insert<bool>(bool) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25)
==2465==    by 0x858290: stir::ProjMatrixByBinSPECTUB::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjMatrixByBinSPECTUB.cxx:480)
==2465==    by 0x874468: stir::ForwardProjectorByBinUsingProjMatrixByBin::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ForwardProjectorByBinUsingProjMatrixByBin.cxx:102)
==2465==    by 0x8DE01C: stir::ProjectorByBinPair::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjectorByBinPair.cxx:48)
==2465==    by 0x878919: stir::ProjectorByBinPairUsingProjMatrixByBin::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjectorByBinPairUsingProjMatrixByBin.cxx:89)
==2465==    by 0x8A9F49: stir::PoissonLogLikelihoodWithLinearModelForMeanAndProjData<stir::DiscretisedDensity<3, float> >::set_up_before_sensitivity(std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (PoissonLogLikelihoodWithLinearModelForMeanAndProjData.cxx:576)
==2465==    by 0x8A3014: stir::PoissonLogLikelihoodWithLinearModelForMean<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (PoissonLogLikelihoodWithLinearModelForMean.cxx:291)
==2465==    by 0x829126: stir::IterativeReconstruction<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (IterativeReconstruction.cxx:477)
==2465==    by 0x79434A: stir::OSMAPOSLReconstruction<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (OSMAPOSLReconstruction.cxx:319)
==2465== 
==2465== Conditional jump or move depends on uninitialised value(s)
==2465==    at 0x984E63B: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25)
==2465==    by 0x984EB53: std::ostreambuf_iterator<char, std::char_traits<char> > std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::_M_insert_int<long>(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, long) const (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25)
==2465==    by 0x984EDCF: std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::do_put(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, bool) const (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25)
==2465==    by 0x985B4B7: std::ostream& std::ostream::_M_insert<bool>(bool) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25)
==2465==    by 0x858290: stir::ProjMatrixByBinSPECTUB::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjMatrixByBinSPECTUB.cxx:480)
==2465==    by 0x874468: stir::ForwardProjectorByBinUsingProjMatrixByBin::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ForwardProjectorByBinUsingProjMatrixByBin.cxx:102)
==2465==    by 0x8DE01C: stir::ProjectorByBinPair::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjectorByBinPair.cxx:48)
==2465==    by 0x878919: stir::ProjectorByBinPairUsingProjMatrixByBin::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjectorByBinPairUsingProjMatrixByBin.cxx:89)
==2465==    by 0x8A9F49: stir::PoissonLogLikelihoodWithLinearModelForMeanAndProjData<stir::DiscretisedDensity<3, float> >::set_up_before_sensitivity(std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (PoissonLogLikelihoodWithLinearModelForMeanAndProjData.cxx:576)
==2465==    by 0x8A3014: stir::PoissonLogLikelihoodWithLinearModelForMean<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (PoissonLogLikelihoodWithLinearModelForMean.cxx:291)
==2465==    by 0x829126: stir::IterativeReconstruction<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (IterativeReconstruction.cxx:477)
==2465==    by 0x79434A: stir::OSMAPOSLReconstruction<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (OSMAPOSLReconstruction.cxx:319)
==2465== 
==2465== Conditional jump or move depends on uninitialised value(s)
==2465==    at 0x984EB86: std::ostreambuf_iterator<char, std::char_traits<char> > std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::_M_insert_int<long>(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, long) const (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25)
==2465==    by 0x984EDCF: std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::do_put(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, bool) const (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25)
==2465==    by 0x985B4B7: std::ostream& std::ostream::_M_insert<bool>(bool) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25)
==2465==    by 0x858290: stir::ProjMatrixByBinSPECTUB::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjMatrixByBinSPECTUB.cxx:480)
==2465==    by 0x874468: stir::ForwardProjectorByBinUsingProjMatrixByBin::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ForwardProjectorByBinUsingProjMatrixByBin.cxx:102)
==2465==    by 0x8DE01C: stir::ProjectorByBinPair::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjectorByBinPair.cxx:48)
==2465==    by 0x878919: stir::ProjectorByBinPairUsingProjMatrixByBin::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjectorByBinPairUsingProjMatrixByBin.cxx:89)
==2465==    by 0x8A9F49: stir::PoissonLogLikelihoodWithLinearModelForMeanAndProjData<stir::DiscretisedDensity<3, float> >::set_up_before_sensitivity(std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (PoissonLogLikelihoodWithLinearModelForMeanAndProjData.cxx:576)
==2465==    by 0x8A3014: stir::PoissonLogLikelihoodWithLinearModelForMean<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (PoissonLogLikelihoodWithLinearModelForMean.cxx:291)
==2465==    by 0x829126: stir::IterativeReconstruction<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (IterativeReconstruction.cxx:477)
==2465==    by 0x79434A: stir::OSMAPOSLReconstruction<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (OSMAPOSLReconstruction.cxx:319)
==2465==    by 0x8287DF: stir::IterativeReconstruction<stir::DiscretisedDensity<3, float> >::reconstruct() (IterativeReconstruction.cxx:407)
==2465== 

INFO: 2D PSF Correction. Parallel geometry
MASK filename = mask.hv

Parameters of SPECT UB matrix: (in cm)
Image grid side row: 128	col: 128	transverse voxel_size: 0.331995
Number of slices: 64	slice_thickness: 0.332
Number of bins: 128	bin size: 0.332	axial size: 0.332
Number of angles: 120	Angle increment: -3	First angle: 180
Number of subsets: 120
Correction for attenuation: 		do_msk_att: 0
Attenuation map: 
Rotation radii: {15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15}
Minimum weight: 0

==2465== Conditional jump or move depends on uninitialised value(s)
==2465==    at 0x858A55: stir::ProjMatrixByBinSPECTUB::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjMatrixByBinSPECTUB.cxx:556)
==2465==    by 0x874468: stir::ForwardProjectorByBinUsingProjMatrixByBin::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ForwardProjectorByBinUsingProjMatrixByBin.cxx:102)
==2465==    by 0x8DE01C: stir::ProjectorByBinPair::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjectorByBinPair.cxx:48)
==2465==    by 0x878919: stir::ProjectorByBinPairUsingProjMatrixByBin::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjectorByBinPairUsingProjMatrixByBin.cxx:89)
==2465==    by 0x8A9F49: stir::PoissonLogLikelihoodWithLinearModelForMeanAndProjData<stir::DiscretisedDensity<3, float> >::set_up_before_sensitivity(std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (PoissonLogLikelihoodWithLinearModelForMeanAndProjData.cxx:576)
==2465==    by 0x8A3014: stir::PoissonLogLikelihoodWithLinearModelForMean<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (PoissonLogLikelihoodWithLinearModelForMean.cxx:291)
==2465==    by 0x829126: stir::IterativeReconstruction<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (IterativeReconstruction.cxx:477)
==2465==    by 0x79434A: stir::OSMAPOSLReconstruction<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (OSMAPOSLReconstruction.cxx:319)
==2465==    by 0x8287DF: stir::IterativeReconstruction<stir::DiscretisedDensity<3, float> >::reconstruct() (IterativeReconstruction.cxx:407)
==2465==    by 0x634A4C: main (OSMAPOSL.cxx:52)
==2465== 

WARNING: RadioNuclideDB::get_radionuclide: unknown modality. Returning "unknown" radionuclide.

WARNING: DiscretisedDensity does not contain any time frames. This might cause an error.
==2465== Conditional jump or move depends on uninitialised value(s)
==2465==    at 0x85EA66: SPECTUB::generate_msk(bool*, bool*, float*, SPECTUB::volume_type*, SPECTUB::wmh_type&) (SPECTUB_Tools.cxx:689)
==2465==    by 0x858C2C: stir::ProjMatrixByBinSPECTUB::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjMatrixByBinSPECTUB.cxx:568)
==2465==    by 0x874468: stir::ForwardProjectorByBinUsingProjMatrixByBin::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ForwardProjectorByBinUsingProjMatrixByBin.cxx:102)
==2465==    by 0x8DE01C: stir::ProjectorByBinPair::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjectorByBinPair.cxx:48)
==2465==    by 0x878919: stir::ProjectorByBinPairUsingProjMatrixByBin::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjectorByBinPairUsingProjMatrixByBin.cxx:89)
==2465==    by 0x8A9F49: stir::PoissonLogLikelihoodWithLinearModelForMeanAndProjData<stir::DiscretisedDensity<3, float> >::set_up_before_sensitivity(std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (PoissonLogLikelihoodWithLinearModelForMeanAndProjData.cxx:576)
==2465==    by 0x8A3014: stir::PoissonLogLikelihoodWithLinearModelForMean<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (PoissonLogLikelihoodWithLinearModelForMean.cxx:291)
==2465==    by 0x829126: stir::IterativeReconstruction<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (IterativeReconstruction.cxx:477)
==2465==    by 0x79434A: stir::OSMAPOSLReconstruction<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (OSMAPOSLReconstruction.cxx:319)
==2465==    by 0x8287DF: stir::IterativeReconstruction<stir::DiscretisedDensity<3, float> >::reconstruct() (IterativeReconstruction.cxx:407)
==2465==    by 0x634A4C: main (OSMAPOSL.cxx:52)
==2465== 
==2465== Conditional jump or move depends on uninitialised value(s)
==2465==    at 0x85F10B: SPECTUB::max_psf_szb(SPECTUB::angle_type*, SPECTUB::wmh_type&) (SPECTUB_Tools.cxx:788)
==2465==    by 0x858D35: stir::ProjMatrixByBinSPECTUB::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjMatrixByBinSPECTUB.cxx:585)
==2465==    by 0x874468: stir::ForwardProjectorByBinUsingProjMatrixByBin::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ForwardProjectorByBinUsingProjMatrixByBin.cxx:102)
==2465==    by 0x8DE01C: stir::ProjectorByBinPair::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjectorByBinPair.cxx:48)
==2465==    by 0x878919: stir::ProjectorByBinPairUsingProjMatrixByBin::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjectorByBinPairUsingProjMatrixByBin.cxx:89)
==2465==    by 0x8A9F49: stir::PoissonLogLikelihoodWithLinearModelForMeanAndProjData<stir::DiscretisedDensity<3, float> >::set_up_before_sensitivity(std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (PoissonLogLikelihoodWithLinearModelForMeanAndProjData.cxx:576)
==2465==    by 0x8A3014: stir::PoissonLogLikelihoodWithLinearModelForMean<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (PoissonLogLikelihoodWithLinearModelForMean.cxx:291)
==2465==    by 0x829126: stir::IterativeReconstruction<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (IterativeReconstruction.cxx:477)
==2465==    by 0x79434A: stir::OSMAPOSLReconstruction<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (OSMAPOSLReconstruction.cxx:319)
==2465==    by 0x8287DF: stir::IterativeReconstruction<stir::DiscretisedDensity<3, float> >::reconstruct() (IterativeReconstruction.cxx:407)
==2465==    by 0x634A4C: main (OSMAPOSL.cxx:52)
==2465== 
==2465== Conditional jump or move depends on uninitialised value(s)
==2465==    at 0x85F3F0: SPECTUB::calc_sigma_h(SPECTUB::voxel_type, SPECTUB::collim_type) (SPECTUB_Tools.cxx:815)
==2465==    by 0x85F255: SPECTUB::max_psf_szb(SPECTUB::angle_type*, SPECTUB::wmh_type&) (SPECTUB_Tools.cxx:794)
==2465==    by 0x858D35: stir::ProjMatrixByBinSPECTUB::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjMatrixByBinSPECTUB.cxx:585)
==2465==    by 0x874468: stir::ForwardProjectorByBinUsingProjMatrixByBin::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ForwardProjectorByBinUsingProjMatrixByBin.cxx:102)
==2465==    by 0x8DE01C: stir::ProjectorByBinPair::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjectorByBinPair.cxx:48)
==2465==    by 0x878919: stir::ProjectorByBinPairUsingProjMatrixByBin::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjectorByBinPairUsingProjMatrixByBin.cxx:89)
==2465==    by 0x8A9F49: stir::PoissonLogLikelihoodWithLinearModelForMeanAndProjData<stir::DiscretisedDensity<3, float> >::set_up_before_sensitivity(std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (PoissonLogLikelihoodWithLinearModelForMeanAndProjData.cxx:576)
==2465==    by 0x8A3014: stir::PoissonLogLikelihoodWithLinearModelForMean<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (PoissonLogLikelihoodWithLinearModelForMean.cxx:291)
==2465==    by 0x829126: stir::IterativeReconstruction<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (IterativeReconstruction.cxx:477)
==2465==    by 0x79434A: stir::OSMAPOSLReconstruction<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (OSMAPOSLReconstruction.cxx:319)
==2465==    by 0x8287DF: stir::IterativeReconstruction<stir::DiscretisedDensity<3, float> >::reconstruct() (IterativeReconstruction.cxx:407)
==2465==    by 0x634A4C: main (OSMAPOSL.cxx:52)
==2465== 
==2465== Conditional jump or move depends on uninitialised value(s)
==2465==    at 0x861AB2: SPECTUB::voxel_projection(SPECTUB::voxel_type*, float*, float, SPECTUB::wmh_type&) (SPECTUB_Weight3d.cxx:534)
==2465==    by 0x86120C: SPECTUB::wm_size_estimation(int, SPECTUB::angle_type const*, SPECTUB::voxel_type, SPECTUB::bin_type, SPECTUB::volume_type const&, SPECTUB::proj_type const&, bool const*, bool const*, int, SPECTUB::discrf_type const*, int*, SPECTUB::wmh_type&, float const*) (SPECTUB_Weight3d.cxx:385)
==2465==    by 0x859473: stir::ProjMatrixByBinSPECTUB::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjMatrixByBinSPECTUB.cxx:652)
==2465==    by 0x874468: stir::ForwardProjectorByBinUsingProjMatrixByBin::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ForwardProjectorByBinUsingProjMatrixByBin.cxx:102)
==2465==    by 0x8DE01C: stir::ProjectorByBinPair::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjectorByBinPair.cxx:48)
==2465==    by 0x878919: stir::ProjectorByBinPairUsingProjMatrixByBin::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjectorByBinPairUsingProjMatrixByBin.cxx:89)
==2465==    by 0x8A9F49: stir::PoissonLogLikelihoodWithLinearModelForMeanAndProjData<stir::DiscretisedDensity<3, float> >::set_up_before_sensitivity(std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (PoissonLogLikelihoodWithLinearModelForMeanAndProjData.cxx:576)
==2465==    by 0x8A3014: stir::PoissonLogLikelihoodWithLinearModelForMean<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (PoissonLogLikelihoodWithLinearModelForMean.cxx:291)
==2465==    by 0x829126: stir::IterativeReconstruction<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (IterativeReconstruction.cxx:477)
==2465==    by 0x79434A: stir::OSMAPOSLReconstruction<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (OSMAPOSLReconstruction.cxx:319)
==2465==    by 0x8287DF: stir::IterativeReconstruction<stir::DiscretisedDensity<3, float> >::reconstruct() (IterativeReconstruction.cxx:407)
==2465==    by 0x634A4C: main (OSMAPOSL.cxx:52)
==2465== 
==2465== Conditional jump or move depends on uninitialised value(s)
==2465==    at 0x85F3F0: SPECTUB::calc_sigma_h(SPECTUB::voxel_type, SPECTUB::collim_type) (SPECTUB_Tools.cxx:815)
==2465==    by 0x861F14: SPECTUB::fill_psf_2d(SPECTUB::psf2da_type*, SPECTUB::psf1d_type*, SPECTUB::voxel_type const&, SPECTUB::discrf_type const*, float, SPECTUB::wmh_type&) (SPECTUB_Weight3d.cxx:599)
==2465==    by 0x8612EB: SPECTUB::wm_size_estimation(int, SPECTUB::angle_type const*, SPECTUB::voxel_type, SPECTUB::bin_type, SPECTUB::volume_type const&, SPECTUB::proj_type const&, bool const*, bool const*, int, SPECTUB::discrf_type const*, int*, SPECTUB::wmh_type&, float const*) (SPECTUB_Weight3d.cxx:402)
==2465==    by 0x859473: stir::ProjMatrixByBinSPECTUB::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjMatrixByBinSPECTUB.cxx:652)
==2465==    by 0x874468: stir::ForwardProjectorByBinUsingProjMatrixByBin::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ForwardProjectorByBinUsingProjMatrixByBin.cxx:102)
==2465==    by 0x8DE01C: stir::ProjectorByBinPair::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjectorByBinPair.cxx:48)
==2465==    by 0x878919: stir::ProjectorByBinPairUsingProjMatrixByBin::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjectorByBinPairUsingProjMatrixByBin.cxx:89)
==2465==    by 0x8A9F49: stir::PoissonLogLikelihoodWithLinearModelForMeanAndProjData<stir::DiscretisedDensity<3, float> >::set_up_before_sensitivity(std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (PoissonLogLikelihoodWithLinearModelForMeanAndProjData.cxx:576)
==2465==    by 0x8A3014: stir::PoissonLogLikelihoodWithLinearModelForMean<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (PoissonLogLikelihoodWithLinearModelForMean.cxx:291)
==2465==    by 0x829126: stir::IterativeReconstruction<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (IterativeReconstruction.cxx:477)
==2465==    by 0x79434A: stir::OSMAPOSLReconstruction<stir::DiscretisedDensity<3, float> >::set_up(std::shared_ptr<stir::DiscretisedDensity<3, float> > const&) (OSMAPOSLReconstruction.cxx:319)
==2465==    by 0x8287DF: stir::IterativeReconstruction<stir::DiscretisedDensity<3, float> >::reconstruct() (IterativeReconstruction.cxx:407)
==2465== 

INFO: Done estimating size of matrix. Execution (CPU) time 82.13 s 

WARNING: SPECTUB matrix can currently only use single-threaded code unless all views are kept. Setting num_threads to 1

WARNING: Using OpenMP with number of threads=1 produces parallel overhead. You should compile without OPENMP support

INFO: Computing sensitivity

INFO: Starting loop with 1 threads

INFO: Thread 0/1 calculating segment_num: 0, view_num: 0

INFO: Computing matrix elements for view 0

INFO: total number of non-zero weights in this view: 1448143, estimated size: 14.5918 MB
==2465== Conditional jump or move depends on uninitialised value(s)
==2465==    at 0x861AB2: SPECTUB::voxel_projection(SPECTUB::voxel_type*, float*, float, SPECTUB::wmh_type&) (SPECTUB_Weight3d.cxx:534)
==2465==    by 0x8602F0: SPECTUB::wm_calculation(int, SPECTUB::angle_type const*, SPECTUB::voxel_type, SPECTUB::bin_type, SPECTUB::volume_type const&, SPECTUB::proj_type const&, float const*, bool const*, bool const*, int, SPECTUB::discrf_type const*, int const*, SPECTUB::wm_da_type&, SPECTUB::wmh_type&, float const*) (SPECTUB_Weight3d.cxx:177)
==2465==    by 0x85A2F2: stir::ProjMatrixByBinSPECTUB::compute_one_subset(int, float const*) const (ProjMatrixByBinSPECTUB.cxx:801)
==2465==    by 0x85AA5C: stir::ProjMatrixByBinSPECTUB::calculate_proj_matrix_elems_for_one_bin(stir::ProjMatrixElemsForOneBin&) const (ProjMatrixByBinSPECTUB.cxx:864)
==2465==    by 0x850A50: stir::ProjMatrixByBin::get_proj_matrix_elems_for_one_bin(stir::ProjMatrixElemsForOneBin&, stir::Bin const&) const (ProjMatrixByBin.inl:65)
==2465==    by 0x8763C9: stir::BackProjectorByBinUsingProjMatrixByBin::actual_back_project(stir::DiscretisedDensity<3, float>&, stir::RelatedViewgrams<float> const&, int, int, int, int) (BackProjectorByBinUsingProjMatrixByBin.cxx:148)
==2465==    by 0x80339D: stir::BackProjectorByBin::actual_back_project(stir::RelatedViewgrams<float> const&, int, int, int, int) (BackProjectorByBin.cxx:390)
==2465==    by 0x802E75: stir::BackProjectorByBin::back_project(stir::RelatedViewgrams<float> const&, int, int, int, int) (BackProjectorByBin.cxx:300)
==2465==    by 0x802B4C: stir::BackProjectorByBin::back_project(stir::RelatedViewgrams<float> const&) (BackProjectorByBin.cxx:240)
==2465==    by 0x8A8987: stir::RPC_process_related_viewgrams_sensitivity_computation(std::shared_ptr<stir::ForwardProjectorByBin> const&, std::shared_ptr<stir::BackProjectorByBin> const&, stir::RelatedViewgrams<float>*, int&, int&, double*, stir::RelatedViewgrams<float> const*, stir::RelatedViewgrams<float> const*) (PoissonLogLikelihoodWithLinearModelForMeanAndProjData.cxx:1333)
==2465==    by 0x8D7463: stir::distributable_computation(std::shared_ptr<stir::ForwardProjectorByBin> const&, std::shared_ptr<stir::BackProjectorByBin> const&, std::shared_ptr<stir::DataSymmetriesForViewSegmentNumbers> const&, stir::DiscretisedDensity<3, float>*, stir::DiscretisedDensity<3, float> const*, std::shared_ptr<stir::ProjData> const&, bool, int, int, int, int, bool, double*, std::shared_ptr<stir::ProjData> const&, std::shared_ptr<stir::BinNormalisation>, double, double, void (*)(std::shared_ptr<stir::ForwardProjectorByBin> const&, std::shared_ptr<stir::BackProjectorByBin> const&, stir::RelatedViewgrams<float>*, int&, int&, double*, stir::RelatedViewgrams<float> const*, stir::RelatedViewgrams<float> const*), stir::DistributedCachingInformation*) [clone ._omp_fn.0] (distributable.cxx:489)
==2465==    by 0x9525EDE: GOMP_parallel (in /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0)
==2465== 
==2465== Conditional jump or move depends on uninitialised value(s)
==2465==    at 0x85F3F0: SPECTUB::calc_sigma_h(SPECTUB::voxel_type, SPECTUB::collim_type) (SPECTUB_Tools.cxx:815)
==2465==    by 0x861F14: SPECTUB::fill_psf_2d(SPECTUB::psf2da_type*, SPECTUB::psf1d_type*, SPECTUB::voxel_type const&, SPECTUB::discrf_type const*, float, SPECTUB::wmh_type&) (SPECTUB_Weight3d.cxx:599)
==2465==    by 0x8603D5: SPECTUB::wm_calculation(int, SPECTUB::angle_type const*, SPECTUB::voxel_type, SPECTUB::bin_type, SPECTUB::volume_type const&, SPECTUB::proj_type const&, float const*, bool const*, bool const*, int, SPECTUB::discrf_type const*, int const*, SPECTUB::wm_da_type&, SPECTUB::wmh_type&, float const*) (SPECTUB_Weight3d.cxx:195)
==2465==    by 0x85A2F2: stir::ProjMatrixByBinSPECTUB::compute_one_subset(int, float const*) const (ProjMatrixByBinSPECTUB.cxx:801)
==2465==    by 0x85AA5C: stir::ProjMatrixByBinSPECTUB::calculate_proj_matrix_elems_for_one_bin(stir::ProjMatrixElemsForOneBin&) const (ProjMatrixByBinSPECTUB.cxx:864)
==2465==    by 0x850A50: stir::ProjMatrixByBin::get_proj_matrix_elems_for_one_bin(stir::ProjMatrixElemsForOneBin&, stir::Bin const&) const (ProjMatrixByBin.inl:65)
==2465==    by 0x8763C9: stir::BackProjectorByBinUsingProjMatrixByBin::actual_back_project(stir::DiscretisedDensity<3, float>&, stir::RelatedViewgrams<float> const&, int, int, int, int) (BackProjectorByBinUsingProjMatrixByBin.cxx:148)
==2465==    by 0x80339D: stir::BackProjectorByBin::actual_back_project(stir::RelatedViewgrams<float> const&, int, int, int, int) (BackProjectorByBin.cxx:390)
==2465==    by 0x802E75: stir::BackProjectorByBin::back_project(stir::RelatedViewgrams<float> const&, int, int, int, int) (BackProjectorByBin.cxx:300)
==2465==    by 0x802B4C: stir::BackProjectorByBin::back_project(stir::RelatedViewgrams<float> const&) (BackProjectorByBin.cxx:240)
==2465==    by 0x8A8987: stir::RPC_process_related_viewgrams_sensitivity_computation(std::shared_ptr<stir::ForwardProjectorByBin> const&, std::shared_ptr<stir::BackProjectorByBin> const&, stir::RelatedViewgrams<float>*, int&, int&, double*, stir::RelatedViewgrams<float> const*, stir::RelatedViewgrams<float> const*) (PoissonLogLikelihoodWithLinearModelForMeanAndProjData.cxx:1333)
==2465==    by 0x8D7463: stir::distributable_computation(std::shared_ptr<stir::ForwardProjectorByBin> const&, std::shared_ptr<stir::BackProjectorByBin> const&, std::shared_ptr<stir::DataSymmetriesForViewSegmentNumbers> const&, stir::DiscretisedDensity<3, float>*, stir::DiscretisedDensity<3, float> const*, std::shared_ptr<stir::ProjData> const&, bool, int, int, int, int, bool, double*, std::shared_ptr<stir::ProjData> const&, std::shared_ptr<stir::BinNormalisation>, double, double, void (*)(std::shared_ptr<stir::ForwardProjectorByBin> const&, std::shared_ptr<stir::BackProjectorByBin> const&, stir::RelatedViewgrams<float>*, int&, int&, double*, stir::RelatedViewgrams<float> const*, stir::RelatedViewgrams<float> const*), stir::DistributedCachingInformation*) [clone ._omp_fn.0] (distributable.cxx:489)
==2465== 

INFO: Weight matrix calculation done. time 4.44 (s)

INFO: Total time after transfering to ProjMatrixElemsForOneBin. time 10.43 (s)

INFO: Thread 0/1 calculating segment_num: 0, view_num: 8

INFO: Computing matrix elements for view 8

INFO: total number of non-zero weights in this view: 1452590, estimated size: 14.6342 MB

INFO: Weight matrix calculation done. time 5.26 (s)
emacs&
^C==2465== 
==2465== Process terminating with default action of signal 2 (SIGINT)
==2465==    at 0x67ECC4: stir::BasicCoordinate<3, int>::operator[](int) const (BasicCoordinate.inl:85)
==2465==    by 0x835904: stir::ProjMatrixElemsForOneBinValue::ProjMatrixElemsForOneBinValue(stir::BasicCoordinate<3, int> const&, float) (ProjMatrixElemsForOneBinValue.inl:46)
==2465==    by 0x85A684: stir::ProjMatrixByBinSPECTUB::compute_one_subset(int, float const*) const (ProjMatrixByBinSPECTUB.cxx:822)
==2465==    by 0x85AA5C: stir::ProjMatrixByBinSPECTUB::calculate_proj_matrix_elems_for_one_bin(stir::ProjMatrixElemsForOneBin&) const (ProjMatrixByBinSPECTUB.cxx:864)
==2465==    by 0x850A50: stir::ProjMatrixByBin::get_proj_matrix_elems_for_one_bin(stir::ProjMatrixElemsForOneBin&, stir::Bin const&) const (ProjMatrixByBin.inl:65)
==2465==    by 0x8763C9: stir::BackProjectorByBinUsingProjMatrixByBin::actual_back_project(stir::DiscretisedDensity<3, float>&, stir::RelatedViewgrams<float> const&, int, int, int, int) (BackProjectorByBinUsingProjMatrixByBin.cxx:148)
==2465==    by 0x80339D: stir::BackProjectorByBin::actual_back_project(stir::RelatedViewgrams<float> const&, int, int, int, int) (BackProjectorByBin.cxx:390)
==2465==    by 0x802E75: stir::BackProjectorByBin::back_project(stir::RelatedViewgrams<float> const&, int, int, int, int) (BackProjectorByBin.cxx:300)
==2465==    by 0x802B4C: stir::BackProjectorByBin::back_project(stir::RelatedViewgrams<float> const&) (BackProjectorByBin.cxx:240)
==2465==    by 0x8A8987: stir::RPC_process_related_viewgrams_sensitivity_computation(std::shared_ptr<stir::ForwardProjectorByBin> const&, std::shared_ptr<stir::BackProjectorByBin> const&, stir::RelatedViewgrams<float>*, int&, int&, double*, stir::RelatedViewgrams<float> const*, stir::RelatedViewgrams<float> const*) (PoissonLogLikelihoodWithLinearModelForMeanAndProjData.cxx:1333)
==2465==    by 0x8D7463: stir::distributable_computation(std::shared_ptr<stir::ForwardProjectorByBin> const&, std::shared_ptr<stir::BackProjectorByBin> const&, std::shared_ptr<stir::DataSymmetriesForViewSegmentNumbers> const&, stir::DiscretisedDensity<3, float>*, stir::DiscretisedDensity<3, float> const*, std::shared_ptr<stir::ProjData> const&, bool, int, int, int, int, bool, double*, std::shared_ptr<stir::ProjData> const&, std::shared_ptr<stir::BinNormalisation>, double, double, void (*)(std::shared_ptr<stir::ForwardProjectorByBin> const&, std::shared_ptr<stir::BackProjectorByBin> const&, stir::RelatedViewgrams<float>*, int&, int&, double*, stir::RelatedViewgrams<float> const*, stir::RelatedViewgrams<float> const*), stir::DistributedCachingInformation*) [clone ._omp_fn.0] (distributable.cxx:489)
==2465==    by 0x9525EDE: GOMP_parallel (in /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0)
==2465== 
==2465== HEAP SUMMARY:
==2465==     in use at exit: 77,739,232 bytes in 132,817 blocks
==2465==   total heap usage: 267,288 allocs, 134,471 frees, 179,561,506 bytes allocated
==2465== 
==2465== LEAK SUMMARY:
==2465==    definitely lost: 0 bytes in 0 blocks
==2465==    indirectly lost: 0 bytes in 0 blocks
==2465==      possibly lost: 0 bytes in 0 blocks
==2465==    still reachable: 77,739,232 bytes in 132,817 blocks
==2465==                       of which reachable via heuristic:
==2465==                         newarray           : 2,810,216 bytes in 601 blocks
==2465==         suppressed: 0 bytes in 0 blocks
@danieldeidda
Copy link
Collaborator

so it seem wmh needs to be intialised, I will have a look

@samdporter
Copy link
Contributor

samdporter commented Sep 7, 2023

I think this is relevant to this issue. Let me know if it needs its own:

I'm having issues with improperly initialised values when setting up the projector after setting a resolution model

acq_model_matrix = ProjMatrixByBinSPECTUB() 
acq_model_matrix.set_resolution_model(0.93, 0.03, False) 
projector = ProjectorByBinPairUsingProjMatrixByBin(acq_model_matrix)
projector.set_up(templ_sino.get_proj_data_info(), target) # error occurs here

Failing scripts for sirf and stir are available at https://github.com/samdporter/SPECTissues, along with valgrind outputs.

This error does not occur if no resolution model is set.

@samdporter
Copy link
Contributor

samdporter commented Sep 7, 2023

Relevant (I think) part of the valgrind output

==1156376== Conditional jump or move depends on uninitialised value(s)
==1156376==    at 0x64C3CB2: SPECTUB::max_psf_szb(SPECTUB::angle_type*, SPECTUB::wmh_type&) (SPECTUB_Tools.cxx:788)
==1156376==    by 0x64C099F: stir::ProjMatrixByBinSPECTUB::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjMatrixByBinSPECTUB.cxx:583)
==1156376==    by 0x64DA33E: stir::ForwardProjectorByBinUsingProjMatrixByBin::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ForwardProjectorByBinUsingProjMatrixByBin.cxx:100)
==1156376==    by 0x64DDD07: stir::ProjectorByBinPair::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjectorByBinPair.cxx:47)
==1156376==    by 0x64DE10C: stir::ProjectorByBinPairUsingProjMatrixByBin::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjectorByBinPairUsingProjMatrixByBin.cxx:88)
==1156376==    by 0x6242DA7: _wrap_ProjectorByBinPairUsingProjMatrixByBin_set_up (stirPYTHON_wrap.cxx:128250)
==1156376==    by 0x24C9DF: ??? (in /usr/bin/python3.10)
==1156376==    by 0x250F51: _PyEval_EvalFrameDefault (in /usr/bin/python3.10)
==1156376==    by 0x341E55: ??? (in /usr/bin/python3.10)
==1156376==    by 0x341CF5: PyEval_EvalCode (in /usr/bin/python3.10)
==1156376==    by 0x36C7D7: ??? (in /usr/bin/python3.10)
==1156376==    by 0x3660BA: ??? (in /usr/bin/python3.10)
==1156376== 
==1156376== Conditional jump or move depends on uninitialised value(s)
==1156376==    at 0x64C3713: SPECTUB::calc_sigma_h(SPECTUB::voxel_type, SPECTUB::collim_type) (SPECTUB_Tools.cxx:815)
==1156376==    by 0x64C3D47: SPECTUB::max_psf_szb(SPECTUB::angle_type*, SPECTUB::wmh_type&) (SPECTUB_Tools.cxx:794)
==1156376==    by 0x64C099F: stir::ProjMatrixByBinSPECTUB::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjMatrixByBinSPECTUB.cxx:583)
==1156376==    by 0x64DA33E: stir::ForwardProjectorByBinUsingProjMatrixByBin::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ForwardProjectorByBinUsingProjMatrixByBin.cxx:100)
==1156376==    by 0x64DDD07: stir::ProjectorByBinPair::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjectorByBinPair.cxx:47)
==1156376==    by 0x64DE10C: stir::ProjectorByBinPairUsingProjMatrixByBin::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjectorByBinPairUsingProjMatrixByBin.cxx:88)
==1156376==    by 0x6242DA7: _wrap_ProjectorByBinPairUsingProjMatrixByBin_set_up (stirPYTHON_wrap.cxx:128250)
==1156376==    by 0x24C9DF: ??? (in /usr/bin/python3.10)
==1156376==    by 0x250F51: _PyEval_EvalFrameDefault (in /usr/bin/python3.10)
==1156376==    by 0x341E55: ??? (in /usr/bin/python3.10)
==1156376==    by 0x341CF5: PyEval_EvalCode (in /usr/bin/python3.10)
==1156376==    by 0x36C7D7: ??? (in /usr/bin/python3.10)
==1156376== 
==1156376== Conditional jump or move depends on uninitialised value(s)
==1156376==    at 0x64C6B81: SPECTUB::voxel_projection(SPECTUB::voxel_type*, float*, float, SPECTUB::wmh_type&) (SPECTUB_Weight3d.cxx:534)
==1156376==    by 0x64C7AEE: SPECTUB::wm_size_estimation(int, SPECTUB::angle_type const*, SPECTUB::voxel_type, SPECTUB::bin_type, SPECTUB::volume_type const&, SPECTUB::proj_type const&, bool const*, bool const*, int, SPECTUB::discrf_type const*, int*, SPECTUB::wmh_type&, float const*) (SPECTUB_Weight3d.cxx:385)
==1156376==    by 0x64C0DD9: stir::ProjMatrixByBinSPECTUB::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjMatrixByBinSPECTUB.cxx:650)
==1156376==    by 0x64DA33E: stir::ForwardProjectorByBinUsingProjMatrixByBin::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ForwardProjectorByBinUsingProjMatrixByBin.cxx:100)
==1156376==    by 0x64DDD07: stir::ProjectorByBinPair::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjectorByBinPair.cxx:47)
==1156376==    by 0x64DE10C: stir::ProjectorByBinPairUsingProjMatrixByBin::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjectorByBinPairUsingProjMatrixByBin.cxx:88)
==1156376==    by 0x6242DA7: _wrap_ProjectorByBinPairUsingProjMatrixByBin_set_up (stirPYTHON_wrap.cxx:128250)
==1156376==    by 0x24C9DF: ??? (in /usr/bin/python3.10)
==1156376==    by 0x250F51: _PyEval_EvalFrameDefault (in /usr/bin/python3.10)
==1156376==    by 0x341E55: ??? (in /usr/bin/python3.10)
==1156376==    by 0x341CF5: PyEval_EvalCode (in /usr/bin/python3.10)
==1156376==    by 0x36C7D7: ??? (in /usr/bin/python3.10)
==1156376== 
==1156376== Conditional jump or move depends on uninitialised value(s)
==1156376==    at 0x64C3713: SPECTUB::calc_sigma_h(SPECTUB::voxel_type, SPECTUB::collim_type) (SPECTUB_Tools.cxx:815)
==1156376==    by 0x64C72FD: SPECTUB::fill_psf_2d(SPECTUB::psf2da_type*, SPECTUB::psf1d_type*, SPECTUB::voxel_type const&, SPECTUB::discrf_type const*, float, SPECTUB::wmh_type&) (SPECTUB_Weight3d.cxx:599)
==1156376==    by 0x64C7C7B: SPECTUB::wm_size_estimation(int, SPECTUB::angle_type const*, SPECTUB::voxel_type, SPECTUB::bin_type, SPECTUB::volume_type const&, SPECTUB::proj_type const&, bool const*, bool const*, int, SPECTUB::discrf_type const*, int*, SPECTUB::wmh_type&, float const*) (SPECTUB_Weight3d.cxx:402)
==1156376==    by 0x64C0DD9: stir::ProjMatrixByBinSPECTUB::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjMatrixByBinSPECTUB.cxx:650)
==1156376==    by 0x64DA33E: stir::ForwardProjectorByBinUsingProjMatrixByBin::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ForwardProjectorByBinUsingProjMatrixByBin.cxx:100)
==1156376==    by 0x64DDD07: stir::ProjectorByBinPair::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjectorByBinPair.cxx:47)
==1156376==    by 0x64DE10C: stir::ProjectorByBinPairUsingProjMatrixByBin::set_up(std::shared_ptr<stir::ProjDataInfo const> const&, std::shared_ptr<stir::DiscretisedDensity<3, float> const> const&) (ProjectorByBinPairUsingProjMatrixByBin.cxx:88)
==1156376==    by 0x6242DA7: _wrap_ProjectorByBinPairUsingProjMatrixByBin_set_up (stirPYTHON_wrap.cxx:128250)
==1156376==    by 0x24C9DF: ??? (in /usr/bin/python3.10)
==1156376==    by 0x250F51: _PyEval_EvalFrameDefault (in /usr/bin/python3.10)
==1156376==    by 0x341E55: ??? (in /usr/bin/python3.10)
==1156376==    by 0x341CF5: PyEval_EvalCode (in /usr/bin/python3.10)

@danieldeidda
Copy link
Collaborator

danieldeidda commented Sep 7, 2023

One of the possible reasons could be here:

else{
wmh.do_msk = true;
if( mask_type == "cylinder" ) wmh.do_msk_cyl = true;
else {
if( mask_type == "attenuation map" ) wmh.do_msk_att = true;
else{
if( mask_type == "explicit mask" ){
wmh.do_msk_file = true;
wmh.msk_fn = mask_file;
info_stream << "MASK filename = " << wmh.msk_fn << std::endl;
}
else
{
// error_wm_SPECT( 125, mask_type);
error("mask_type has to be No, Cylinder, Attenuation Map or Explicit Mask");
}
}
}
}

in each condition for mask type the relative do_msk is set to true but the others should also be set to false.
@KrisThielemans @samdporter do you agree? I suspect more similar stuff is below

@KrisThielemans
Copy link
Collaborator Author

in each condition for mask type the relative do_msk is set to true but the others should also be set to false.

looks like it. do_mask_att isn't always set for instance.

A few others

  • wmh.att_fn is never set. It should be set from this->attenuation_map.
  • set_attenuation_image_sptr(const shared_ptr<const DiscretisedDensity<3,float> > value) should set this->attenuation_map to "". There could be other set functions where the relevant variable isn't initialised.
  • wmh.COL.do_fb is only initialised in an else statement, which causes @samdporter problem. Looks like the collimator parameters need to be always set, even if do_psf (which makes sense of course), so most of the lines in that else statement need to be moved before the if(do_psf).

I think some of these don't matter too much, as in many places the logic will generally not use the variables that aren't set. (For instance, some of the valgridn messages occur only in the printing of information). But there have to be a few that do matter, so we'll have to work by elimination. Luckily valgrind will tell us as we shouldn't have any uninitalized warnings.

It's a bit weird that we get this now, but possible when wmh was a global variable, the compiler initialised it somehow anyway (I'd need to brush up on my C++...).

@danieldeidda
Copy link
Collaborator

  • wmh.COL.do_fb is only initialised in an else statement, which causes @samdporter problem. Looks like the collimator parameters need to be always set, even if do_psf (which makes sense of course), so most of the lines in that else statement need to be moved before the if(do_psf).

I guess we don't need this if statement then we can just print "No correction for PSF. Parallel geometry" if (!wmh.do_psf)

@danieldeidda
Copy link
Collaborator

also COL.num seem to be always zero when I debug but it's not intialised

@danieldeidda
Copy link
Collaborator

similar to att_fn:

image
these are also not initalised though my debugger shows them as ""

danieldeidda pushed a commit to danieldeidda/STIR that referenced this issue Sep 8, 2023
KrisThielemans added a commit that referenced this issue Sep 12, 2023
 SPECTUB: initialising old global values: fixing #1232
@KrisThielemans KrisThielemans linked a pull request Sep 12, 2023 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants