Skip to content

Commit 7c1fc00

Browse files
minor clean-up and clarifications
1 parent 81c5b64 commit 7c1fc00

File tree

4 files changed

+29
-30
lines changed

4 files changed

+29
-30
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ install_manifest.txt
5757
~$*
5858
*~
5959
*.bak
60+
\#*#
6061

6162
# Ignore Visual Studio User-specific files
6263
*.suo

src/include/stir/recon_buildblock/ProjMatrixByBin.inl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ ProjMatrixByBin::get_tof_value(const float d1, const float d2) const
149149
if ((d1_n >= 4.f && d2_n >= 4.f) || (d1_n <= -4.f && d2_n <= -4.f))
150150
return 0.F;
151151
else
152-
return 0.5f * (erf_interpolation(d2_n) - erf_interpolation(d1_n));
152+
return static_cast<float>(0.5 * (erf_interpolation(d2_n) - erf_interpolation(d1_n)));
153153
}
154154

155155
END_NAMESPACE_STIR

src/include/stir/recon_buildblock/ProjMatrixElemsForOneBin.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -178,14 +178,14 @@ class ProjMatrixElemsForOneBin
178178

179179
//******************** projection operations ********************//
180180

181-
//! back project a single bin
181+
//! back project a single bin (accumulates)
182182
void back_project(DiscretisedDensity<3, float>&, const Bin&) const;
183183

184-
//! forward project into a single bin
184+
//! forward project into a single bin (accumulates)
185185
void forward_project(Bin&, const DiscretisedDensity<3, float>&) const;
186-
//! back project related bins
186+
//! back project related bins (accumulates)
187187
void back_project(DiscretisedDensity<3, float>&, const RelatedBins&) const;
188-
//! forward project related bins
188+
//! forward project related bins (accumulates)
189189
void forward_project(RelatedBins&, const DiscretisedDensity<3, float>&) const;
190190

191191
private:

src/recon_buildblock/distributable.cxx

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -685,10 +685,10 @@ LM_distributable_computation_template(const shared_ptr<ProjMatrixByBin> PM_sptr,
685685

686686
PM_sptr->get_proj_matrix_elems_for_one_bin(local_row[thread_num], measured_bin);
687687
call_back(*local_output_image_sptrs[thread_num],
688-
measured_bin,
689-
*input_image_ptr,
690688
local_row[thread_num],
691-
has_add ? record.my_corr : 0);
689+
has_add ? record.my_corr : 0.F,
690+
measured_bin,
691+
*input_image_ptr);
692692
}
693693
}
694694
#ifdef STIR_OPENMP
@@ -710,56 +710,54 @@ LM_distributable_computation_template(const shared_ptr<ProjMatrixByBin> PM_sptr,
710710

711711
constexpr float max_quotient = 10000.F;
712712

713+
/* gradient without the sensitivity term
714+
715+
\sum_e A_e^t (y_e/(A_e lambda+ c))
716+
*/
713717
inline void
714718
LM_gradient(DiscretisedDensity<3, float>& output_image,
715-
const Bin& measured_bin,
716-
const DiscretisedDensity<3, float>& input_image,
717719
const ProjMatrixElemsForOneBin& row,
718-
const float add_term)
720+
const float add_term,
721+
const Bin& measured_bin,
722+
const DiscretisedDensity<3, float>& input_image)
719723
{
720724
Bin fwd_bin = measured_bin;
721725
fwd_bin.set_bin_value(0.0f);
722726
row.forward_project(fwd_bin, input_image);
727+
const auto fwd = fwd_bin.get_bin_value() + add_term;
723728

724-
if (add_term)
725-
fwd_bin.set_bin_value(fwd_bin.get_bin_value() + add_term);
726-
727-
float measured_div_fwd = 0.F;
728-
if (measured_bin.get_bin_value() <= max_quotient * fwd_bin.get_bin_value())
729-
measured_div_fwd = measured_bin.get_bin_value() / fwd_bin.get_bin_value();
730-
else
731-
return;
729+
if (measured_bin.get_bin_value() > max_quotient * fwd)
730+
return; // cancel singularity
731+
const auto measured_div_fwd = measured_bin.get_bin_value() / fwd;
732732

733733
fwd_bin.set_bin_value(measured_div_fwd);
734734
row.back_project(output_image, fwd_bin);
735735
}
736736

737737
/* Hessian
738738
739-
\sum_e A_e^t (y_e/(A_e lambda+ c)^2 A_e x)
739+
\sum_e A_e^t (y_e/(A_e lambda+ c)^2 A_e rhs)
740740
*/
741741
inline void
742742
LM_Hessian(DiscretisedDensity<3, float>& output_image,
743+
const ProjMatrixElemsForOneBin& row,
744+
const float add_term,
743745
const Bin& measured_bin,
744746
const DiscretisedDensity<3, float>& input_image,
745-
const DiscretisedDensity<3, float>& rhs,
746-
const ProjMatrixElemsForOneBin& row,
747-
const float add_term)
747+
const DiscretisedDensity<3, float>& rhs)
748748
{
749749
Bin fwd_bin = measured_bin;
750750
fwd_bin.set_bin_value(0.0f);
751751
row.forward_project(fwd_bin, input_image);
752+
const auto fwd = fwd_bin.get_bin_value() + add_term;
752753

753-
if (add_term)
754-
fwd_bin.set_bin_value(fwd_bin.get_bin_value() + add_term);
755-
756-
if (measured_bin.get_bin_value() > max_quotient * fwd_bin.get_bin_value())
757-
return;
758-
float measured_div_fwd2 = measured_bin.get_bin_value() / square(fwd_bin.get_bin_value());
754+
if (measured_bin.get_bin_value() > max_quotient * fwd)
755+
return; // cancel singularity
756+
const auto measured_div_fwd2 = measured_bin.get_bin_value() / square(fwd);
759757

758+
// forward project rhs
760759
fwd_bin.set_bin_value(0.0f);
761760
row.forward_project(fwd_bin, rhs);
762-
763761
if (fwd_bin.get_bin_value() == 0)
764762
return;
765763

0 commit comments

Comments
 (0)