18#ifndef __stir_listmode_CListRecordECAT8_32bit_H__
19#define __stir_listmode_CListRecordECAT8_32bit_H__
29#include "boost/static_assert.hpp"
30#include "boost/cstdint.hpp"
54#if STIRIsNativeByteOrderBigEndian
78 DataType get_data()
const {
return this->data; }
81 CListEventECAT8_32bit(
const shared_ptr<const ProjDataInfo>& proj_data_info_sptr);
89 Succeeded init_from_data_ptr(
const void*
const ptr)
91 const char*
const data_ptr =
reinterpret_cast<const char* const
>(ptr);
92 std::copy(data_ptr, data_ptr +
sizeof(this->raw),
reinterpret_cast<char*
>(&this->raw));
93 return Succeeded::yes;
95 inline bool is_prompt()
const override {
return this->data.delayed == 1; }
99 this->data.delayed = 1;
101 this->data.delayed = 0;
102 return Succeeded::yes;
112 std::vector<int> segment_sequence;
113 std::vector<int> timing_poss_sequence;
114 std::vector<int> sizes;
127#if STIRIsNativeByteOrderBigEndian
129 unsigned deadtimeetc : 2;
134 unsigned deadtimeetc : 2;
150#if STIRIsNativeByteOrderBigEndian
152 unsigned subtype : 2;
153 unsigned bucket : 10;
154 unsigned singles : 19;
157 unsigned singles : 19;
158 unsigned bucket : 10;
159 unsigned subtype : 2;
173 Succeeded init_from_data_ptr(
const void*
const ptr)
175 const char*
const data_ptr =
reinterpret_cast<const char* const
>(ptr);
176 std::copy(data_ptr, data_ptr +
sizeof(this->raw),
reinterpret_cast<char*
>(&this->raw));
177 return Succeeded::yes;
179 bool is_time()
const {
return this->data.type == 1U && this->data.deadtimeetc == 0U; }
180 bool is_other()
const {
return this->data.type == 1U && this->data.deadtimeetc != 0U; }
181 bool is_event()
const {
return this->data.type == 0U; }
198 Succeeded init_from_data_ptr(
const void*
const ptr)
200 const char*
const data_ptr =
reinterpret_cast<const char* const
>(ptr);
201 std::copy(data_ptr, data_ptr +
sizeof(this->raw),
reinterpret_cast<char*
>(&this->raw));
202 return Succeeded::yes;
204 bool is_time()
const {
return this->data.type == 1U && this->data.deadtimeetc == 0U; }
205 inline unsigned long get_time_in_millisecs()
const override {
return static_cast<unsigned long>(this->data.time); }
206 inline Succeeded set_time_in_millisecs(
const unsigned long time_in_millisecs)
override
208 this->data.time = ((1U << 30) - 1) &
static_cast<unsigned>(time_in_millisecs);
210 return Succeeded::yes;
234 Succeeded init_from_data_ptr(
const void*
const ptr)
236 const char*
const data_ptr =
reinterpret_cast<const char* const
>(ptr);
237 std::copy(data_ptr, data_ptr +
sizeof(this->raw),
reinterpret_cast<char*
>(&this->raw));
238 return Succeeded::yes;
248 float get_singles_count()
const override {
return 8.F *
static_cast<float>(this->data.singles); }
272 bool is_time()
const override {
return this->any_data.is_time(); }
277 bool is_event()
const override {
return this->any_data.is_event(); }
282 bool is_accumulated_singles()
const override {
return this->singles_data.is_accumulated_singles(); }
288 return dynamic_cast<CListRecordECAT8_32bit const*
>(&e2) != 0 && raw ==
dynamic_cast<CListRecordECAT8_32bit const&
>(e2).raw;
292 CListRecordECAT8_32bit(
const shared_ptr<const ProjDataInfo>& proj_data_info_sptr)
293 : event_data(proj_data_info_sptr)
296 virtual Succeeded init_from_data_ptr(
const char*
const data_ptr,
302 const bool do_byte_swap)
305 std::copy(data_ptr, data_ptr + 4,
reinterpret_cast<char*
>(&raw));
308 this->any_data.init_from_data_ptr(&raw);
310 if (this->any_data.is_time())
311 return this->time_data.init_from_data_ptr(&raw);
312 else if (this->any_data.is_event())
313 return this->event_data.init_from_data_ptr(&raw);
314 else if (this->any_data.is_other())
315 return this->singles_data.init_from_data_ptr(&raw);
317 return Succeeded::yes;
321 size_of_record_at_ptr(
const char*
const ,
const std::size_t ,
const bool )
const
Definition of STIRIsNativeByteOrderBigEndian and STIRIsNativeByteOrderLittleEndian preprocessor symbo...
This file declares the stir::ByteOrder class.
Declarations of class stir::CListEventCylindricalScannerWithDiscreteDetectors.
Declarations of classes stir::CListRecord, and stir::CListEvent which are used for list mode data.
Declaration of class stir::DetectionPositionPair.
Declaration of class stir::ListAccumulatedSingles.
Declaration of class stir::ProjDataInfoCylindrical.
Declaration of class stir::Succeeded.
static void swap_order(NUMBER &value)
swap the byteorder of the argument
Definition ByteOrder.h:122
Class for storing and using a coincidence event from a list mode file for a cylindrical scanner.
Definition CListEventCylindricalScannerWithDiscreteDetectors.h:33
Class for records in a PET list mode file.
Definition CListRecord.h:68
A class for storing 2 coordinates-sets of a detection, together with a timing-position index (for TOF...
Definition DetectionPositionPair.h:41
Class for an accumulated singles record in a listmode file.
Definition ListAccumulatedSingles.h:33
A class for storing and using a timing record from a listmode file.
Definition ListTime.h:47
a class containing an enumeration type that can be used by functions to signal successful operation o...
Definition Succeeded.h:44
A class for decoding a raw "other" word (neither time nor coincidence) from the ECAT 8_32bit listmode...
Definition CListRecordECAT8_32bit.h:171
Class for decoding storing and using a raw coincidence event from a listmode file from the ECAT 966 s...
Definition CListRecordECAT8_32bit.h:49
Class for storing and using a coincidence event from a listmode file from Siemens scanners using the ...
Definition CListRecordECAT8_32bit.h:74
void get_detection_position(DetectionPositionPair<> &) const override
This routine returns the corresponding detector pair.
Definition CListRecordECAT8_32bit.cxx:48
void set_detection_position(const DetectionPositionPair<> &) override
This routine sets in a coincidence event from detector "indices".
Definition CListRecordECAT8_32bit.cxx:83
Succeeded set_prompt(const bool prompt=true) override
Changes the event from prompt to delayed or vice versa.
Definition CListRecordECAT8_32bit.h:96
Bit-field struct for the PETLINK singles word (type=1, deadtimeetc=2).
Definition CListRecordECAT8_32bit.h:148
A class for storing and using a singles bucket record from a listmode file from the ECAT 8_32bit scan...
Definition CListRecordECAT8_32bit.h:232
bool is_accumulated_singles() const
Returns true if this word is a singles record (type=1, subtype=0b10).
Definition CListRecordECAT8_32bit.h:242
float get_singles_count() const override
Number of singles in this record.
Definition CListRecordECAT8_32bit.h:248
unsigned int get_bucket_index() const override
Returns the singles bucket index.
Definition CListRecordECAT8_32bit.h:244
A class for decoding a raw events that is neither time or coincidence in a listmode file from the ECA...
Definition CListRecordECAT8_32bit.h:125
A class for storing and using a timing 'event' from a listmode file from the ECAT 8_32bit scanner.
Definition CListRecordECAT8_32bit.h:196
Declaration of the stir::round functions.