Skip to content

Commit

Permalink
[REF] Use DiscretisedDensity's index <-> physical space conversions i…
Browse files Browse the repository at this point in the history
…n ProjMatrixByBinUsingRayTracing
  • Loading branch information
ashgillman committed Oct 11, 2018
1 parent dc858c2 commit 0365f96
Show file tree
Hide file tree
Showing 6 changed files with 200 additions and 73 deletions.
17 changes: 17 additions & 0 deletions src/buildblock/ProjDataInfo.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -652,5 +652,22 @@ operator>=(const ProjDataInfo& proj_data_info) const
return (proj_data_info == *smaller_proj_data_info_sptr);
}

CartesianCoordinate3D<float>
ProjDataInfo::
get_bed_position() const
{
return CartesianCoordinate3D<float>
(bed_position_horizontal, bed_position_vertical, 0);
}

CartesianCoordinate3D<float>
ProjDataInfo::
get_centre_of_gantry_vector_in_relative_coordinates() const
{
double middle_of_first_ring_to_middle_of_last
= (scanner_ptr->get_num_rings() - 1) * scanner_ptr->get_ring_spacing();
return CartesianCoordinate3D<float>(middle_of_first_ring_to_middle_of_last / 2.F, 0, 0);
}

END_NAMESPACE_STIR

11 changes: 11 additions & 0 deletions src/include/stir/DiscretisedDensity.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
#include "stir/CartesianCoordinate3D.h"
#include "stir/Array.h"
#include "stir/IO/ExamData.h"
#include "stir/ProjDataInfo.h"
#include "stir/shared_ptr.h"
#include <string>

Expand Down Expand Up @@ -253,6 +254,16 @@ template<int num_dimensions, typename elemT>
inline BasicCoordinate<num_dimensions,int>
get_indices_closest_to_LPS_coordinates(const CartesianCoordinate3D<float>& coords) const;

inline CartesianCoordinate3D<float>
get_relative_coordinates_for_gantry_coordinates
(const CartesianCoordinate3D<float>& coords,
const shared_ptr<ProjDataInfo> proj_data_info_sptr) const;

inline BasicCoordinate<num_dimensions, float>
get_index_coordinates_for_gantry_coordinates
(const CartesianCoordinate3D<float>& coords,
const shared_ptr<ProjDataInfo> proj_data_info_sptr) const;

//@}

//! Allocate a new DiscretisedDensity object with same characteristics as the current one.
Expand Down
25 changes: 25 additions & 0 deletions src/include/stir/DiscretisedDensity.inl
Original file line number Diff line number Diff line change
Expand Up @@ -304,4 +304,29 @@ get_indices_closest_to_LPS_coordinates(const CartesianCoordinate3D<float>& coord
return round(this->get_index_coordinates_for_LPS_coordinates(coords));
}

template<int num_dimensions, typename elemT>
CartesianCoordinate3D<float>
DiscretisedDensity<num_dimensions, elemT>::
get_relative_coordinates_for_gantry_coordinates
(const CartesianCoordinate3D<float>& coords,
const shared_ptr<ProjDataInfo> proj_data_info_ptr) const
{
// gantry coordinates are like relative coordinates, but the (0, 0, 0)
// point is at the center of the gantry
return coords
+ proj_data_info_ptr->get_centre_of_gantry_vector_in_relative_coordinates();
}

template<int num_dimensions, typename elemT>
BasicCoordinate<num_dimensions,float>
DiscretisedDensity<num_dimensions, elemT>::
get_index_coordinates_for_gantry_coordinates
(const CartesianCoordinate3D<float>& coords,
const shared_ptr<ProjDataInfo> proj_data_info_ptr) const
{
return this->get_index_coordinates_for_relative_coordinates
(this->get_relative_coordinates_for_gantry_coordinates
(coords, proj_data_info_ptr));
}

END_NAMESPACE_STIR
10 changes: 9 additions & 1 deletion src/include/stir/ProjDataInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@

#include "stir/VectorWithOffset.h"
#include "stir/Scanner.h"
#include "stir/CartesianCoordinate3D.h"
#include "stir/shared_ptr.h"
#include "stir/unique_ptr.h"
#include <string>
Expand Down Expand Up @@ -364,7 +365,14 @@ class ProjDataInfo

//! Get vertical bed position
float get_bed_position_vertical() const { return bed_position_vertical; }


//! Vector represention bed position in 3D
CartesianCoordinate3D<float> get_bed_position() const;

//! Vector from image frame of reference (centre of first ring) to gantry centre
CartesianCoordinate3D<float>
get_centre_of_gantry_vector_in_relative_coordinates() const;

protected:
virtual bool blindly_equals(const root_type * const) const = 0;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,8 @@ public :
CartesianCoordinate3D<int> min_index;
CartesianCoordinate3D<int> max_index;

shared_ptr<ProjDataInfo> proj_data_info_ptr;
shared_ptr<ProjDataInfo> proj_data_info_sptr;
shared_ptr< DiscretisedDensity<3,float> > density_info_sptr;


virtual void
Expand Down
Loading

0 comments on commit 0365f96

Please sign in to comment.