EMAN2
Public Member Functions | Static Public Member Functions | Public Attributes | Private Types | Private Attributes | List of all members
EMAN::DM3IO Class Reference

Gatan DM3 file is a hierarchical binary image format. More...

#include <dm3io.h>

Inheritance diagram for EMAN::DM3IO:
Inheritance graph
[legend]
Collaboration diagram for EMAN::DM3IO:
Collaboration graph
[legend]

Public Member Functions

 DM3IO (const string &fname, IOMode rw_mode=READ_ONLY)
 
 ~DM3IO ()
 
- Public Member Functions inherited from EMAN::ImageIO
 ImageIO (const string &fname, IOMode rw)
 
virtual ~ImageIO ()
 
virtual int read_header (Dict &dict, int image_index=0, const Region *area=0, bool is_3d=false)=0
 Read the header from an image. More...
 
virtual int write_header (const Dict &dict, int image_index=0, const Region *area=0, EMUtil::EMDataType filestoragetype=EMUtil::EM_FLOAT, bool use_host_endian=true)=0
 Write a header to an image. More...
 
virtual int read_data (float *data, int image_index=0, const Region *area=0, bool is_3d=false)=0
 Read the data from an image. More...
 
virtual int read_data_8bit (unsigned char *data, int image_index=0, const Region *area=0, bool is_3d=false, float minval=0.0f, float maxval=0.0f)
 Read the data from an image as an 8 bit array, regardless of format. More...
 
virtual int write_data (float *data, int image_index=0, const Region *area=0, EMUtil::EMDataType filestoragetype=EMUtil::EM_FLOAT, bool use_host_endian=true)=0
 Write data to an image. More...
 
virtual int read_ctf (Ctf &ctf, int image_index=0)
 Read CTF data from this image. More...
 
virtual void write_ctf (const Ctf &ctf, int image_index=0)
 Write CTF data to this image. More...
 
virtual void flush ()=0
 Flush the IO buffer. More...
 
virtual int get_nimg ()
 Return the number of images in this image file. More...
 
virtual bool is_complex_mode ()=0
 Is this an complex image or not. More...
 
virtual bool is_image_big_endian ()=0
 Is this image in big endian or not. More...
 
virtual bool is_single_image_format () const
 Is this image format only storing 1 image or not. More...
 
template<class T >
void become_host_endian (T *data, size_t n=1)
 Convert data of this image into host endian format. More...
 
string get_filename () const
 

Static Public Member Functions

static bool is_valid (const void *first_block)
 

Public Attributes

 DEFINE_IMAGEIO_FUNC
 

Private Types

enum  { NUM_ID_INT = 3 }
 

Private Attributes

bool is_big_endian
 
Gatan::TagTabletagtable
 

Additional Inherited Members

- Public Types inherited from EMAN::ImageIO
enum  IOMode { READ_ONLY = 1 , READ_WRITE = 2 , WRITE_ONLY = 3 }
 
- Protected Member Functions inherited from EMAN::ImageIO
virtual void init ()=0
 Do some initialization before doing the read/write. More...
 
void check_read_access (int image_index)
 Validate 'image_index' in file reading. More...
 
void check_read_access (int image_index, const float *data)
 Validate 'image_index' and 'data' in file reading. More...
 
void check_write_access (IOMode rw_mode, int image_index, int max_nimg=0)
 Validate rw_mode and image_index in file writing. More...
 
void check_write_access (IOMode rw_mode, int image_index, int max_nimg, const float *data)
 Validate rw_mode, image_index, and data pointer in file writing. More...
 
void check_region (const Region *area, const FloatSize &max_size, bool is_new_file=false, bool inbounds_only=true)
 Validate image I/O region. More...
 
void check_region (const Region *area, const IntSize &max_size, bool is_new_file=false, bool inbounds_only=true)
 Validate image I/O region. More...
 
FILE * sfopen (const string &filename, IOMode mode, bool *is_new=0, bool overwrite=false)
 Run fopen safely. More...
 
- Protected Attributes inherited from EMAN::ImageIO
string filename
 
IOMode rw_mode
 
FILE * file = nullptr
 
bool initialized = false
 

Detailed Description

Gatan DM3 file is a hierarchical binary image format.

Everything in the image is a <key, value> pair, where key may be a container-type key which contains more key/value pairs. To read its header information, the whole file has to be parsed. During parsing, we check the keys that we are interested in and get their values.

The real binary data itself is also in this key/value hierarchy.

1 Gatan DM3 file contains 1 2D image.

Definition at line 242 of file dm3io.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
private
Enumerator
NUM_ID_INT 

Definition at line 252 of file dm3io.h.

253{ NUM_ID_INT = 3 };
@ NUM_ID_INT
Definition: dm3io.h:253

Constructor & Destructor Documentation

◆ DM3IO()

DM3IO::DM3IO ( const string &  fname,
IOMode  rw_mode = READ_ONLY 
)
explicit

Definition at line 634 of file dm3io.cpp.

635 : ImageIO(fname, rw)
636{
638 tagtable = new TagTable();
639}
static bool is_host_big_endian()
Definition: byteorder.cpp:40
Gatan::TagTable * tagtable
Definition: dm3io.h:257
bool is_big_endian
Definition: dm3io.h:256
ImageIO(const string &fname, IOMode rw)
Definition: imageio.cpp:40

References is_big_endian, EMAN::ByteOrder::is_host_big_endian(), and tagtable.

◆ ~DM3IO()

DM3IO::~DM3IO ( )

Definition at line 641 of file dm3io.cpp.

642{
643 if (file) {
644 fclose(file);
645 file = 0;
646 }
647 if (tagtable) {
648 delete tagtable;
649 tagtable = 0;
650 }
651}
FILE * file
Definition: imageio.h:354

References EMAN::ImageIO::file, and tagtable.

Member Function Documentation

◆ is_valid()

bool DM3IO::is_valid ( const void *  first_block)
static

Definition at line 694 of file dm3io.cpp.

695{
696 ENTERFUNC;
697
698 if (!first_block) {
699 return false;
700 }
701
702 const int *data = static_cast < const int *>(first_block);
703
704 int img_ver = data[0];
705 int img_size = data[1];
706 int byte_order = data[2];
707
709
710 if (img_ver != 3) {
711 return false;
712 }
713
715 ByteOrder::become_big_endian(&byte_order);
716
717 if (byte_order != 0 && byte_order != 1) {
718 return false;
719 }
720
721 return true;
722}
static void become_big_endian(T *data, size_t n=1)
convert data from host byte order to big endian order.
Definition: byteorder.h:112
#define ENTERFUNC
Definition: log.h:48

References EMAN::ByteOrder::become_big_endian(), and ENTERFUNC.

Referenced by EMAN::EMUtil::fast_get_image_type(), and EMAN::EMUtil::get_image_type().

Member Data Documentation

◆ DEFINE_IMAGEIO_FUNC

EMAN::DM3IO::DEFINE_IMAGEIO_FUNC

Definition at line 248 of file dm3io.h.

◆ is_big_endian

bool EMAN::DM3IO::is_big_endian
private

Definition at line 256 of file dm3io.h.

Referenced by DM3IO().

◆ tagtable

Gatan::TagTable* EMAN::DM3IO::tagtable
private

Definition at line 257 of file dm3io.h.

Referenced by DM3IO(), and ~DM3IO().


The documentation for this class was generated from the following files: