STIR  6.2.0
Namespaces | Functions

Implementation of routines which convert ECAT7 things into our building blocks and vice versa. More...

#include "stir/ProjDataInfo.h"
#include "stir/ProjDataFromStream.h"
#include "stir/ExamInfo.h"
#include "stir/TimeFrameDefinitions.h"
#include "stir/PatientPosition.h"
#include "stir/ImagingModality.h"
#include "stir/IO/interfile.h"
#include "stir/utilities.h"
#include "stir/NumericInfo.h"
#include "stir/CartesianCoordinate3D.h"
#include "stir/Sinogram.h"
#include "stir/IndexRange3D.h"
#include "stir/VoxelsOnCartesianGrid.h"
#include "stir/ByteOrder.h"
#include "stir/ProjData.h"
#include "stir/ProjDataInfoCylindricalNoArcCorr.h"
#include "stir/ProjDataInfoCylindricalArcCorr.h"
#include "stir/SegmentByView.h"
#include "stir/IndexRange2D.h"
#include "stir/Scanner.h"
#include "stir/Bin.h"
#include "stir/Succeeded.h"
#include "stir/convert_array.h"
#include "stir/IO/stir_ecat7.h"
#include "stir/IO/write_data.h"
#include "stir/IO/read_data.h"
#include "stir/unique_ptr.h"
#include "stir/warning.h"
#include "stir/error.h"
#include <iostream>
#include <fstream>
#include <string>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <stdarg.h>
#include <memory>
#include <boost/cstdint.hpp>

Namespaces

 stir
 Namespace for the STIR library (and some/most of its applications)
 
 stir::ecat
 Namespace for the ECAT IO part of the STIR library (and some/most of its applications)
 
 stir::ecat::ecat7
 Namespace for the ECAT7 IO part of the STIR library (and some/most of its applications)
 

Functions

Succeeded stir::ecat::ecat7::read_ECAT7_main_header (Main_header &mhead, const std::string &filename)
 read an ECAT7 main header from a file
 
bool stir::ecat::ecat7::is_ECAT7_file (const std::string &filename)
 checks if the file is in ECAT7 formatThis partly relies on the implementation of matrix_open in the LLN matrix library. Additional checks are made on the main header. Current checks are: More...
 
bool stir::ecat::ecat7::is_ECAT7_image_file (const std::string &filename)
 checks if the file is in ECAT6 format and if the file contains images
 
bool stir::ecat::ecat7::is_ECAT7_emission_file (const std::string &filename)
 checks if the file is in ECAT6 format and if the file contains emission sinograms (or blank/transmision)
 
bool stir::ecat::ecat7::is_ECAT7_attenuation_file (const std::string &filename)
 checks if the file is in ECAT6 format and if the file contains attenuation correction factors
 
void stir::ecat::ecat7::find_scanner (shared_ptr< Scanner > &scanner_ptr, const Main_header &mhead)
 determine scanner type from the main_header More...
 
short stir::ecat::ecat7::find_ECAT_data_type (const NumericType &type, const ByteOrder &byte_order)
 
shared_ptr< ExamInfo > stir::ecat::ecat7::read_ECAT7_exam_info (MatrixFile *mptr)
 read ExamInfo from an ECAT7 MatrixFile object More...
 
shared_ptr< ExamInfo > stir::ecat::ecat7::read_ECAT7_exam_info (const std::string &filename)
 read ExamInfo from an ECAT7 file More...
 
void stir::ecat::ecat7::make_ECAT7_main_header (Main_header &, const Scanner &, const std::string &orig_name, ExamInfo const &exam_info)
 Fill in most of the main header given a Scanner object and orig_name.
 
void stir::ecat::ecat7::make_ECAT7_main_header (Main_header &mhead, Scanner const &scanner, const std::string &orig_name, DiscretisedDensity< 3, float > const &density)
 Fill in most of the main header given a Scanner object and orig_name and an image. More...
 
NumericType stir::ecat::ecat7::make_ECAT7_main_header (Main_header &mhead, const std::string &orig_name, ExamInfo const &exam_info, ProjDataInfo const &proj_data_info, const bool write_as_attenuation=false, NumericType output_type=NumericType::FLOAT)
 Fill in most of the main header given an orig_name and a proj_data_info. More...
 
void stir::ecat::ecat7::scan_subheader_zero_fill (Scan3D_subheader &shead)
 
void stir::ecat::ecat7::scan_subheader_zero_fill (Attn_subheader &shead)
 
void stir::ecat::ecat7::img_subheader_zero_fill (Image_subheader &ihead)
 
void stir::ecat::ecat7::make_subheader_for_ECAT7 (Attn_subheader &shead, const Main_header &mhead, const ProjDataInfo &proj_data_info)
 Fill in most of the subheader. More...
 
void stir::ecat::ecat7::make_subheader_for_ECAT7 (Scan3D_subheader &shead, const Main_header &mhead, const ProjDataInfo &proj_data_info)
 Fill in most of the subheader. More...
 
ProjDataFromStream * stir::ecat::ecat7::make_pdfs_from_matrix (MatrixFile *const mptr, MatrixData *const matrix, const shared_ptr< iostream > &stream_ptr)
 
VoxelsOnCartesianGrid< float > * stir::ecat::ecat7::ECAT7_to_VoxelsOnCartesianGrid (const std::string &ECAT7_filename, const int frame_num, const int gate_num, const int data_num, const int bed_num)
 
ProjDataFromStream * stir::ecat::ecat7::ECAT7_to_PDFS (const std::string &ECAT7_filename, const int frame_num, const int gate_num, const int data_num, const int bed_num)
 
Succeeded stir::ecat::ecat7::write_basic_interfile_header_for_ECAT7 (std::string &interfile_header_name, const std::string &ECAT7_filename, const int frame_num, const int gate_num, const int data_num, const int bed_num)
 Writes an Interfile header that 'points' into an ECAT7 file. More...
 
Succeeded stir::ecat::ecat7::DiscretisedDensity_to_ECAT7 (MatrixFile *mptr, DiscretisedDensity< 3, float > const &density, const int frame_num=1, const int gate_num=1, const int data_num=0, const int bed_num=0)
 Write an (extra) image to an existing ECAT7 file. More...
 
Succeeded stir::ecat::ecat7::DiscretisedDensity_to_ECAT7 (DiscretisedDensity< 3, float > const &density, std::string const &cti_name, std::string const &orig_name, const Scanner &scanner, const int frame_num=1, const int gate_num=1, const int data_num=0, const int bed_num=0)
 Create a new ECAT7 image file and write the data in there.
 
Succeeded stir::ecat::ecat7::update_ECAT7_subheader (MatrixFile *mptr, Scan_subheader &shead, const MatDir &matdir)
 
Succeeded stir::ecat::ecat7::update_ECAT7_subheader (MatrixFile *mptr, Norm_subheader &shead, const MatDir &matdir)
 
Succeeded stir::ecat::ecat7::update_ECAT7_subheader (MatrixFile *mptr, Image_subheader &shead, const MatDir &matdir)
 
Succeeded stir::ecat::ecat7::update_ECAT7_subheader (MatrixFile *mptr, Attn_subheader &shead, const MatDir &matdir)
 
Succeeded stir::ecat::ecat7::update_ECAT7_subheader (MatrixFile *mptr, Scan3D_subheader &shead, const MatDir &matdir)
 
template<class SUBHEADER_TYPE >
Succeeded stir::ecat::ecat7::update_ECAT7_subheader (MatrixFile *mptr, SUBHEADER_TYPE &shead, const int frame_num, const int gate_num, const int data_num, const int bed_num)
 
Succeeded stir::ecat::ecat7::ProjData_to_ECAT7 (MatrixFile *mptr, ProjData const &proj_data, const int frame_num=1, const int gate_num=1, const int data_num=0, const int bed_num=0, float scale_factor=0.0F)
 Write an (extra) set of sinograms to an existing ECAT7 file. More...
 
Succeeded stir::ecat::ecat7::ProjData_to_ECAT7 (ProjData const &proj_data, NumericType output_type, std::string const &cti_name, std::string const &orig_name, const int frame_num=1, const int gate_num=1, const int data_num=0, const int bed_num=0, const bool write_as_attenuation=false, float scale_factor=0.0F)
 Create a new ECAT7 sinogram file and write the data in there. More...
 

Detailed Description

Implementation of routines which convert ECAT7 things into our building blocks and vice versa.

Author
Kris Thielemans
Cristina de Oliveira (stir::ecat::ecat7::offset_in_ECAT_file function)
Warning
This only works with some CTI file_types. In particular, it does NOT work with the ECAT6-like files_types, as then there are subheaders 'in' the datasets.
Implementation uses the Louvain la Neuve Ecat library. So, it will only work on systems where this library works properly.