23 #ifndef SIRF_ABSTRACT_IMAGE_DATA_TYPE 24 #define SIRF_ABSTRACT_IMAGE_DATA_TYPE 26 #include "sirf/common/ANumRef.h" 27 #include "sirf/common/DataContainer.h" 28 #include "sirf/common/ANumRef.h" 29 #include "sirf/common/GeometricalInfo.h" 41 virtual Dimensions dimensions()
const = 0;
48 virtual ANumRef& operator*() = 0;
49 virtual bool operator==(
const Iterator&)
const = 0;
50 virtual bool operator!=(
const Iterator&)
const = 0;
56 virtual const ANumRef& operator*()
const = 0;
64 virtual bool ordered()
const 70 for (; dst != end; ++dst, ++src)
78 for (; dst != end; ++dst, ++src)
89 if (gi_self != gi_other)
98 for (; x != this->end(); ++x, ++y) {
99 zx = (*x).complex_float();
100 zy = (*y).complex_float();
101 sx += std::abs(zx*zx);
102 sy += std::abs(zy*zy);
104 s += std::abs(zx*zx);
106 float t = std::max(sx, sy);
107 bool same = (s <= 1e-6*t);
110 virtual bool operator!=(
const ImageData&
id)
const 112 return !(*
this == id);
118 if (!_geom_info_sptr)
119 throw std::runtime_error(
"Geometrical info not initialised. This implies that" 120 " your constructor did not call set_up_geom_info() or there was " 121 "an error. Build in debug mode and lookout for any printed text " 122 "containing '::set_up_geom_info()'.");
123 return _geom_info_sptr;
126 std::unique_ptr<ImageData>
clone()
const 128 return std::unique_ptr<ImageData>(this->
clone_impl());
142 void set_geom_info(
const std::shared_ptr<VoxelisedGeometricalInfo3D> geom_info_sptr) { _geom_info_sptr = geom_info_sptr; }
144 std::shared_ptr<VoxelisedGeometricalInfo3D> _geom_info_sptr;
Definition: ImageData.h:37
Definition: GeometricalInfo.h:49
virtual void set_up_geom_info()=0
Populate the geometrical info metadata (from the image's own metadata)
virtual bool operator==(const ImageData &id) const
Write image to file.
Definition: ImageData.h:83
Definition: ImageData.h:52
virtual bool is_complex() const
Is complex? Unless overwridden (Gadgetron), assume not complex.
Definition: ImageData.h:131
virtual ImageData * clone_impl() const =0
Clone helper function. Don't use.
std::unique_ptr< ImageData > clone() const
Clone and return as unique pointer.
Definition: ImageData.h:126
Definition: ImageData.h:44
virtual void reorient(const VoxelisedGeometricalInfo3D &)
Reorient image. Requires that dimesions and spacing match.
Definition: ImageData.cpp:25
Abstract data container.
Definition: GeometricalInfo.cpp:141
void set_geom_info(const std::shared_ptr< VoxelisedGeometricalInfo3D > geom_info_sptr)
Set geom info.
Definition: ImageData.h:142
Definition: GeometricalInfo.h:32
Definition: DataContainer.h:41
static bool can_reorient(const VoxelisedGeometricalInfo3D &geom_1, const VoxelisedGeometricalInfo3D &geom_2, const bool throw_error)
Can reorient? (check dimensions and spacing)
Definition: ImageData.cpp:30
std::shared_ptr< const VoxelisedGeometricalInfo3D > get_geom_info_sptr() const
Get geometrical info.
Definition: ImageData.h:115