00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef IMPEM_XPLOR_READER_WRITER_H
00010 #define IMPEM_XPLOR_READER_WRITER_H
00011
00012 #include "em_config.h"
00013 #include "MapReaderWriter.h"
00014 #include "DensityHeader.h"
00015 #include <math.h>
00016 #include <iostream>
00017 #include <iomanip>
00018
00019 IMPEM_BEGIN_NAMESPACE
00020
00021 class IMPEMEXPORT XplorHeader
00022 {
00023 public:
00024 XplorHeader() {}
00025 XplorHeader(const DensityHeader &m_header) {
00026 grid[0]=m_header.mx;grid[1]=m_header.my;grid[2]=m_header.mz;
00027 orig[0]=m_header.nxstart;orig[1]=m_header.nystart;orig[2]=m_header.nzstart;
00028 extent[0]=m_header.get_nx();extent[1]=m_header.get_ny();
00029 extent[2]=m_header.get_nz();
00030 cellsize[0] = m_header.xlen;
00031 cellsize[1] = m_header.ylen;
00032 cellsize[2] = m_header.zlen;
00033 cellangle[0] = m_header.alpha;
00034 cellangle[1] = m_header.beta;
00035 cellangle[2] = m_header.gamma;
00036 voxelsize[0] = m_header.xlen/m_header.mx;
00037 voxelsize[1] = m_header.ylen/m_header.my;
00038 voxelsize[2] = m_header.zlen/m_header.mz;
00039 translateGrid[0] = m_header.get_xorigin();
00040 translateGrid[1] = m_header.get_yorigin();
00041 translateGrid[2] = m_header.get_zorigin();
00042 }
00043 void GenerateCommonHeader(DensityHeader &m_header) {
00044 m_header.mx=grid[0];m_header.my=grid[1];m_header.mz=grid[2];
00045 m_header.nxstart=orig[0];m_header.nystart=orig[1];m_header.nzstart=orig[2];
00046 m_header.set_number_of_voxels(extent[0],extent[1],extent[2]);
00047 m_header.xlen = cellsize[0];
00048 m_header.ylen = cellsize[1];
00049 m_header.zlen = cellsize[2];
00050 m_header.alpha = cellangle[0];
00051 m_header.beta = cellangle[1];
00052 m_header.gamma = cellangle[2];
00053 m_header.set_xorigin(translateGrid[0]);
00054 m_header.set_yorigin(translateGrid[1]);
00055 m_header.set_zorigin(translateGrid[2]);
00056
00057 }
00058
00059
00060
00061 int grid[3];
00062 int orig[3];
00063 int top[3];
00064 int extent[3];
00065 float cellsize[3];
00066 float cellangle[3];
00067 float voxelsize[3];
00068 float translateGrid[3];
00069
00070 };
00071
00072
00073 class IMPEMEXPORT XplorReaderWriter : public MapReaderWriter
00074 {
00075 public:
00076 void Read(const char *filename, float **data, DensityHeader &header);
00077 void Write(const char *filename, const float *data,
00078 const DensityHeader &header );
00079 protected:
00080 int ReadHeader(std::ifstream & XPLORstream, XplorHeader &header);
00081 int ReadMap(std::ifstream &XPLORstream, float *data, XplorHeader &header);
00082
00083 };
00084
00085 IMPEM_END_NAMESPACE
00086
00087 #endif