mrcImage(API)

From EosPedia
Jump to: navigation, search

DataManip/mrcImage is Low-level API for image whose format is mrcImage.

Contents

constant

Masking

typedef unsigned int mrcStatusMask;
typedef unsigned int mrcStatusType;
#define  mrcStatusMask_ExitFailure  ((mrcStatusMask)0x80000000L)
#define  mrcStatusMask_Warning      ((mrcStatusMask)0x40000000L)
#define  mrcStatusMask_Information  ((mrcStatusMask)0x20000000L)
#define  mrcStatusMask_Message      ((mrcStatusMask)0x10000000L)
#define  mrcStatusMask_1B           ((mrcStatusMask)0x08000000L)
#define  mrcStatusMask_1A           ((mrcStatusMask)0x04000000L)
#define  mrcStatusMask_19           ((mrcStatusMask)0x02000000L)
#define  mrcStatusMask_18           ((mrcStatusMask)0x01000000L)
#define  mrcStatusMask_17           ((mrcStatusMask)0x00800000L)
#define  mrcStatusMask_16           ((mrcStatusMask)0x00400000L)
#define  mrcStatusMask_15           ((mrcStatusMask)0x00200000L)
#define  mrcStatusMask_14           ((mrcStatusMask)0x00100000L)
#define  mrcStatusMask_ReferMRCInfo ((mrcStatusMask)0x00080000L)
#define  mrcStatusMask_Mode         ((mrcStatusMask)0x00040000L)
#define  mrcStatusMask_ReferMemory  ((mrcStatusMask)0x00020000L)
#define  mrcStatusMask_ReferFile    ((mrcStatusMask)0x00010000L)

mrc File Status

#define  MRC_Status_OK              ((mrcStatusType)0x00000000L)

#define  MRC_FileCanNotOpened       ((mrcStatusType)0x00000000L|mrcStatusMask_ReferFile)
#define  MRC_ImageHeaderCanNotRead  ((mrcStatusType)0x00000001L|mrcStatusMask_ReferFile)
#define  MRC_ImageDataCanNotRead    ((mrcStatusType)0x00000002L|mrcStatusMask_ReferFile)
#define  MRC_ImageHeaderCanNotWrite ((mrcStatusType)0x00000003L|mrcStatusMask_ReferFile)
#define  MRC_ImageDataCanNotWrite   ((mrcStatusType)0x00000004L|mrcStatusMask_ReferFile)
#define  MRC_FileCanNotClosed       ((mrcStatusType)0x00000005L|mrcStatusMask_ReferFile)

#define  MRC_MemoryNotAllocate      ((mrcStatusType)0x00000000L|mrcStatusMask_ReferMemory)

#define  MRC_ModeNotSupported       ((mrcStatusType)0x00000000L|mrcStatusMask_Mode)
#define  MRC_ModeZNot1FFTMode       ((mrcStatusType)0x00000001L|mrcStatusMask_Mode)

#define  MRC_SizeOfZero             ((mrcStatusType)0x00000000L|mrcStatusMask_ReferMRCInfo)
extern char* mrcImageGeneralTypeList[];

Size

HeaderSize

#define MRC_HEADER (1024)

TailerSize

#define MRC_TAILER (1024)

Image Mode

Define for compatible between mrc files
typedef	mrcImageParaTypeInteger mrcImageMode;
#define	MRC_char_image	    	 ((mrcImageMode)0)
#define	MRC_short_image	    	 ((mrcImageMode)1)
#define	MRC_float_image	    	 ((mrcImageMode)2)
#define	MRC_complex_short_ft     ((mrcImageMode)3)
#define	MRC_complex_float_ft     ((mrcImageMode)4)
#define	MRC_long_image	         ((mrcImageMode)101)
#define	MRC_double_image	     ((mrcImageMode)102)
#define	MRC_complex_long_ft      ((mrcImageMode)103)
#define	MRC_complex_double_ft    ((mrcImageMode)104)
#define	MRC_complex_short_fft    ((mrcImageMode)1003)
#define	MRC_complex_float_fft    ((mrcImageMode)1004)
#define	MRC_complex_long_fft     ((mrcImageMode)1103)
#define	MRC_complex_double_fft   ((mrcImageMode)1104)
#define	MRC_NotSuppotedMode      ((mrcImageMode)0xffffffffL)
#define	mrcCharImage	    	 ((mrcImageMode)0)
#define	mrcShortImage	    	 ((mrcImageMode)1)
#define	mrcFloatImage	    	 ((mrcImageMode)2)
#define	mrcComplexShortFT        ((mrcImageMode)3)
#define	mrcComplexFloatFT        ((mrcImageMode)4)
#define	mrcComplexFloatOneDimFT  ((mrcImageMode)5)
IMOD
#define	mrcUShortImage           ((mrcImageMode)6)
#define	mrcCharImageRGB          ((mrcImageMode)16)
IMOD: (6,7) -> (26,27)
#define	mrcFloatRadonImage       ((mrcImageMode)26)
#define	mrcFloatRadonFT          ((mrcImageMode)27)
#define	mrcLongImage	         ((mrcImageMode)101)
#define	mrcDoubleImage	         ((mrcImageMode)102)
#define	mrcComplexLongFT         ((mrcImageMode)103)
#define	mrcComplexDoubleFT       ((mrcImageMode)104)
#define	mrcComplexShortFFT       ((mrcImageMode)1003)
#define	mrcComplexFloatFFT       ((mrcImageMode)1004)
#define	mrcComplexLongFFT        ((mrcImageMode)1103)
#define	mrcComplexDoubleFFT      ((mrcImageMode)1104)
#define	mrcNotSuppotedMode       ((mrcImageMode)0xffffffffL)
#define MRC_MAX_LABEL_N    (10)
#define MRC_MAX_LABEL_LEN  (80)
#define MRC_MAX_EXTRA      (29)
#define MRC_MAX_EXTRA_CCP4 (15)

2D Projection Mode

#define  mrcImageTailerMode2DProjection 0

Image Imformation

Statistics data Mode

typedef enum mrcImageInformationMode {
	meanOfAll             = 0,
	meanOfSphereSurface   = 1,
	meanOfCylinderSurface = 2,
	meanOfEdge            = 3, 
	meanOfCentre          = 4,
	meanOfSparse          = 5,
	meanOf2DEdgeY         = 6,
	RMSofAllPixels       = 7
} mrcImageInformationMode;

For example, Set as Mode of (lmrcImageInformationlmrcImageSolventFlattening(API), ...)
It is used as value of mrcImageInformation.mode.

Pixel data

Data Type

typedef enum mrcPixelDataType {
    mrcPixelRePart = 0,
    mrcPixelImPart,
    mrcPixelMag,
    mrcPixelPow,
    mrcPixelLogMag,
    mrcPixelLogPow,
    mrcPixelPhase
} mrcPixelDataType;

It is Pixel data Type set and gotten, it is used as Argument (mode) of mrcPixselDataSet or mrcPixselDataGet.

Mode Real Image FT Image
mrcPixelRePart data real part
mrcPixelImPart - imaginary part
mrcPixelMag data Amplitude: (Re^2 + Im^2)^(1/2)
mrcPixelPow data^2 Intensity: Re^2 + Im^2
mrcPixelLogMag - Log Amplitude: (log10(Re^2 + Im^2)) / 2
mrcPixelLogPow - Log Intensity: log10(Re^2 + Im^2)
mrcPixelPhase - Phase


Interpolation method

typedef enum mrcPixelDataHowToGet {
    mrcPixelHowNearest = 0,
    mrcPixelHowLinear,
    mrcPixelHowCubicConv,
    mrcPixelHowPolySig
} mrcPixelDataHowToGet;

It is Interpolation method of Pixel data, and it is used as Argument (how) of mrcPixselDataGet.

Mode Value Interpolation Method
mrcPixelHowNearest 0 Nearest neighbor method
mrcPixelHowLinear 1 Bi-linear interpolation method
mrcPixelHowCubicConv 2 Cubic convolution method
mrcPixelHowPolySig 3 Polynomial interpolation method


mrcImageDataSetMode

typedef enum mrcImageDataSetMode {
	mrcImageDataSetModeCentre = 0,
	mrcImageDataSetModeOrigin = 1
} mrcImageDataSetMode;

It is used as data of mode for mrcImageDataSet.

constant

value

details

mrcImageDataSetModeCentre

0

Get from center of image

mrcImageDataSetModeOrigin

1

Get from origin


struct

Masking

typedef union MRC_Status_t {
   mrcStatusType all;
   struct Content {
#ifdef M68
       unsigned char level;
       unsigned char category;
       short detail;
#else
       short detail;
       unsigned char category;
       unsigned char level;
#endif
	} status;
} MRC_Status_t;
#ifdef M68
typedef int mrcImageParaTypeInteger;
#else
typedef int mrcImageParaTypeInteger;
#endif
typedef float mrcImageParaTypeReal;
typedef unsigned char mrcImageParaTypeCharacter;

Coordinate

Integer: used for Pixel data, ...

typedef struct mrcImageParaTypeIntegerCoord {
	mrcImageParaTypeInteger x;
	mrcImageParaTypeInteger y;
	mrcImageParaTypeInteger z;
} mrcImageParaTypeIntegerCoord;

Real: used for real data, pdb data, ...

typedef struct mrcImageParaTypeRealCoord {
	mrcImageParaTypeReal x;
	mrcImageParaTypeReal y;
	mrcImageParaTypeReal z;
} mrcImageParaTypeRealCoord;

mrcImage's structure

typedef struct mrcImage {
	mrcImageHeader          Header;
	size_t BytePerImage;
	mrcImageParaTypeInteger BytePerBand;
	mrcImageParaTypeInteger BandPerPixel;
	size_t PixelPerImage;
	mrcStatusType           status;
	char*           Image;
	unsigned char*  ImageCharImage;
	unsigned short* ImageShortImage;
	unsigned long*  ImageLongImage;
	float*          ImageFloatImage;
	double*         ImageDoubleImage;

	/* Tailer */
	mrcImageTailer*         Tailer;	
	mrcImageParaTypeInteger numTailer;

	/* FEIextendedHeader */
	FEIextendedHeader*      FEIHeader;
	mrcImageParaTypeInteger numFEIHeader;

 	/* Dummy */
	char*     dummyHeader;
	mrcImageParaTypeInteger dummyHeaderByte;

	/* Swap Bytes */
	mrcImageParaTypeInteger flagByteSwap;

	/* flag CCP4-2000 */
	mrcImageParaTypeInteger   flagCCP4;
	mrcImageParaTypeInteger   ImageOffset; 
	mrcImageSymmetryOperator* SymmetryOperator;
} mrcImage;
Component Member Details
Header Information Header Image Mode, Size, ...
Hidden data BytePerImage, BytePerBand, BandPerPixel, PixelPerImage Angstroms per pixel, ...
Status status File Status
Image data Image, ImageCharImage, ... , ImageDoubleImage Image data's body(The Substance data is managed at "Image", other members are managed by pointer.)
Tailer Information Tailer, numTailer Angle Information, ...
FEIHeader FEIHeader, numFEIHeader Extension Header for FEI
Dummy dummyHeaderByte Dummy data
Byte Swap flagByteSwap Flag for Endian depending to Processing system
CCP4-2000 flagCCP4, ImageOffset, SymmetryOperator For CCP4-2000


Header Information

Default
typedef struct _mrcImageHeader {
	mrcImageParaTypeIntegerCoord        N;	    /* Data Numbers */
	mrcImageMode                        Mode;   /* Data Type */
	mrcImageParaTypeIntegerCoord        StartN; /* First in map */
	mrcImageParaTypeIntegerCoord        M;	    /* Number of Intervals */
	mrcImageParaTypeRealCoord           Length; /* Cell Dimensions : Angstrom */
	mrcImageParaTypeReal                Alpha;  /* Cell Angle : Degree */
	mrcImageParaTypeReal                Beta;
	mrcImageParaTypeReal                Gamma;
	mrcImageParaTypeInteger             MAPC;   /* Which Axis Corresponds to Columns */
	mrcImageParaTypeInteger             MAPR;   /* Which Axis Corresponds to Rows */
	mrcImageParaTypeInteger             MAPS;   /* Which Axis Corresponds to Sections */
	mrcImageParaTypeReal                AMin;   /* Minimum Density Value */
	mrcImageParaTypeReal                AMax;   /* Maximum Density Value */
	mrcImageParaTypeReal                AMean;  /* Mean Density Value */
	mrcImageParaTypeInteger             ISPG;   /* Space Group */
	mrcImageParaTypeInteger             NSYMBT; /* Number of bytes */
	mrcImageParaTypeReal                EXTRA[MRC_MAX_EXTRA]; /* Extra, user defined storage space */
	mrcImageParaTypeReal                OriginX;
	mrcImageParaTypeReal                OriginY;
	mrcImageParaTypeInteger             LabelN;
	char                                Label[MRC_MAX_LABEL_N][MRC_MAX_LABEL_LEN];
} _mrcImageHeader;

CCP4 2000
typedef struct _mrcImageHeaderCCP4 {
	mrcImageParaTypeIntegerCoord        N;	    /* Data Numbers */
	mrcImageMode                        Mode;   /* Data Type */
	mrcImageParaTypeIntegerCoord        StartN; /* First in map */
	mrcImageParaTypeIntegerCoord        NI;	    /* Number of Intervals */
	mrcImageParaTypeRealCoord           Length; /* Cell Dimensions : Angstrom */
	mrcImageParaTypeReal                Alpha;  /* Cell Angle : Degree */
	mrcImageParaTypeReal                Beta;
	mrcImageParaTypeReal                Gamma;
	mrcImageParaTypeInteger             MAPC;   /* Which Axis Corresponds to Columns */
	mrcImageParaTypeInteger             MAPR;   /* Which Axis Corresponds to Rows */
	mrcImageParaTypeInteger             MAPS;   /* Which Axis Corresponds to Sections */
	mrcImageParaTypeReal                AMin;   /* Minimum Density Value */
	mrcImageParaTypeReal                AMax;   /* Maximum Density Value */
	mrcImageParaTypeReal                AMean;  /* Mean Density Value */
	mrcImageParaTypeInteger             ISPG;   /* Space Group */
	mrcImageParaTypeInteger             NSYMBT; /* Number of bytes used for storing symmetry operators */
	mrcImageParaTypeInteger             LSKFLG; /* Flag for Skew transformation */
	mrcImageParaTypeReal 				SKWMAT[9]; /* Skew matrix S */
	mrcImageParaTypeReal 				SKWTRN[3]; /* Skew translation */
	mrcImageParaTypeReal                EXTRA[MRC_MAX_EXTRA_CCP4]; /* Extra, user defined storage space */
	mrcImageParaTypeCharacter  			MAP[4];
	mrcImageParaTypeInteger  			MARCHST;
	mrcImageParaTypeReal                ARMS;
	mrcImageParaTypeInteger             LabelN;
	char                                Label[MRC_MAX_LABEL_N][MRC_MAX_LABEL_LEN];
} _mrcImageHeaderCCP4;

IMOD
typedef struct _mrcImageHeaderIMOD {
	mrcImageParaTypeIntegerCoord        N;	    /* Data Numbers */
	mrcImageMode                        Mode;   /* Data Type */
	mrcImageParaTypeIntegerCoord        StartN; /* First in map */
	mrcImageParaTypeIntegerCoord        M;	    /* Number of Intervals */
	mrcImageParaTypeRealCoord           Length; /* PixelSize=Len/M: Angstrom */
	mrcImageParaTypeReal                Alpha;  /* Cell Angle : Degree */
	mrcImageParaTypeReal                Beta;
	mrcImageParaTypeReal                Gamma;
	mrcImageParaTypeInteger             MAPC;   /* Which Axis Corresponds to Columns */
	mrcImageParaTypeInteger             MAPR;   /* Which Axis Corresponds to Rows */
	mrcImageParaTypeInteger             MAPS;   /* Which Axis Corresponds to Sections */
	mrcImageParaTypeReal                AMin;   /* Minimum Density Value */
	mrcImageParaTypeReal                AMax;   /* Maximum Density Value */
	mrcImageParaTypeReal                AMean;  /* Mean Density Value */
	mrcImageParaTypeInteger             ISPG;   /* Space Group */
	mrcImageParaTypeInteger             NSYMBT; /* Number of bytes used for extended header */
	short                               creatid; /* Flag for Skew transformation */
	short                               extra1[15]; /* Flag for Skew transformation */
	short                               nint;
	short                               nreal; /*l Skew matrix S */
	mrcImageParaTypeReal                extra2[5]; /* Extra, user defined storage space */
	mrcImageParaTypeInteger             imodStamp;   
	mrcImageParaTypeInteger             imodFlags;   
	short                               idtype;   
	short                               lnes;   
	short                               nd1;   
	short                               nd2;   
	short                               vd1;   
	short                               vd2;   
	mrcImageParaTypeReal                tiltangles[6]; /* Extra, user defined storage space */
	mrcImageParaTypeReal                xorg; /* Extra, user defined storage space */
	mrcImageParaTypeReal                yorg; /* Extra, user defined storage space */
	mrcImageParaTypeReal                zorg; /* Extra, user defined storage space */
	mrcImageParaTypeCharacter  			MAP[4];
	mrcImageParaTypeInteger  			MARCHST;
	mrcImageParaTypeReal                ARMS;
	mrcImageParaTypeInteger             LabelN;
	char                                Label[MRC_MAX_LABEL_N][MRC_MAX_LABEL_LEN];
} _mrcImageHeaderIMOD;
Header's Union

Union about defined Header at above.

typedef union mrcImageHeader {
  unsigned char           All[MRC_HEADER];
  mrcImageParaTypeInteger Int[MRC_HEADER/4];
  mrcImageParaTypeReal    Real[MRC_HEADER/4];
  _mrcImageHeader         Cont;
  _mrcImageHeaderCCP4     ContCCP4;
  _mrcImageHeaderIMOD     ContIMOD;
} mrcImageHeader;

Define of Abbreviation of calling member

#define HeaderN       Header.Cont.N       
#define HeaderMode    Header.Cont.Mode    
#define HeaderStartN  Header.Cont.StartN  
#define HeaderM       Header.Cont.M       
#define HeaderLength  Header.Cont.Length  
#define HeaderAlpha   Header.Cont.Alpha   
#define HeaderBeta    Header.Cont.Beta    
#define HeaderGamma   Header.Cont.Gamma   
#define HeaderMAPC    Header.Cont.MAPC    
#define HeaderMAPR    Header.Cont.MAPR    
#define HeaderMAPS    Header.Cont.MAPS    
#define HeaderAMin    Header.Cont.AMin    
#define HeaderAMax    Header.Cont.AMax    
#define HeaderAMean   Header.Cont.AMean   
#define HeaderISPG    Header.Cont.ISPG    
#define HeaderNSYMBT  Header.Cont.NSYMBT  
#define HeaderLSKFLG  Header.ContCCP4.LSKFLG
#define HeaderEXTRA   Header.Cont.EXTRA
#define HeaderOriginX Header.Cont.OriginX 
#define HeaderOriginY Header.Cont.OriginY  
#define HeaderLabelN  Header.Cont.LabelN
#define HeaderLabel   Header.Cont.Label
FEI
#define FEI_EXTENDED_HEADER_EACH (128) 
typedef struct _FEIextendedHeader {
	mrcImageParaTypeReal aTilt;   // Alpha tilt, in degrees
	mrcImageParaTypeReal bTilt;   // Beta tilt, in degrees 
	mrcImageParaTypeReal xStage;  // Stage x position. 
								  // Normally in SI units (meters), 
								  // but some older files may be in micrometers. 
								  // Check by looking at values for x,y,z. 
								  // If one of these exceeds 1, it will be micrometers.
	mrcImageParaTypeReal yStage;  // Stage y position. For testing of units see x_stage.
	mrcImageParaTypeReal zStage;  // Stage z position. For testing of units see x_stage.
	mrcImageParaTypeReal xShift;  // Image shift x. For testing of units see x_stage.
	mrcImageParaTypeReal yShift;  // Image shift y. For testing of units see x_stage.
	mrcImageParaTypeReal defocus;  
	mrcImageParaTypeReal expTime;  
	mrcImageParaTypeReal mean;  
	mrcImageParaTypeReal tiltAxis;  
	mrcImageParaTypeReal pixelSize;  
	mrcImageParaTypeReal magnification;  
	mrcImageParaTypeReal ht;  
	mrcImageParaTypeReal binning;  
	mrcImageParaTypeReal appliedDefocus;  
	mrcImageParaTypeReal reminder[FEI_EXTENDED_HEADER_EACH/4-16];  
} _FEIextendedHeader;
typedef union FEIextendedHeader {
	mrcImageParaTypeReal Real[FEI_EXTENDED_HEADER_EACH/4];
	_FEIextendedHeader   Cont;
} FEIextendedHeader;

Tailer Information

typedef struct _mrcImageTailer {
	char                 		Code[4]; 
	mrcImageParaTypeInteger		Mode;  
	char                        EulerAngleMode[4];
	mrcImageParaTypeReal 		Rot1;   
	mrcImageParaTypeReal 		Rot2;
	mrcImageParaTypeReal 		Rot3;
	mrcImageParaTypeInteger 	Mirror;
} _mrcImageTailer;
typedef union mrcImageTailer {
  unsigned char           All[MRC_TAILER];
  mrcImageParaTypeInteger Int[MRC_TAILER/4];
  mrcImageParaTypeReal    Real[MRC_TAILER/4];
  _mrcImageTailer         Cont;
} mrcImageTailer;
typedef char mrcImageSymmetryOperator;

Statistics data of Image

Struct for storing Statistics data of mrcImage
Get data from mrcImageInformation(API), and use as Input Information data mainly.

typedef struct mrcImageInformation {
	double mean;
	double rootMeanSquare;
	double meanOfSphereSurface;
	double sdOfSphereSurface;
	double seOfSphereSurface;
	double meanOfCylinderSurface;
	double sdOfCylinderSurface;
	double seOfCylinderSurface;
	double meanOfEdge;
	double sdOfEdge;
	double seOfEdge;
	double max;
	mrcImageParaTypeRealCoord maxCoord;
	double min;
	mrcImageParaTypeRealCoord minCoord;
	double sd;
	double se;
	double rmax;
	long flagrmax;
	double RMS; /* Root mean square */
	int mode;

	/* For Search Area */
	int flagXrange;
	int flagYrange;
	int flagZrange;
	double XrangeMin; 
	double XrangeMax; 
	double YrangeMin; 
	double YrangeMax; 
	double ZrangeMin; 
	double ZrangeMax; 

	int flagCentre;
	double CentreX;
	double CentreY;
	double CentreZ;
} mrcImageInformation;

Setting file each API

lmrcImageSmoothingInfo

It is used for lmrcImageSmoothing's setting data.

typedef struct lmrcImageSmoothingInfo  {
	long mode;
	mrcImageParaTypeReal sx; /* Filter kernel size */
	mrcImageParaTypeReal sy;
	mrcImageParaTypeReal sz;
	double sigma;            /* for Lee-Sigma filter  */
} lmrcImageSmoothingInfo;

lmrcImageCVEInfo

It is used for lmrcImageCVE's setting data.

typedef struct lmrcImageCVEInfo {
	long sx; /* CVE domain size. */
	long sy; /* Apr.30,1996 */
	long sz;
} lmrcImageCVEInfo;

lmrcImageTfunctionInfo

It is used for lmrcImageTfunction's setting data.

typedef struct lmrcImageTfunctionInfo {
	long sx; /* Tfunction domain size. */
	long sy; /* June 11,1996 */
	long sz;
} lmrcImageTfunctionInfo;

lmrcImageHighlightInfo

It is used for lmrcImageHighlighting's setting data.

typedef struct lmrcImageHighlightInfo {
	long mode;
	float Bias; /* May 1,1996 */
	float Grad;
} lmrcImageHighlightInfo;

lmrcImageLowPassFilterInfo

It is used for lmrcImageLowPassFilter's setting data.

typedef struct lmrcImageLowPassFilterInfo 
{
	long mode; /* June 4,1996 */
	float hvp, width;
} lmrcImageLowPassFilterInfo;

lmrcImageHighPassFilterInfo

It is used for lmrcImageHighPassFilter's setting data.

typedef struct lmrcImageHighPassFilterInfo 
{
	long mode; /* June 5,1996 */
	float hvp, width;
	float pathWindowLow;
	float pathWindowHigh;
} lmrcImageHighPassFilterInfo;

lmrcImageBandPassFilterInfo

It is used for lmrcImageBandPassFilter's setting data.

typedef struct lmrcImageBandPassFilterInfo 
{
	long mode; /* June 5,1996 */
	float hvl, hvh, wl, wh;
	int flagLowWeight;
	double lowWeight;
} lmrcImageBandPassFilterInfo;

lmrcImageMultiCTFCompensationInfo

It is used for lmrcImageMultiCTFCompensation's setting data.

typedef enum lmrcImageMultiCTFCompensationSolventFlatteningMode {
	lmrcImageMultiCTFCompensationSolventFlatteningModeDensityPeakIsSolvent=0,
	lmrcImageMultiCTFCompensationSolventFlatteningModeDefinedSTDIsSolvent=1
} lmrcImageMultiCTFCompensationSolventFlatteningMode;

typedef struct lmrcImageMultiCTFCompensationInfo {
	long   maxiteration;
	double okrms;
	long   diversefactor;
	double z;
	long   nhist;
	FILE*  logfile;
	lmrcImageMultiCTFCompensationSolventFlatteningMode solventMode;
	float  definedSTD;	 	
} lmrcImageMultiCTFCompensationInfo;

lmrcImageCTFSNInfo

It is used for lmrcImageCTFSN's setting data.

typedef struct lmrcImageCTFSNInfo
{
	long mode, deg1, deg2;
	ctfInfo ctf;
} lmrcImageCTFSNInfo;

lmrcImageFourierPowerSpectrumInfo

It is used for lmrcImageFourierPowerSpectrum's setting data.

typedef struct mrcImageFourierPowerSpectrum
{
	long n;
	double d, *h;
} mrcImageFourierPowerSpectrum;

typedef struct lmrcImageFourierPowerSpectrumInfo
{
	double dX, dY, dZ;
} lmrcImageFourierPowerSpectrumInfo;

API

Initialize

Initialize Image data

extern mrcStatusType mrcInit(mrcImage* mrc, char* filaname);

If you want to read Header Information (Image Mode and Size) from other mrc file, Specify the file name at "filename". Otherwise, set NULL(Default Setting). It new creates Image data at "Image" of "mrc"' member, and stores the pointer at "ImageXXXXImage"(XXXX: Char, Short, ...)

* This API allocates the memory at "mrc->Image" unconditionally. Thus Check that "mrc->Image" is empty, if you use it. (In the case of not empty, release the memory and check by using mrcImageFree.)

Initialize Header information

extern mrcStatusType mrcDefaultHeaderValueSet(mrcImage* mrc);
extern mrcStatusType mrcDefaultHeaderValueSetOnlyFixedValue(mrcImage* mrc);

Setting Hidden data

extern mrcStatusType mrcHiddenDataSet(mrcImage* mrc, long mode);

Initialize Tailer information

extern void mrcTailerInit(mrcImage* mrc, long mode);

Release Image data

extern void mrcImageFree(mrcImage* mrc, char* message);

Release the Image data's substance(Image), and Change Pointers of Image, ImageXXXXImage(XXXX: Char, Short, ...) to NULL Pointer.

Read from file

Read filename, and store to mrc.

extern mrcStatusType mrcFileRead  (mrcImage* mrc, char* filename, char* message, long mode);


extern mrcStatusType mrcImageRead (mrcImage* mrc, char* filename, char* message, long mode);
extern mrcStatusType mrcHeaderRead(mrcImage* mrc, char* filename, char* message, long mode);
extern mrcStatusType mrcTailerRead(mrcImage* mrc, char* filename, char* message, long mode);
extern mrcStatusType mrcFileReadGeneral  (mrcImage* mrc, char* filename, char* type, char* message, long mode);
extern mrcStatusType mrcImageReadGeneral  (mrcImage* mrc, char* filename, char* type, char* message, long mode);
extern mrcStatusType mrcHeaderReadGeneral(mrcImage* mrc, char* filename, char* type, char* message, long mode);
extern mrcStatusType mrcTailerReadGeneral(mrcImage* mrc, char* filename, char* type, char* message, long mode);
extern mrcStatusType mrcFileGeneralListPrint(FILE* fpt); 
extern mrcStatusType mrcFileReadFEIextendedMRC  (mrcImage* mrc, char* filename, char* message, long mode);
extern mrcStatusType mrcImageReadFEIextendedMRC (mrcImage* mrc, char* filename, char* message, long mode);
extern mrcStatusType mrcHeaderReadFEIextendedMRC(mrcImage* mrc, char* filename, char* message, long mode);
extern mrcStatusType mrcTailerReadFEIextendedMRC(mrcImage* mrc, char* filename, char* message, long mode);
extern mrcStatusType mrcFileReadIMODextendedMRC  (mrcImage* mrc, char* filename, char* message, long mode);
extern mrcStatusType mrcImageReadIMODextendedMRC (mrcImage* mrc, char* filename, char* message, long mode);
extern mrcStatusType mrcHeaderReadIMODextendedMRC(mrcImage* mrc, char* filename, char* message, long mode);
extern mrcStatusType mrcTailerReadIMODextendedMRC(mrcImage* mrc, char* filename, char* message, long mode);

message: for error message
mode: Read data 0: Not display, 1: Display

Write to file

extern mrcStatusType mrcFileWrite  (mrcImage* mrc, char* filename, char* message, long mode);
extern mrcStatusType mrcImageWrite (mrcImage* mrc, char* filename, char* message, long mode);
extern mrcStatusType mrcHeaderWrite(mrcImage* mrc, char* filename, char* message, long mode);
extern mrcStatusType mrcTailerWrite(mrcImage* mrc, char* filename, char* message, long mode);
#define mrcFileWriteModeGet(x)     BYTE4GETBYTE(x,0)
#define mrcImageWriteModeGet(x)    BYTE4GETBYTE(x,1)
#define mrcHeaderWriteModeGet(x)   BYTE4GETBYTE(x,2)
#define mrcTailerWriteModeGet(x)   BYTE4GETBYTE(x,3)
#define mrcFileWriteMode_InfoPrint         1
#define mrcFileWriteMode_NoCallForStatData 2

message: for error message
mode: +1: Display written data, +2: Not Calculate Statistics data

Writing by Lower Resolution

It is used by ip2mrc, ...

extern mrcStatusType mrcFileWriteLowerResolution(mrcImage* mrc, char* filename, char* message, long sample , long mode);

Copy data

Copy as: src -> dst

Copy Image data

extern void lmrcImageCopy(mrcImage* dst, mrcImage* src, mrcImageParaTypeRealCoord to);

to: Offset(Coordinate)

Copy Tailer information

extern void mrcTailerCopy(mrcImage* dst, mrcImage* src, long mode);

mode: +1: New create and Copy, Otherwise: Copy directly

Check Image mode

extern int IsFloatImage(mrcImage* mrc, char* message, mrcImageParaTypeInteger mode);
extern int IsFloatFT(mrcImage* mrc, char* message, mrcImageParaTypeInteger mode);
extern int IsImage(mrcImage* mrc, char* message, mrcImageParaTypeInteger mode);
extern int IsFT(mrcImage* mrc, char* message, mrcImageParaTypeInteger mode);
extern int IsFFT(mrcImage* mrc, char* message, mrcImageParaTypeInteger mode);

Return value: 0: False, 1: True

Getting Pixel data

Getting Pixel data by Pixel

extern double mrcPixelDataGet(mrcImage* mrc,
                              mrcImageParaTypeReal x /* Pixel Unit */,
                              mrcImageParaTypeReal y /* Pixel Unit */,
                              mrcImageParaTypeReal z /* Pixel Unit */,
                              double* data,
                              mrcPixelDataType mode,
                              mrcPixelDataHowToGet how);

Get the data of Coordinate(x, y, z), and store to "data".
Gotten data is depending to mode and how.

Getting Pixel data by Angstrom

extern double mrcImageDataGetbyAU(mrcImage* mrc,
                              mrcImageParaTypeReal x /* Angstrom */,
                              mrcImageParaTypeReal y /* Angstrom */,
                              mrcImageParaTypeReal z /* Angstrom */,
                              double* data,
                              mrcPixelDataType mode,
                              mrcPixelDataHowToGet how);

Inline function Gets Pixel data

extern inline double mrcPixelDataGetFloatImage(mrcImage* img,
                mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z)
extern inline double mrcPixelDataGetFloatFTRe(mrcImage* fft,
                mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z)
extern inline double mrcPixelDataGetFloatFTIm(mrcImage* fft,
                mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z)

Setting Pixel data

Setting Image Information

extern void mrcInfoSet(mrcImage* mrc, FILE* fptIn, FILE* fptOut, mrcImageParaTypeInteger mode);

Setting Pixel Information

extern void mrcImageInfoSet(mrcImage* mrc, FILE* fptIn, FILE* fptOut, long mode);

Create Filament Image data

Create Filament Image data out from Input file in.
Note that position for in is different by mode as mrcImageDataSetMode.

extern void mrcImageDataSet(mrcImage* out, 
							mrcImage* in, 
							mrcImageParaTypeReal x,
							mrcImageParaTypeReal y,
							mrcImageParaTypeReal z,
							float phi,
							mrcImageDataSetMode  mode);

Setting Pixel data by Pixel

extern double mrcPixelDataSet(mrcImage* mrc,
			      mrcImageParaTypeReal x /* Pixel Unit */,
			      mrcImageParaTypeReal y /* Pixel Unit */,
			      mrcImageParaTypeReal z /* Pixel Unit */,
			      double data,
			      mrcPixelDataType mode);

Setting Pixel data by Angstrom

extern double mrcImageDataSetbyAU(mrcImage* mrc,
			      mrcImageParaTypeReal x /* Angstrom */,
			      mrcImageParaTypeReal y /* Angstrom */,
			      mrcImageParaTypeReal z /* Angstrom */,
			      double data,
			      mrcPixelDataType mode);

Inline function Sets Pixel data

static inline void mrcPixelDataSetFloatImage(mrcImage* img, 
		mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z, double data)
static inline void mrcPixelDataSetFloatFTRe(mrcImage* fft, 
		mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z, double data)
static inline void mrcPixelDataSetFloatFTIm(mrcImage* fft, 
		mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z, double data)

Statistics processing of Pixel data

Calculate Max, Min, Mean(Store mrc's Header Information)

extern void mrcStatDataSet(mrcImage* mrc, mrcImageParaTypeInteger mode);

Library of General image processing

Operation image(mrcImageOperation)

Unary operation
Add
void lmrcImageAddedByReal(mrcImage* img, double d);                       img := img+d
Subtraction
void lmrcImageMeanSubtraction(mrcImage* out, mrcImage* in)                      out  :=  in - mean
void lmrcImageMeanSubtraction(mrcImage* out, mrcImage* in)                      out  :=  in - mean
void lmrcImageSubtraction(mrcImage* out, mrcImage* in, double value)            out  :=  in - value

Devide
void lmrcImageDevidedByReal(mrcImage* img, double d);                     img := img/d
void lmrcImageDevidedByRealForOnlyPositive(mrcImage* img, double d);      img := img/d, if img>=0, else img:=img;
void lmrcImageDevidedByImage(mrcImage* img, mrcImage* i1, mrcImage* i2);        img := i1/i2, 0 := 0/0, 0 := x/0
Absolute value
void ImageAbs(mrcImage* out ,mrcImage* in);                               out := fabs(in);
Square, Root
void lmrcImageSquare(mrcImage* in);                                       in := in*in
void lmrcImageRoot(mrcImage* in ,double eps);                             in := sqrt(in), if in>eps else in:=0
Dyadic operation
Addition
void lmrcImageAdd(mrcImage* img2, mrcImage* img1, long* number);                img2 := img2 + img1, number++
Square Add
void lmrcSQRImageAdd(mrcImage* img2, mrcImage* img1, long* number);             img2 := img2 + img1*img1, number++
Subtraction
void lmrcImageSubtractionCalc(mrcImage* out, mrcImage* in1, mrcImage* in2)      out  :=  in1 - in2
void llmrcImageSub(mrcImage*out ,mrcImage* in1 ,mrcImage* in2)                  out  : = in1 - in2(上記と同じ機能)

Convolution
extern void lmrcImageConvolution(mrcImage* out, mrcImage* in,  mrcImage* kernel, int mode);
Statistics
void lmrcImagetMapForZero(mrcImage* t, mrcImage* avg, mrcImage* se);           t  := avg/se,  at present, avg, se must be given.
void lmrcImageSN(mrcImage* sn, mrcImage* avg, mrcImage* sig);                  sn := avg/sig, at present, avg, sig must be given.
void mrcImageStdDev(mrcImage* sig, mrcImage* avg, mrcImage* avg2, long number); sig:= sqrt(avg2 - avg*avg), at present, avg, avg2 must be given.
void mrcImageStdErr(mrcImage* se, mrcImage* avg, mrcImage* avg2, long number);  se := sqrt(avg2 - avg*avg)/number, at present, avg, avg2 must be given.

Relation to Endian

extern int mrcImageByteSwap(mrcImage* mrc, long mode);

Projection

extern void lmrcImageXSection(mrcImage* proj, mrcImage* img, double Y);
extern void lmrcImageYSection(mrcImage* proj, mrcImage* img, double X);
extern void lmrcImageXProjection(mrcImage* proj, mrcImage* img);
extern void lmrcImageYProjection(mrcImage* proj, mrcImage* img);
extern void lmrcImageZProjection(mrcImage* proj, mrcImage* img);
extern void lmrcImageXYProjection(mrcImage* proj, mrcImage* img);
extern void lmrcImageYZProjection(mrcImage* proj, mrcImage* img);
extern void lmrcImageZXProjection(mrcImage* proj, mrcImage* img);

Histogram

extern void lmrcImageHistgram(double** hist, unsigned long nlevel, mrcImage* img);
extern void lmrcImageHistgram2(double** hist, double delta, mrcImage* img);
extern void lmrcImageHistgram5(double** hist, unsigned long nlevel, double Low, double High, mrcImage* img);
extern void lmrcImageHistgram3(double** hist, unsigned long nlevel, mrcImage* img);
extern void lmrcImageHistgram4(double** hist, double delta, mrcImage* img);
extern void lmrcImageHistgram6(double** hist, unsigned long nlevel, double Low, double High, mrcImage* img);

Get Statistics data

Getting from mrcImage to Statistics data of image.

extern void lmrcImageInformation(mrcImageInformation* info, mrcImage* img);

Convert pixel data

Converting from pixel data to int type.

extern void lmrcImageToIntImage(mrcImage* dst, mrcImage* src, mrcImageParaTypeInteger mode);

Relation to FFT

extern void lfft2d(mrcImage* fft, mrcImage* img);

extern void lmrcImageFFT(mrcImage* fft, mrcImage* img, long mode);
extern void lmrcImageFFTFirstDimensionOnly(mrcImage* fft, mrcImage* img, long mode);
#ifdef FFTW
extern void lmrcImageFFTWFlagSet(unsigned int flag);
#endif
extern void lmrcFFTFGconj(mrcImage* out, mrcImage* in1, mrcImage* in2);
extern void lmrcFFTFxG(mrcImage* out, mrcImage* in1, mrcImage* in2);

Correlation of image data

extern void lmrcImageCorrelation(mrcImage* out, mrcImage* in, mrcImage* ref, long mode);
extern void lmrcImageCorrelationModePrint(FILE* fpt);

extern void lmrcImageCorrelationWithCTFCompensation(mrcImage* out, mrcImage* in, ctfInfo* inctf, mrcImage* ref, ctfInfo* refctf, long mode);

Error Process

extern mrcStatusType mrcError(char* message, char* inRtnName, char* callRtnName, mrcStatusType status);
extern mrcStatusType mrcErrorMsg(FILE* fpt, char* message, char* inRtnName, char* callRtnName, mrcStatusType status);

Process each command

lmrcFFTInfo

extern floatVector* lmrcFSInfoXAxisMag(mrcImage* fft);
extern floatVector* lmrcFSInfoXAxisPhase(mrcImage* fft);
extern floatVector* lmrcFSInfoYAxisMag(mrcImage* fft);
extern floatVector* lmrcFSInfoYAxisPhase(mrcImage* fft);
extern floatVector* lmrcFSInfoScatteringAngularDistribution(mrcImage* fft);
extern floatVector* lmrcFSInfoScatteringAngularDistributionAverage(mrcImage* fft);
extern floatVector* lmrcFSInfoScatteringAngularDistributionSD(mrcImage* fft);
extern floatVector* lmrcFSInfoSpacing(mrcImage* fft);

mrcImageCheckSameSize

extern void lmrcImageCheckSameSize(mrcImage* in, mrcImage* ref);

mrcImageCheckFFT

Regardless of the of Input file in, output FFT image to ref.

extern void lmrcImageCheckFFT(mrcImage* in, mrcImage* ref);

lmrcImageSmoothing

Use setting data as lmrcImageSmoothingInfo.

extern void lmrcImageSmoothingModeInfo(FILE* fpt);
extern void lmrcImageSmoothing(mrcImage* dst, mrcImage* src, lmrcImageSmoothingInfo* info, long mode);

lmrcImageCVE

Use setting data as lmrcImageCVEInfo.

extern void lmrcImageCVE(mrcImage* dst, mrcImage* src, lmrcImageCVEInfo* info);

lmrcImageTfunction

Use setting data as lmrcImageTfunctionInfo.

extern void lmrcImageTfunction(mrcImage* dst, mrcImage* src, lmrcImageTfunctionInfo* info, long mode);

lmrcImageHighlighting

Use setting data as lmrcImageHighlightInfo.

extern void lmrcImageHighlightingInfoPrint(FILE* fpt);
extern void lmrcImageHighlighting(mrcImage* dst, mrcImage* src, lmrcImageHighlightInfo* info);

lmrcImageLowPassFilter

Use setting data as lmrcImageLowPassFilterInfo.

extern void lmrcImageLowPassFilter(mrcImage* dst, mrcImage* src, lmrcImageLowPassFilterInfo* info, long mode);

lmrcImageHighPassFilter

Use setting data as lmrcImageHighPassFilterInfo.

extern void lmrcImageHighPassFilter(mrcImage* dst, mrcImage* src, lmrcImageHighPassFilterInfo* info, long mode);

lmrcImageBandPassFilter

Use setting data as lmrcImageBandPassFilterInfo.

extern void lmrcImageBandPassFilter(mrcImage* dst, mrcImage* src, lmrcImageBandPassFilterInfo* info, long mode);

lmrcImageShrink

extern void lmrcImageShrink(mrcImage* dst, mrcImage* src, mrcImageParaTypeIntegerCoord S, long mode);

lmrcImageShift

extern void lmrcImageShift(mrcImage* out, mrcImage* in, mrcImageParaTypeRealCoord shift, mrcPixelDataHowToGet mode);
extern void lmrcImageShiftFollowingGC(mrcImage* out, mrcImage* in, int mode);

mrcImagePrint

extern  void mrcInfoPrint(FILE* fpt, mrcImage* mrc, mrcImageParaTypeInteger mode);

lmrcImageMultiCTFCompensation

Use setting data as lmrcImageMultiCTFCompensationInfo.

extern void lmrcImageMultiCTFCompensationInfoInit(lmrcImageMultiCTFCompensationInfo* info);
extern void lmrcImageMultiCTFCompensationInfoSet(lmrcImageMultiCTFCompensationInfo* info);
extern void lmrcImageMultiCTFCompensation(mrcImage* dst, mrcImage* src, ctfInfo* ctf, long nfile, lmrcImageMultiCTFCompensationInfo info, long mode);

lmrcImageCTFObservation

extern void lmrcImageCTFObservation(mrcImage* dst, mrcImage* src, ctfInfo* ctf, long mode);
extern void lmrcImagesCTFObservation(mrcImage* dst, mrcImage* src, ctfInfo* ctf, long mode);

lmrcImageCTFCompensation

extern void lmrcImageCTFCompensation(mrcImage* src, ctfInfo* ctf, long mode);

lmrcImageCTFSN

Use setting data as lmrcImageCTFSNInfo.

extern void lmrcImageCTFSN(mrcImage *outMrc, const mrcImage *inMrc, lmrcImageCTFSNInfo *info, long mode);

lmrcImageFourierPowerSpectrum

Use setting data as lmrcImageFourierPowerSpectrumInfo.

extern mrcImageFourierPowerSpectrum lmrcImageFourierPowerSpectrumMakeSpectrum(const mrcImage *inFFT, lmrcImageFourierPowerSpectrumInfo *info);
extern void lmrcImageFourierPowerSpectrumDeleteSpectrum(mrcImageFourierPowerSpectrum theSpectrum);
extern mrcImageFourierPowerSpectrum lmrcImageFourierPowerSpectrum(const mrcImage *inMrc, lmrcImageFourierPowerSpectrumInfo *info, long mode);

extern void lmrcImageRotation3DModePrint(FILE* fpt);
extern void lmrcImageRotation3DFollowingEulerAngle(mrcImage* dst, mrcImage* src, const char* m, 
	mrcImageParaTypeReal rot1, mrcImageParaTypeReal rot2, mrcImageParaTypeReal rot3, mrcPixelDataHowToGet mode, int mode2);

extern void lmrcImageRotation3DFollowingMatrix3D(mrcImage* dst, mrcImage* src, Matrix3D mat, mrcPixelDataHowToGet mode, int mode2);

extern void lmrcImageRotation3DZXY(mrcImage* dst, mrcImage* src,  
	mrcImageParaTypeReal rotx, mrcImageParaTypeReal roty, mrcImageParaTypeReal rotz, mrcPixelDataHowToGet mode, int mode2);

extern void lmrcImageRotation2D(mrcImage* dst, mrcImage* src, double angle, mrcPixelDataHowToGet mode);
extern void lmrcImageRotation2DPeriodicBoundary(mrcImage* dst, mrcImage* src, double angle, mrcPixelDataHowToGet mode);

mrcImageSectionGet

extern char* mrcImageSectionGetModeDescription(long mode);
extern void mrcImageSectionGet(mrcImage* dst, mrcImage* src, mrcImageParaTypeReal z, long mode);

mrcImageSectionSet

extern void mrcImageSectionSet(mrcImage* dst, mrcImage* src, mrcImageParaTypeReal z, long mode);
extern double lmrcImageMaxDataGet(mrcImage* src, long mode);