32 #ifndef STIR_DATA_CONTAINER_TYPES 33 #define STIR_DATA_CONTAINER_TYPES 41 #include "sirf/STIR/stir_types.h" 42 #include "sirf/iUtilities/LocalisedException.h" 45 #include "sirf/common/JacobiCG.h" 46 #include "sirf/common/DataContainer.h" 47 #include "sirf/common/ANumRef.h" 48 #include "sirf/common/ImageData.h" 49 #include "sirf/common/GeometricalInfo.h" 50 #include "stir/ZoomOptions.h" 52 #if STIR_VERSION < 050000 53 #define SPTR_WRAP(X) X->create_shared_clone() 55 #define SPTR_WRAP(X) X 62 static long long milliseconds()
64 auto now = std::chrono::system_clock::now();
65 auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch());
66 return (
long long)ms.count();
68 static std::string scratch_file_name()
72 long long int ms = milliseconds();
74 sprintf(buff,
"tmp_%d_%lld", calls, ms);
75 return std::string(buff);
90 ProjDataFile(
const stir::ProjData& pd,
const std::string& filename,
bool owns_file =
true) :
91 stir::ProjDataInterfile(pd.get_exam_info_sptr(),
92 pd.get_proj_data_info_sptr()->create_shared_clone(),
93 filename, std::ios::in | std::ios::out | std::ios::trunc),
97 ProjDataFile(stir::shared_ptr<const stir::ExamInfo> sptr_exam_info,
98 stir::shared_ptr<stir::ProjDataInfo> sptr_proj_data_info,
99 const std::string& filename,
bool owns_file =
true) :
100 stir::ProjDataInterfile(SPTR_WRAP(sptr_exam_info), SPTR_WRAP(sptr_proj_data_info),
101 filename, std::ios::in | std::ios::out | std::ios::trunc),
103 _owns_file(owns_file)
112 err = std::remove((_filename +
".hs").c_str());
114 std::cout <<
"deleting " << _filename <<
".hs " 115 <<
"failed, please delete manually" << std::endl;
116 err = std::remove((_filename +
".s").c_str());
118 std::cout <<
"deleting " << _filename <<
".s " 119 <<
"failed, please delete manually" << std::endl;
121 stir::shared_ptr<std::iostream> sino_stream_sptr()
127 ((std::fstream*)sino_stream.get())->close();
131 ((std::fstream*)sino_stream.get())->clear();
135 std::string _filename;
154 (stir::shared_ptr<const stir::ExamInfo> sptr_exam_info,
155 stir::shared_ptr<stir::ProjDataInfo> sptr_proj_data_info)
const = 0;
156 virtual std::shared_ptr<PETAcquisitionData> new_acquisition_data()
const = 0;
158 virtual bool is_complex()
const 163 virtual std::unique_ptr<PETAcquisitionData> get_subset(
const std::vector<int>& views)
const = 0;
181 const int num_segments_to_combine,
182 const int num_views_to_combine = 1,
183 const int num_tang_poss_to_trim = 0,
184 const bool do_normalisation =
true,
185 const int max_in_segment_num_to_process = -1,
186 const int num_tof_bins_to_combine = 1
189 stir::shared_ptr<stir::ProjDataInfo> out_proj_data_info_sptr(
190 stir::SSRB(*data()->get_proj_data_info_sptr(),
191 num_segments_to_combine,
192 num_views_to_combine,
193 num_tang_poss_to_trim,
194 max_in_segment_num_to_process,
195 num_tof_bins_to_combine
197 std::shared_ptr<PETAcquisitionData>
198 sptr(same_acquisition_data
199 (this->get_exam_info_sptr(), out_proj_data_info_sptr));
200 stir::SSRB(*sptr, *data(), do_normalisation);
204 static std::string storage_scheme()
206 static bool initialized =
false;
208 _storage_scheme =
"file";
211 return _storage_scheme;
213 static std::shared_ptr<PETAcquisitionData> storage_template()
218 stir::shared_ptr<stir::ProjData> data()
222 const stir::shared_ptr<stir::ProjData> data()
const 226 void set_data(stir::shared_ptr<stir::ProjData> data)
232 virtual void fill(
const float v) { data()->fill(v); }
236 THROW(
"The source of PETAcquisitionData::fill is empty");
237 stir::shared_ptr<stir::ProjData> sptr = ad.data();
240 virtual void fill_from(
const float* d) { data()->fill_from(d); }
241 virtual void copy_to(
float* d)
const { data()->copy_to(d); }
242 std::unique_ptr<PETAcquisitionData> clone()
const 244 return std::unique_ptr<PETAcquisitionData>(clone_impl());
248 unsigned int items()
const {
250 return _is_empty ? 0 : 1;
252 get_segment_by_sinogram(0);
254 catch (std::string msg) {
261 virtual float norm()
const;
295 virtual void write(
const std::string &filename)
const 302 int get_num_tangential_poss()
304 return data()->get_num_tangential_poss();
308 return data()->get_num_views();
316 return data()->get_num_sinograms();
322 return data()->get_num_non_tof_sinograms();
325 int get_num_TOF_bins()
327 return data()->get_num_tof_poss();
330 int get_tof_mash_factor()
const 332 return data()->get_proj_data_info_sptr()->get_tof_mash_factor();
335 size_t get_dimensions(
int* dim)
337 dim[0] = get_num_tangential_poss();
338 dim[1] = get_num_views();
339 dim[2] = get_num_non_TOF_sinograms();
340 dim[3] = get_num_TOF_bins();
341 return static_cast<size_t>(dim[0] * dim[1] * dim[2] * dim[3]);
343 int get_max_segment_num()
const 345 return data()->get_max_segment_num();
347 stir::SegmentBySinogram<float>
348 get_segment_by_sinogram(
const int segment_num)
const 350 return data()->get_segment_by_sinogram(segment_num);
352 stir::SegmentBySinogram<float>
353 get_empty_segment_by_sinogram(
const int segment_num)
const 355 return data()->get_empty_segment_by_sinogram(segment_num);
357 void set_segment(
const stir::SegmentBySinogram<float>& s)
359 if (data()->set_segment(s) != stir::Succeeded::yes)
360 THROW(
"stir::ProjData set segment failed");
362 stir::shared_ptr<const stir::ExamInfo> get_exam_info_sptr()
const 364 return data()->get_exam_info_sptr();
366 stir::shared_ptr<const stir::ProjDataInfo> get_proj_data_info_sptr()
const 368 return data()->get_proj_data_info_sptr();
372 operator stir::ProjData&() {
return *data(); }
373 operator const stir::ProjData&()
const {
return *data(); }
374 operator stir::shared_ptr<stir::ProjData>() {
return data(); }
376 static stir::shared_ptr<stir::ProjDataInfo>
377 proj_data_info_from_scanner(std::string scanner_name,
378 int span = 1,
int max_ring_diff = -1,
int view_mash_factor = 1)
380 stir::shared_ptr<stir::Scanner>
381 sptr_s(stir::Scanner::get_scanner_from_name(scanner_name));
386 int num_views = sptr_s->get_num_detectors_per_ring() / 2 / view_mash_factor;
387 int num_tang_pos = sptr_s->get_max_num_non_arccorrected_bins();
388 if (max_ring_diff < 0)
389 max_ring_diff = sptr_s->get_num_rings() - 1;
390 return std::move(stir::ProjDataInfo::construct_proj_data_info
391 (sptr_s, span, max_ring_diff, num_views, num_tang_pos,
false));
395 static std::string _storage_scheme;
396 static std::shared_ptr<PETAcquisitionData> _template;
397 stir::shared_ptr<stir::ProjData> _data;
401 stir::shared_ptr<stir::ProjDataInfo> sptr_pdi = this->get_proj_data_info_sptr()->create_shared_clone();
403 _template->same_acquisition_data(this->get_exam_info_sptr(), sptr_pdi);
404 if (!this->is_empty())
410 mutable int _is_empty = -1;
425 _data = stir::ProjData::read_from_file(filename);
428 stir::shared_ptr<stir::ProjDataInfo> sptr_proj_data_info)
431 (MAKE_SHARED<stir::ExamInfo>(*sptr_exam_info), sptr_proj_data_info,
432 _filename = SIRFUtilities::scratch_file_name()));
437 (pd, _filename = SIRFUtilities::scratch_file_name()));
440 (stir::shared_ptr<stir::ExamInfo> sptr_ei, std::string scanner_name,
441 int span = 1,
int max_ring_diff = -1,
int view_mash_factor = 1)
443 stir::shared_ptr<stir::ProjDataInfo> sptr_pdi =
444 PETAcquisitionData::proj_data_info_from_scanner
445 (scanner_name, span, max_ring_diff, view_mash_factor);
447 _filename = SIRFUtilities::scratch_file_name());
454 auto pd_ptr =
dynamic_cast<stir::ProjDataInterfile*
>(uptr_pd.get());
456 _data = std::move(uptr_pd);
458 stir::ProjData& pd = *uptr_pd;
459 stir::shared_ptr<const stir::ExamInfo> sptr_exam_info =
460 pd.get_exam_info_sptr();
461 stir::shared_ptr<stir::ProjDataInfo> sptr_proj_data_info =
462 pd.get_proj_data_info_sptr()->create_shared_clone();
464 (MAKE_SHARED<stir::ExamInfo>(*sptr_exam_info), sptr_proj_data_info,
465 _filename = SIRFUtilities::scratch_file_name()));
469 std::shared_ptr<PETAcquisitionData> new_acquisition_data(std::string filename)
472 sptr_ad->_data.reset(
new ProjDataFile(*data(), filename,
false));
477 static bool initialized =
false;
479 _storage_scheme =
"file";
482 PETAcquisitionData::storage_scheme();
485 static void set_as_template()
488 _storage_scheme =
"file";
493 (stir::shared_ptr<const stir::ExamInfo> sptr_exam_info,
494 stir::shared_ptr<stir::ProjDataInfo> sptr_proj_data_info)
const 504 this->get_exam_info_sptr(),
505 this->get_proj_data_info_sptr()->create_shared_clone());
507 (std::shared_ptr<DataContainer>(ptr));
509 virtual std::shared_ptr<PETAcquisitionData> new_acquisition_data()
const 512 return std::shared_ptr < PETAcquisitionData >
513 (_template->same_acquisition_data(this->get_exam_info_sptr(),
514 this->get_proj_data_info_sptr()->create_shared_clone()));
516 virtual std::unique_ptr<PETAcquisitionData> get_subset(
const std::vector<int>& views)
const;
520 std::string _filename;
538 stir::shared_ptr<const stir::ProjDataInfo> sptr_proj_data_info)
540 _data = stir::shared_ptr<stir::ProjData>
541 (
new stir::ProjDataInMemory(SPTR_WRAP(sptr_exam_info), SPTR_WRAP(sptr_proj_data_info)));
545 _data = stir::shared_ptr<stir::ProjData>
546 (
new stir::ProjDataInMemory(templ.get_exam_info_sptr(),
547 templ.get_proj_data_info_sptr()->create_shared_clone()));
550 (stir::shared_ptr<stir::ExamInfo> sptr_ei, std::string scanner_name,
551 int span = 1,
int max_ring_diff = -1,
int view_mash_factor = 1)
553 stir::shared_ptr<stir::ProjDataInfo> sptr_pdi =
554 PETAcquisitionData::proj_data_info_from_scanner
555 (scanner_name, span, max_ring_diff, view_mash_factor);
556 stir::ProjDataInMemory* ptr =
new stir::ProjDataInMemory(sptr_ei, sptr_pdi);
563 auto pd_ptr =
dynamic_cast<stir::ProjDataInMemory*
>(uptr_pd.get());
565 _data = std::move(uptr_pd);
567 std::cout <<
"copying ProjData to ProjDataInMemory...\n";
568 const stir::ProjData& pd = *uptr_pd;
569 auto exam_info_sptr = SPTR_WRAP(pd.get_exam_info_sptr());
570 auto proj_data_info_sptr =
571 SPTR_WRAP(pd.get_proj_data_info_sptr()->create_shared_clone());
572 _data.reset(
new stir::ProjDataInMemory(exam_info_sptr, proj_data_info_sptr));
579 auto pd_sptr = stir::ProjData::read_from_file(filename);
580 bool is_empty =
false;
582 pd_sptr->get_segment_by_sinogram(0);
588 _data = stir::shared_ptr<stir::ProjData>
589 (
new stir::ProjDataInMemory(pd_sptr->get_exam_info_sptr(),
590 pd_sptr->get_proj_data_info_sptr()->create_shared_clone()));
592 _data = stir::shared_ptr<stir::ProjData>
593 (
new stir::ProjDataInMemory(*pd_sptr));
598 static void set_as_template()
601 _storage_scheme =
"memory";
606 (stir::shared_ptr<const stir::ExamInfo> sptr_exam_info,
607 stir::shared_ptr<stir::ProjDataInfo> sptr_proj_data_info)
const 617 (this->get_exam_info_sptr(),
618 this->get_proj_data_info_sptr()->create_shared_clone());
620 (std::shared_ptr<DataContainer>(ptr));
622 virtual std::shared_ptr<PETAcquisitionData> new_acquisition_data()
const 625 return std::shared_ptr < PETAcquisitionData >
626 (_template->same_acquisition_data
627 (this->get_exam_info_sptr(),
628 this->get_proj_data_info_sptr()->create_shared_clone()));
630 virtual std::unique_ptr<PETAcquisitionData> get_subset(
const std::vector<int>& views)
const;
633 virtual void fill(
const float v)
635 stir::ProjDataInMemory *pd_ptr =
dynamic_cast<stir::ProjDataInMemory*
>(data().get());
637 if (is_null_ptr(pd_ptr))
638 return this->PETAcquisitionData::fill(v);
641 auto iter = pd_ptr->begin();
642 while (iter != pd_ptr->end())
649 stir::ProjDataInMemory *pd_ptr =
dynamic_cast<stir::ProjDataInMemory*
>(data().get());
650 const stir::ProjDataInMemory *pd2_ptr =
dynamic_cast<const stir::ProjDataInMemory*
>(ad.data().get());
652 if (is_null_ptr(pd_ptr) || is_null_ptr(pd2_ptr))
653 return this->PETAcquisitionData::fill(ad);
656 auto iter = pd_ptr->begin();
657 auto iter_other = pd2_ptr->begin();
658 while (iter != pd_ptr->end())
659 *iter++ = *iter_other++;
664 stir::ProjDataInMemory *pd_ptr =
dynamic_cast<stir::ProjDataInMemory*
>(data().get());
666 if (is_null_ptr(pd_ptr))
667 return this->PETAcquisitionData::fill_from(d);
670 auto iter = pd_ptr->begin();
671 while (iter != pd_ptr->end())
677 const stir::ProjDataInMemory *pd_ptr =
dynamic_cast<const stir::ProjDataInMemory*
>(data().get());
679 if (is_null_ptr(pd_ptr))
680 return this->PETAcquisitionData::copy_to(d);
683 auto iter = pd_ptr->begin();
684 while (iter != pd_ptr->end())
689 const stir::ProjDataInMemory *pd_ptr =
dynamic_cast<const stir::ProjDataInMemory*
>(data().get());
691 if (is_null_ptr(pd_ptr))
696 auto iter = pd_ptr->begin();
697 for (; iter != pd_ptr->end(); ++iter)
698 t += (*iter) * (*iter);
699 return sqrt((
float)t);
705 stir::ProjDataInMemory *pd_ptr =
dynamic_cast<stir::ProjDataInMemory*
>(data().get());
706 const stir::ProjDataInMemory *pd2_ptr =
dynamic_cast<const stir::ProjDataInMemory*
>(x->data().get());
708 if (is_null_ptr(pd_ptr) || is_null_ptr(pd2_ptr))
713 auto iter = pd_ptr->begin();
714 auto iter_other = pd2_ptr->begin();
715 while (iter != pd_ptr->end())
716 t += (*iter++) * (*iter_other++);
718 float* ptr_t = (
float*)ptr;
727 auto *pd_ptr =
dynamic_cast<stir::ProjDataInMemory*
>(data().get());
728 auto *pd_x_ptr =
dynamic_cast<const stir::ProjDataInMemory*
>(a_x->data().get());
729 auto *pd_y_ptr =
dynamic_cast<const stir::ProjDataInMemory*
>(a_y->data().get());
732 if (is_null_ptr(pd_ptr) || is_null_ptr(pd_x_ptr) || is_null_ptr(pd_x_ptr))
736 auto iter = pd_ptr->begin();
737 auto iter_x = pd_x_ptr->begin();
738 auto iter_y = pd_y_ptr->begin();
739 while (iter != pd_ptr->end())
740 *iter++ = (*iter_x++) * (*iter_y++);
748 auto *pd_ptr =
dynamic_cast<stir::ProjDataInMemory*
>(data().get());
749 auto *pd_x_ptr =
dynamic_cast<const stir::ProjDataInMemory*
>(a_x->data().get());
750 auto *pd_y_ptr =
dynamic_cast<const stir::ProjDataInMemory*
>(a_y->data().get());
753 if (is_null_ptr(pd_ptr) || is_null_ptr(pd_x_ptr) || is_null_ptr(pd_x_ptr))
757 auto iter = pd_ptr->begin();
758 auto iter_x = pd_x_ptr->begin();
759 auto iter_y = pd_y_ptr->begin();
760 while (iter != pd_ptr->end())
761 *iter++ = (*iter_x++) / (*iter_y++);
772 typedef Image3DF::full_iterator Image3DFIterator;
773 typedef Image3DF::const_full_iterator Image3DFIterator_const;
791 typedef Image3DFIterator::difference_type difference_type;
792 typedef Image3DFIterator::value_type value_type;
793 typedef Image3DFIterator::reference reference;
794 typedef Image3DFIterator::pointer pointer;
795 typedef std::forward_iterator_tag iterator_category;
797 Iterator(
const Image3DFIterator& iter) : _iter(iter)
802 _ref.copy(iter._ref);
803 _sptr_iter = iter._sptr_iter;
817 virtual bool operator==(
const BaseIter& an_iter)
const 820 return _iter == iter._iter;
822 virtual bool operator!=(
const BaseIter& an_iter)
const 825 return _iter != iter._iter;
834 Image3DFIterator _iter;
836 std::shared_ptr<Iterator> _sptr_iter;
845 _ref.copy(iter._ref);
846 _sptr_iter = iter._sptr_iter;
860 virtual bool operator==(
const BaseIter_const& an_iter)
const 863 return _iter == iter._iter;
865 virtual bool operator!=(
const BaseIter_const& an_iter)
const 868 return _iter != iter._iter;
870 virtual const FloatRef& operator*()
const 872 const float& v = *_iter;
873 _ref.set_ptr((
void*)&v);
877 Image3DFIterator_const _iter;
879 std::shared_ptr<Iterator_const> _sptr_iter;
885 _data.reset(image.data().clone());
886 this->set_up_geom_info();
890 _data.reset(
new Voxels3DF(MAKE_SHARED<stir::ExamInfo>(*ad.get_exam_info_sptr()),*ad.get_proj_data_info_sptr()));
891 this->set_up_geom_info();
895 _data.reset(image.clone());
896 this->set_up_geom_info();
900 _data.reset(v.clone());
901 this->set_up_geom_info();
905 _data.reset(
new Voxels3DF(pdi));
906 this->set_up_geom_info();
911 this->set_up_geom_info();
915 _data = stir::read_from_file<Image3DF>(filename);
916 this->set_up_geom_info();
921 ptr_image->_data.reset(_data->get_empty_copy());
925 std::shared_ptr<STIRImageData> new_image_data()
927 return std::shared_ptr<STIRImageData>(same_image_data());
932 (std::shared_ptr<DataContainer>(same_image_data()));
938 unsigned int items()
const 943 std::string modality()
const 945 ExamInfo ex_info = data().get_exam_info();
946 return ex_info.imaging_modality.get_name();
948 void set_modality(
const std::string& mod)
950 ExamInfo ex_info = data().get_exam_info();
951 ex_info.imaging_modality = ImagingModality(mod);
952 data().set_exam_info(ex_info);
956 virtual void write(
const std::string &filename)
const;
976 virtual void write(
const std::string &filename,
const std::string &format_file)
const;
978 virtual float norm()
const;
1003 binary_op_(x, y, 4);
1010 const Image3DF& data()
const 1014 Image3DF* data_ptr()
1018 const Image3DF* data_ptr()
const 1022 stir::shared_ptr<Image3DF> data_sptr()
1026 stir::shared_ptr<const Image3DF> data_sptr()
const 1030 void set_data_sptr(stir::shared_ptr<Image3DF> sptr_data)
1039 void scale(
float s);
1050 axpby(&a, a_x, &b, a_y);
1056 xapyb(a_x, &a, a_y, &b);
1058 virtual Dimensions dimensions()
const 1068 int get_dimensions(
int* dim)
const;
1069 void get_voxel_sizes(
float* vsizes)
const;
1070 virtual void get_data(
float* data)
const;
1071 virtual void set_data(
const float* data);
1074 _begin.reset(
new Iterator(data().begin_all()));
1080 return *_begin_const;
1084 _end.reset(
new Iterator(data().end_all()));
1094 std::unique_ptr<STIRImageData>
clone()
const 1096 return std::unique_ptr<STIRImageData>(this->clone_impl());
1102 void zoom_image(
const Coord3DF &zooms={1.f,1.f,1.f},
const Coord3DF &offsets_in_mm={0.f,0.f,0.f},
1103 const Coord3DI &new_sizes={-1,-1,-1},
const char *
const zoom_options_str=
"preserve_sum");
1108 void zoom_image(
const Coord3DF &zooms={1.f,1.f,1.f},
const Coord3DF &offsets_in_mm={0.f,0.f,0.f},
1109 const Coord3DI &new_sizes={-1,-1,-1},
1110 const stir::ZoomOptions zoom_options=stir::ZoomOptions::preserve_sum);
1117 virtual void set_up_geom_info();
1129 stir::shared_ptr<Image3DF> _data;
1130 mutable std::shared_ptr<Iterator> _begin;
1131 mutable std::shared_ptr<Iterator> _end;
1132 mutable std::shared_ptr<Iterator_const> _begin_const;
1133 mutable std::shared_ptr<Iterator_const> _end_const;
Definition: ImageData.h:37
STIR DiscretisedDensity<3, float> wrapper with added functionality.
Definition: stir_data_containers.h:783
Definition: LocalisedException.h:32
virtual void multiply(const DataContainer &x, const DataContainer &y)
*this = the elementwise product x*y
Definition: stir_data_containers.h:989
bool iequals(const std::string &a, const std::string &b)
Case insensitive string comparison, replaces boost::iequals.
Definition: iequals.cpp:7
Case insensitive string comparison sirf::iequals.
virtual void dot(const DataContainer &a_x, void *ptr) const
calculates the dot product of this container with another one
Definition: stir_data_containers.cpp:60
virtual bool is_complex() const
Is complex? Unless overwridden (Gadgetron), assume not complex.
Definition: stir_data_containers.h:934
virtual void fill_from(const float *d)
Fill from float array.
Definition: stir_data_containers.h:662
int get_num_non_TOF_sinograms() const
total number of (2D) sinograms ignoring time-of-flight
Definition: stir_data_containers.h:320
void err(const std::string &message)
throw error
Definition: sirf_convert_image_type.cpp:115
std::unique_ptr< STIRImageData > clone() const
Clone and return as unique pointer.
Definition: stir_data_containers.h:1094
Definition: ImageData.h:52
In-memory implementation of PETAcquisitionData.
Definition: stir_data_containers.h:534
Definition: stir_data_containers.h:787
Definition: ImageData.h:44
In-file implementation of PETAcquisitionData.
Definition: stir_data_containers.h:420
virtual void minimum(const DataContainer &x, const DataContainer &y)
*this = the elementwise min(x, y)
Definition: stir_data_containers.h:290
Abstract data container.
Definition: GeometricalInfo.cpp:141
virtual void multiply(const DataContainer &x, const DataContainer &y)
*this = the elementwise product x*y
Definition: stir_data_containers.h:278
virtual float norm() const
returns the norm of this container viewed as a vector
Definition: stir_data_containers.cpp:37
virtual void dot(const DataContainer &a_x, void *ptr) const
calculates the dot product of this container with another one
Definition: stir_data_containers.h:701
Definition: DataHandle.h:159
STIR ProjDataInterfile wrapper with additional file managing features.
Definition: stir_data_containers.h:87
virtual void set_up_geom_info()
Populate the geometrical info metadata (from the image's own metadata)
Definition: stir_data_containers.cpp:623
Definition: stir_data_containers.h:60
std::shared_ptr< PETAcquisitionData > single_slice_rebinned_data(const int num_segments_to_combine, const int num_views_to_combine=1, const int num_tang_poss_to_trim=0, const bool do_normalisation=true, const int max_in_segment_num_to_process=-1, const int num_tof_bins_to_combine=1)
rebin the data to lower resolution by adding
Definition: stir_data_containers.h:180
virtual void divide(const DataContainer &x, const DataContainer &y)
*this = the elementwise ratio x/y
Definition: stir_data_containers.h:742
virtual float norm() const
returns the norm of this container viewed as a vector
Definition: stir_data_containers.h:687
Definition: stir_data_containers.h:838
virtual void divide(const DataContainer &x, const DataContainer &y)
*this = the elementwise ratio x/y
Definition: stir_data_containers.h:282
Definition: DataContainer.h:41
virtual void fill(const float v)
fill with single value
Definition: stir_data_containers.h:633
Execution status type and wrappers for C++ objects.
virtual void maximum(const DataContainer &x, const DataContainer &y)
*this = the elementwise max(x, y)
Definition: stir_data_containers.h:997
int get_num_sinograms() const
total number of (2D) sinograms
Definition: stir_data_containers.h:314
virtual void divide(const DataContainer &x, const DataContainer &y)
*this = the elementwise ratio x/y
Definition: stir_data_containers.h:993
virtual void maximum(const DataContainer &x, const DataContainer &y)
*this = the elementwise max(x, y)
Definition: stir_data_containers.h:286
STIR ProjData wrapper with added functionality.
Definition: stir_data_containers.h:148
virtual void fill(const PETAcquisitionData &ad)
fill from another PETAcquisitionData
Definition: stir_data_containers.h:646
virtual void copy_to(float *d) const
Copy to float array.
Definition: stir_data_containers.h:675
virtual void minimum(const DataContainer &x, const DataContainer &y)
*this = the elementwise min(x, y)
Definition: stir_data_containers.h:1001
PETAcquisitionDataInMemory(const char *filename)
Constructor for PETAcquisitionDataInMemory from filename.
Definition: stir_data_containers.h:577
virtual void multiply(const DataContainer &x, const DataContainer &y)
*this = the elementwise product x*y
Definition: stir_data_containers.h:721