EMAN2
Public Member Functions | Static Public Member Functions | Public Attributes | Private Types | Private Attributes
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]

List of all members.

Public Member Functions

 DM3IO (const string &filename, IOMode rw_mode=READ_ONLY)
 ~DM3IO ()

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

string filename
IOMode rw_mode
FILE * dm3file
bool is_big_endian
bool initialized
Gatan::TagTabletagtable

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 246 of file dm3io.h.


Member Enumeration Documentation

anonymous enum [private]
Enumerator:
NUM_ID_INT 

Definition at line 256 of file dm3io.h.

                { NUM_ID_INT = 3 };

Constructor & Destructor Documentation

DM3IO::DM3IO ( const string &  filename,
IOMode  rw_mode = READ_ONLY 
) [explicit]

Definition at line 638 of file dm3io.cpp.

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

DM3IO::~DM3IO ( )

Definition at line 645 of file dm3io.cpp.

References dm3file, and tagtable.

{
        if (dm3file) {
                fclose(dm3file);
                dm3file = 0;
        }
        if (tagtable) {
                delete tagtable;
                tagtable = 0;
        }
}

Member Function Documentation

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

Definition at line 698 of file dm3io.cpp.

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

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

{
        ENTERFUNC;

        if (!first_block) {
                return false;
        }

        const int *data = static_cast < const int *>(first_block);

        int img_ver = data[0];
        int img_size = data[1];
        int byte_order = data[2];

        ByteOrder::become_big_endian(&img_ver);

        if (img_ver != 3) {
                return false;
        }

        ByteOrder::become_big_endian(&img_size);
        ByteOrder::become_big_endian(&byte_order);

        if (byte_order != 0 && byte_order != 1) {
                return false;
        }

        return true;
}

Member Data Documentation

Definition at line 252 of file dm3io.h.

FILE* EMAN::DM3IO::dm3file [private]

Definition at line 262 of file dm3io.h.

Referenced by ~DM3IO().

string EMAN::DM3IO::filename [private]

Definition at line 260 of file dm3io.h.

bool EMAN::DM3IO::initialized [private]

Definition at line 264 of file dm3io.h.

Definition at line 263 of file dm3io.h.

Referenced by DM3IO().

Definition at line 261 of file dm3io.h.

Definition at line 265 of file dm3io.h.

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


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