3 <TITLE> mrcImage </TITLE>
8 <A HREF="#include">mrcImage.h</A>
9 <H2> Data Structure </H2>
10 <H2> Member Function </H2>
12 <LI> Momory Control for mrcImage <UL>
16 <LI> File Control for mrcImage-formatted file <UL>
18 <DD> mrcHeaderRead and mrcImageRead
19 <DD> No initialization is required.
21 <DD> Read image following header information
27 <LI> Subtration : in lmrcImageSubtraction.c <DL>
28 <DT>lmrcImageSubtraction(mrcImage* out, mrcImage* in, double value);
30 <DT>lmrcImageMeanSubtraction(mrcImage* out, mrcImage* in);
31 <DD>out := in - mean of in
32 <DT>lmrcImageMinSubtraction(mrcImage* out, mrcImage* in);
33 <DD>out := in - min of in
34 <DT>lmrcImageMaxSubtraction(mrcImage* out, mrcImage* in);
35 <DD>out := in - max of in
36 <DT>lmrcImageSubtractionCalc(mrcImage* out, mrcImage* in1, mrcImage* in2);
40 <LI> Rotation : in lmrcImageRotation.c : mrcImage.h<DL>
41 <DT> 3D: lmrcImageRotation3DFollowingEulerAngle
42 <DD> Rotation of a 3D image
43 <DT> 3D: lmrcImageRotation3DZXY
44 <DD> Rotation ZXY of a 3D image
45 <DT> 2D: lmrcImageRotation2D
46 <DD> Rotation of a 2D image
47 <DT> 2D: lmrcImageRotationPeriodicBoundary
48 <DD> Rotation of a 2D image
50 <LI> Correlation : in lmrcImageCorrelation <DL>
51 <DT>double lmrcImageEuclidDistanceCalc(mrcImage* in1, mrcImage* in2, int mode)
52 <DD> return Euclid Distnce <UL>
53 <LI> 0: sigma<SUB>i</SUB>(in1<SUB>i</SUB> - in2<SUB>i</SUB>)<SUP>2</SUP>
54 <LI> 1: sqrt(sigma<SUB>i</SUB>(in1<SUB>i</SUB> - in2<SUB>i</SUB>)<SUP>2</SUP>)
55 <LI> 2: the above number / pixelNumber;
58 <DT>lmrcImageCorralation(mrcImage* out, mrcImage* in, mrcImage* ref, long mode);
60 <DT>void lmrcImageCorrelationRefinement(mrcImage* out, mrcImage* shift,
61 mrcImage* in, mrcImage* ref,
62 lmrcImageCorrelationRefinementInfo* info, long mode)
63 <DD> While two images are shifted in Fourier space, i.e. phase shift,
64 the best match is searched.
65 <DT>double lmrcImageLinearCorrelation(mrcImage* in1, mrcImage* in2, long mode)
66 <DD> Calculate the linear correlation, i.e. statistical correlation
67 <DT>void lmrcImageAutoRotationCorrelation(mrcImage* out, mrcImage* cor,
68 mrcImage* in, mrcImage* ref,
69 lmrcImageAutoRotationCorrelationInfo* linfo, int mode)
70 <DD> While a reference image is rotated, lmrcImageCorrelation is used.
71 <DT>void lmrcImageAutoRotationCorrelationRotationalCrossCorrelationFunction(
72 mrcImage* out, mrcImage* cor,
73 mrcImage* in, mrcImage* ref,
74 lmrcImageAutoRotationCorrelationInfo* linfo, int mode)
75 <DD> After two images are tranformed from Descartes into Polar coordinates,
76 lmrcImageCorrelation is used.
77 <DT>void lmrcImageAutoRotationCorretionForManyReferences(mrcImage* in, mrcImage* ref,
78 lmrcImageAutoRotationCorrelationForManyReferencesInfo* info,
79 lmrcImageAutoRotationCorrelationInfo* linfo,
81 <DD> Auto Rotational correlation for many references.
83 <LI> Classifilcation <UL>
84 <LI> ClusterAnalysis <UL>
85 <LI> lmrcImageClusterAnalysis
86 <LI> lmrcImageClusterAnalysisByIteration
87 <LI> lmrcImageDistanceCalc <UL>
88 <LI> lmrcImageDistanceCalc0 <UL>
89 <DD> Interface method for DistanceCalc
90 <LI> lmrcImageDistanceCalc
91 <LI> lmrcImageDistanceCalcWithAutoRotation
92 <LI> lmrcImageDistanceCalcByWardMethod
93 <LI> lmrcImageDistanceCalcByWardMethodWithAutoRotation
95 <LI> lmrcImageClusterMerge
96 <LI> lmrcImageClusterAnalysisDistanceToLog(FILE* fpt, ...);
97 <DD> Output the log file during analysis
102 <A NAME="Information">
103 <H2>Information from source codes</H2>
116 # The latest update : %G% at %U%
118 #%Z% mrcImage.h ver %I%
119 #%Z% Created by tacyas
121 #%Z% Usage : mrcImage.h
127 * Language: C or CC(c++)
128 * Editor : tacyas.tkyemg.u_tokyo
130 * Modified: 2012 for CCP4(2000)
134 * Header File for MRC Format
141 #include "Matrix3D.h"
147 typedef unsigned int mrcStatusMask;
149 typedef unsigned int mrcStatusMask;
154 typedef unsigned int mrcStatusType;
156 typedef unsigned int mrcStatusType;
163 #define mrcStatusMask_ExitFailure ((mrcStatusMask)0x80000000L)
164 #define mrcStatusMask_Warning ((mrcStatusMask)0x40000000L)
165 #define mrcStatusMask_Information ((mrcStatusMask)0x20000000L)
166 #define mrcStatusMask_Message ((mrcStatusMask)0x10000000L)
167 #define mrcStatusMask_1B ((mrcStatusMask)0x08000000L)
168 #define mrcStatusMask_1A ((mrcStatusMask)0x04000000L)
169 #define mrcStatusMask_19 ((mrcStatusMask)0x02000000L)
170 #define mrcStatusMask_18 ((mrcStatusMask)0x01000000L)
171 #define mrcStatusMask_17 ((mrcStatusMask)0x00800000L)
172 #define mrcStatusMask_16 ((mrcStatusMask)0x00400000L)
173 #define mrcStatusMask_15 ((mrcStatusMask)0x00200000L)
174 #define mrcStatusMask_14 ((mrcStatusMask)0x00100000L)
175 #define mrcStatusMask_ReferMRCInfo ((mrcStatusMask)0x00080000L)
176 #define mrcStatusMask_Mode ((mrcStatusMask)0x00040000L)
177 #define mrcStatusMask_ReferMemory ((mrcStatusMask)0x00020000L)
178 #define mrcStatusMask_ReferFile ((mrcStatusMask)0x00010000L)
180 #define MRC_Status_OK ((mrcStatusType)0x00000000L)
182 #define MRC_FileCanNotOpened ((mrcStatusType)0x00000000L|mrcStatusMask_ReferFile)
183 #define MRC_ImageHeaderCanNotRead ((mrcStatusType)0x00000001L|mrcStatusMask_ReferFile)
184 #define MRC_ImageDataCanNotRead ((mrcStatusType)0x00000002L|mrcStatusMask_ReferFile)
185 #define MRC_ImageHeaderCanNotWrite ((mrcStatusType)0x00000003L|mrcStatusMask_ReferFile)
186 #define MRC_ImageDataCanNotWrite ((mrcStatusType)0x00000004L|mrcStatusMask_ReferFile)
187 #define MRC_FileCanNotClosed ((mrcStatusType)0x00000005L|mrcStatusMask_ReferFile)
189 #define MRC_MemoryNotAllocate ((mrcStatusType)0x00000000L|mrcStatusMask_ReferMemory)
191 #define MRC_ModeNotSupported ((mrcStatusType)0x00000000L|mrcStatusMask_Mode)
192 #define MRC_ModeZNot1FFTMode ((mrcStatusType)0x00000001L|mrcStatusMask_Mode)
194 #define MRC_SizeOfZero ((mrcStatusType)0x00000000L|mrcStatusMask_ReferMRCInfo)
197 extern char* mrcImageGeneralTypeList[];
202 typedef union MRC_Status_t {
207 unsigned char category;
211 unsigned char category;
218 typedef int mrcImageParaTypeInteger;
220 typedef int mrcImageParaTypeInteger;
223 typedef float mrcImageParaTypeReal;
224 typedef unsigned char mrcImageParaTypeCharacter;
226 typedef struct mrcImageParaTypeIntegerCoord {
227 mrcImageParaTypeInteger x;
228 mrcImageParaTypeInteger y;
229 mrcImageParaTypeInteger z;
230 } mrcImageParaTypeIntegerCoord;
232 typedef struct mrcImageParaTypeRealCoord {
233 mrcImageParaTypeReal x;
234 mrcImageParaTypeReal y;
235 mrcImageParaTypeReal z;
236 } mrcImageParaTypeRealCoord;
245 #define MRC_HEADER (1024)
246 #define MRC_TAILER (1024)
248 /* Image Data Type */
249 /* for compatibility */
250 typedef mrcImageParaTypeInteger mrcImageMode;
251 #define MRC_char_image ((mrcImageMode)0)
252 #define MRC_short_image ((mrcImageMode)1)
253 #define MRC_float_image ((mrcImageMode)2)
254 #define MRC_complex_short_ft ((mrcImageMode)3)
255 #define MRC_complex_float_ft ((mrcImageMode)4)
256 #define MRC_long_image ((mrcImageMode)101)
257 #define MRC_double_image ((mrcImageMode)102)
258 #define MRC_complex_long_ft ((mrcImageMode)103)
259 #define MRC_complex_double_ft ((mrcImageMode)104)
260 #define MRC_complex_short_fft ((mrcImageMode)1003)
261 #define MRC_complex_float_fft ((mrcImageMode)1004)
262 #define MRC_complex_long_fft ((mrcImageMode)1103)
263 #define MRC_complex_double_fft ((mrcImageMode)1104)
264 #define MRC_NotSuppotedMode ((mrcImageMode)0xffffffffL)
266 #define mrcCharImage ((mrcImageMode)0)
267 #define mrcShortImage ((mrcImageMode)1)
268 #define mrcFloatImage ((mrcImageMode)2)
269 #define mrcComplexShortFT ((mrcImageMode)3)
270 #define mrcComplexFloatFT ((mrcImageMode)4)
271 #define mrcComplexFloatOneDimFT ((mrcImageMode)5)
273 #define mrcUShortImage ((mrcImageMode)6)
274 #define mrcCharImageRGB ((mrcImageMode)16)
275 // Change for IMOD: (6,7) -> (26,27)
276 #define mrcFloatRadonImage ((mrcImageMode)26)
277 #define mrcFloatRadonFT ((mrcImageMode)27)
278 #define mrcLongImage ((mrcImageMode)101)
279 #define mrcDoubleImage ((mrcImageMode)102)
280 #define mrcComplexLongFT ((mrcImageMode)103)
281 #define mrcComplexDoubleFT ((mrcImageMode)104)
282 #define mrcComplexShortFFT ((mrcImageMode)1003)
283 #define mrcComplexFloatFFT ((mrcImageMode)1004)
284 #define mrcComplexLongFFT ((mrcImageMode)1103)
285 #define mrcComplexDoubleFFT ((mrcImageMode)1104)
286 #define mrcNotSuppotedMode ((mrcImageMode)0xffffffffL)
288 #define MRC_MAX_LABEL_N (10)
289 #define MRC_MAX_LABEL_LEN (80)
290 #define MRC_MAX_EXTRA (29)
291 #define MRC_MAX_EXTRA_CCP4 (15)
297 typedef struct _mrcImageHeader {
298 mrcImageParaTypeIntegerCoord N; /* Data Numbers */
299 mrcImageMode Mode; /* Data Type */
300 mrcImageParaTypeIntegerCoord StartN; /* First in map */
301 mrcImageParaTypeIntegerCoord M; /* Number of Intervals */
302 mrcImageParaTypeRealCoord Length; /* Cell Dimensions : Angstrom */
303 mrcImageParaTypeReal Alpha; /* Cell Angle : Degree */
304 mrcImageParaTypeReal Beta;
305 mrcImageParaTypeReal Gamma;
306 mrcImageParaTypeInteger MAPC; /* Which Axis Corresponds to Columns */
307 mrcImageParaTypeInteger MAPR; /* Which Axis Corresponds to Rows */
308 mrcImageParaTypeInteger MAPS; /* Which Axis Corresponds to Sections */
309 mrcImageParaTypeReal AMin; /* Minimum Density Value */
310 mrcImageParaTypeReal AMax; /* Maximum Density Value */
311 mrcImageParaTypeReal AMean; /* Mean Density Value */
312 mrcImageParaTypeInteger ISPG; /* Space Group */
313 mrcImageParaTypeInteger NSYMBT; /* Number of bytes */
314 mrcImageParaTypeReal EXTRA[MRC_MAX_EXTRA]; /* Extra, user defined storage space */
315 mrcImageParaTypeReal OriginX;
316 mrcImageParaTypeReal OriginY;
317 mrcImageParaTypeInteger LabelN;
318 char Label[MRC_MAX_LABEL_N][MRC_MAX_LABEL_LEN];
321 /* For CCP4 2000 : Current New */
322 typedef struct _mrcImageHeaderCCP4 {
323 mrcImageParaTypeIntegerCoord N; /* Data Numbers */
324 mrcImageMode Mode; /* Data Type */
325 mrcImageParaTypeIntegerCoord StartN; /* First in map */
326 mrcImageParaTypeIntegerCoord NI; /* Number of Intervals */
327 mrcImageParaTypeRealCoord Length; /* Cell Dimensions : Angstrom */
328 mrcImageParaTypeReal Alpha; /* Cell Angle : Degree */
329 mrcImageParaTypeReal Beta;
330 mrcImageParaTypeReal Gamma;
331 mrcImageParaTypeInteger MAPC; /* Which Axis Corresponds to Columns */
332 mrcImageParaTypeInteger MAPR; /* Which Axis Corresponds to Rows */
333 mrcImageParaTypeInteger MAPS; /* Which Axis Corresponds to Sections */
334 mrcImageParaTypeReal AMin; /* Minimum Density Value */
335 mrcImageParaTypeReal AMax; /* Maximum Density Value */
336 mrcImageParaTypeReal AMean; /* Mean Density Value */
337 mrcImageParaTypeInteger ISPG; /* Space Group */
338 mrcImageParaTypeInteger NSYMBT; /* Number of bytes used for storing symmetry operators */
339 mrcImageParaTypeInteger LSKFLG; /* Flag for Skew transformation */
340 mrcImageParaTypeReal SKWMAT[9]; /* Skew matrix S */
341 mrcImageParaTypeReal SKWTRN[3]; /* Skew translation */
342 mrcImageParaTypeReal EXTRA[MRC_MAX_EXTRA_CCP4]; /* Extra, user defined storage space */
343 mrcImageParaTypeCharacter MAP[4];
344 mrcImageParaTypeInteger MARCHST;
345 mrcImageParaTypeReal ARMS;
346 mrcImageParaTypeInteger LabelN;
347 char Label[MRC_MAX_LABEL_N][MRC_MAX_LABEL_LEN];
348 } _mrcImageHeaderCCP4;
350 /* For IMOD: Current New */
351 typedef struct _mrcImageHeaderIMOD {
352 mrcImageParaTypeIntegerCoord N; /* Data Numbers */
353 mrcImageMode Mode; /* Data Type */
354 mrcImageParaTypeIntegerCoord StartN; /* First in map */
355 mrcImageParaTypeIntegerCoord M; /* Number of Intervals */
356 mrcImageParaTypeRealCoord Length; /* PixelSize=Len/M: Angstrom */
357 mrcImageParaTypeReal Alpha; /* Cell Angle : Degree */
358 mrcImageParaTypeReal Beta;
359 mrcImageParaTypeReal Gamma;
360 mrcImageParaTypeInteger MAPC; /* Which Axis Corresponds to Columns */
361 mrcImageParaTypeInteger MAPR; /* Which Axis Corresponds to Rows */
362 mrcImageParaTypeInteger MAPS; /* Which Axis Corresponds to Sections */
363 mrcImageParaTypeReal AMin; /* Minimum Density Value */
364 mrcImageParaTypeReal AMax; /* Maximum Density Value */
365 mrcImageParaTypeReal AMean; /* Mean Density Value */
366 mrcImageParaTypeInteger ISPG; /* Space Group */
367 mrcImageParaTypeInteger NSYMBT; /* Number of bytes used for extended header */
368 short creatid; /* Flag for Skew transformation */
369 short extra1[15]; /* Flag for Skew transformation */
371 short nreal; /*l Skew matrix S */
372 mrcImageParaTypeReal extra2[5]; /* Extra, user defined storage space */
373 mrcImageParaTypeInteger imodStamp;
374 mrcImageParaTypeInteger imodFlags;
381 mrcImageParaTypeReal tiltangles[6]; /* Extra, user defined storage space */
382 mrcImageParaTypeReal xorg; /* Extra, user defined storage space */
383 mrcImageParaTypeReal yorg; /* Extra, user defined storage space */
384 mrcImageParaTypeReal zorg; /* Extra, user defined storage space */
385 mrcImageParaTypeCharacter MAP[4];
386 mrcImageParaTypeInteger MARCHST;
387 mrcImageParaTypeReal ARMS;
388 mrcImageParaTypeInteger LabelN;
389 char Label[MRC_MAX_LABEL_N][MRC_MAX_LABEL_LEN];
390 } _mrcImageHeaderIMOD;
393 typedef union mrcImageHeader {
394 unsigned char All[MRC_HEADER];
395 mrcImageParaTypeInteger Int[MRC_HEADER/4];
396 mrcImageParaTypeReal Real[MRC_HEADER/4];
397 _mrcImageHeader Cont;
398 _mrcImageHeaderCCP4 ContCCP4;
399 _mrcImageHeaderIMOD ContIMOD;
403 #define FEI_EXTENDED_HEADER_EACH (128)
405 typedef struct _FEIextendedHeader {
406 mrcImageParaTypeReal aTilt; // Alpha tilt, in degrees
407 mrcImageParaTypeReal bTilt; // Beta tilt, in degrees
408 mrcImageParaTypeReal xStage; // Stage x position.
409 // Normally in SI units (meters),
410 // but some older files may be in micrometers.
411 // Check by looking at values for x,y,z.
412 // If one of these exceeds 1, it will be micrometers.
413 mrcImageParaTypeReal yStage; // Stage y position. For testing of units see x_stage.
414 mrcImageParaTypeReal zStage; // Stage z position. For testing of units see x_stage.
415 mrcImageParaTypeReal xShift; // Image shift x. For testing of units see x_stage.
416 mrcImageParaTypeReal yShift; // Image shift y. For testing of units see x_stage.
417 mrcImageParaTypeReal defocus;
418 mrcImageParaTypeReal expTime;
419 mrcImageParaTypeReal mean;
420 mrcImageParaTypeReal tiltAxis;
421 mrcImageParaTypeReal pixelSize;
422 mrcImageParaTypeReal magnification;
423 mrcImageParaTypeReal ht;
424 mrcImageParaTypeReal binning;
425 mrcImageParaTypeReal appliedDefocus;
426 mrcImageParaTypeReal reminder[FEI_EXTENDED_HEADER_EACH/4-16];
427 } _FEIextendedHeader;
429 typedef union FEIextendedHeader {
430 mrcImageParaTypeReal Real[FEI_EXTENDED_HEADER_EACH/4];
431 _FEIextendedHeader Cont;
441 #define mrcImageTailerMode2DProjection 0
445 typedef struct _mrcImageTailer {
447 mrcImageParaTypeInteger Mode;
448 char EulerAngleMode[4];
449 mrcImageParaTypeReal Rot1;
450 mrcImageParaTypeReal Rot2;
451 mrcImageParaTypeReal Rot3;
452 mrcImageParaTypeInteger Mirror;
456 typedef union mrcImageTailer {
457 unsigned char All[MRC_TAILER];
458 mrcImageParaTypeInteger Int[MRC_TAILER/4];
459 mrcImageParaTypeReal Real[MRC_TAILER/4];
460 _mrcImageTailer Cont;
464 typedef char mrcImageSymmetryOperator;
469 typedef struct mrcImage {
470 mrcImageHeader Header;
472 mrcImageParaTypeInteger BytePerBand;
473 mrcImageParaTypeInteger BandPerPixel;
474 size_t PixelPerImage;
475 mrcStatusType status;
477 unsigned char* ImageCharImage;
478 unsigned short* ImageShortImage;
479 unsigned long* ImageLongImage;
480 float* ImageFloatImage;
481 double* ImageDoubleImage;
484 mrcImageTailer* Tailer;
485 mrcImageParaTypeInteger numTailer;
487 /* FEIextendedHeader */
488 FEIextendedHeader* FEIHeader;
489 mrcImageParaTypeInteger numFEIHeader;
493 mrcImageParaTypeInteger dummyHeaderByte;
496 mrcImageParaTypeInteger flagByteSwap;
499 mrcImageParaTypeInteger flagCCP4;
500 mrcImageParaTypeInteger ImageOffset;
501 mrcImageSymmetryOperator* SymmetryOperator;
504 typedef struct mrcImageInformation {
506 double rootMeanSquare;
507 double meanOfSphereSurface;
508 double sdOfSphereSurface;
509 double seOfSphereSurface;
510 double meanOfCylinderSurface;
511 double sdOfCylinderSurface;
512 double seOfCylinderSurface;
517 mrcImageParaTypeRealCoord maxCoord;
519 mrcImageParaTypeRealCoord minCoord;
524 double RMS; /* Root mean square */
527 /* For Search Area */
542 } mrcImageInformation;
547 typedef enum mrcImageInformationMode {
549 meanOfSphereSurface = 1,
550 meanOfCylinderSurface = 2,
556 } mrcImageInformationMode;
561 #define HeaderN Header.Cont.N
562 #define HeaderMode Header.Cont.Mode
563 #define HeaderStartN Header.Cont.StartN
564 #define HeaderM Header.Cont.M
565 #define HeaderLength Header.Cont.Length
566 #define HeaderAlpha Header.Cont.Alpha
567 #define HeaderBeta Header.Cont.Beta
568 #define HeaderGamma Header.Cont.Gamma
569 #define HeaderMAPC Header.Cont.MAPC
570 #define HeaderMAPR Header.Cont.MAPR
571 #define HeaderMAPS Header.Cont.MAPS
572 #define HeaderAMin Header.Cont.AMin
573 #define HeaderAMax Header.Cont.AMax
574 #define HeaderAMean Header.Cont.AMean
575 #define HeaderISPG Header.Cont.ISPG
576 #define HeaderNSYMBT Header.Cont.NSYMBT
577 #define HeaderLSKFLG Header.ContCCP4.LSKFLG
578 #define HeaderEXTRA Header.Cont.EXTRA
579 #define HeaderOriginX Header.Cont.OriginX
580 #define HeaderOriginY Header.Cont.OriginY
581 #define HeaderLabelN Header.Cont.LabelN
582 #define HeaderLabel Header.Cont.Label
584 typedef enum mrcPixelDataType {
594 typedef enum mrcPixelDataHowToGet {
595 mrcPixelHowNearest = 0,
597 mrcPixelHowCubicConv,
599 } mrcPixelDataHowToGet;
604 typedef struct lmrcImageSmoothingInfo {
606 mrcImageParaTypeReal sx; /* Filter kernel size */
607 mrcImageParaTypeReal sy;
608 mrcImageParaTypeReal sz;
609 double sigma; /* for Lee-Sigma filter */
610 } lmrcImageSmoothingInfo;
612 typedef struct lmrcImageCVEInfo {
613 long sx; /* CVE domain size. */
614 long sy; /* Apr.30,1996 */
618 typedef struct lmrcImageTfunctionInfo {
619 long sx; /* Tfunction domain size. */
620 long sy; /* June 11,1996 */
622 } lmrcImageTfunctionInfo;
624 typedef struct lmrcImageHighlightInfo {
626 float Bias; /* May 1,1996 */
628 } lmrcImageHighlightInfo;
630 typedef struct lmrcImageLowPassFilterInfo
632 long mode; /* June 4,1996 */
634 } lmrcImageLowPassFilterInfo;
636 typedef struct lmrcImageHighPassFilterInfo
638 long mode; /* June 5,1996 */
641 float pathWindowHigh;
642 } lmrcImageHighPassFilterInfo;
644 typedef struct lmrcImageBandPassFilterInfo
646 long mode; /* June 5,1996 */
647 float hvl, hvh, wl, wh;
650 } lmrcImageBandPassFilterInfo;
653 /* Utility Routines */
657 /* prototype begin */
659 extern mrcStatusType mrcInit(mrcImage* mrc, char* filaname);
660 extern mrcStatusType mrcDefaultHeaderValueSet(mrcImage* mrc);
661 extern mrcStatusType mrcDefaultHeaderValueSetOnlyFixedValue(mrcImage* mrc);
662 extern mrcStatusType mrcHiddenDataSet(mrcImage* mrc, long mode);
663 extern void mrcImageFree(mrcImage* mrc, char* message);
665 extern void mrcTailerInit(mrcImage* mrc, long mode);
666 extern void mrcTailerCopy(mrcImage* dst, mrcImage* src, long mode);
667 /* mode 1: Tailer Memory Allocation */
669 extern mrcStatusType mrcFileReadGeneral (mrcImage* mrc, char* filename, char* type, char* message, long mode);
670 extern mrcStatusType mrcImageReadGeneral (mrcImage* mrc, char* filename, char* type, char* message, long mode);
671 extern mrcStatusType mrcHeaderReadGeneral(mrcImage* mrc, char* filename, char* type, char* message, long mode);
672 extern mrcStatusType mrcTailerReadGeneral(mrcImage* mrc, char* filename, char* type, char* message, long mode);
673 extern mrcStatusType mrcFileGeneralListPrint(FILE* fpt);
675 extern mrcStatusType mrcFileRead (mrcImage* mrc, char* filename, char* message, long mode);
676 extern mrcStatusType mrcImageRead (mrcImage* mrc, char* filename, char* message, long mode);
677 extern mrcStatusType mrcHeaderRead(mrcImage* mrc, char* filename, char* message, long mode);
678 extern mrcStatusType mrcTailerRead(mrcImage* mrc, char* filename, char* message, long mode);
680 extern mrcStatusType mrcFileReadFEIextendedMRC (mrcImage* mrc, char* filename, char* message, long mode);
681 extern mrcStatusType mrcImageReadFEIextendedMRC (mrcImage* mrc, char* filename, char* message, long mode);
682 extern mrcStatusType mrcHeaderReadFEIextendedMRC(mrcImage* mrc, char* filename, char* message, long mode);
683 extern mrcStatusType mrcTailerReadFEIextendedMRC(mrcImage* mrc, char* filename, char* message, long mode);
685 extern mrcStatusType mrcFileReadIMODextendedMRC (mrcImage* mrc, char* filename, char* message, long mode);
686 extern mrcStatusType mrcImageReadIMODextendedMRC (mrcImage* mrc, char* filename, char* message, long mode);
687 extern mrcStatusType mrcHeaderReadIMODextendedMRC(mrcImage* mrc, char* filename, char* message, long mode);
688 extern mrcStatusType mrcTailerReadIMODextendedMRC(mrcImage* mrc, char* filename, char* message, long mode);
690 extern int mrcImageByteSwap(mrcImage* mrc, long mode);
692 #define mrcFileWriteModeGet(x) BYTE4GETBYTE(x,0)
693 #define mrcImageWriteModeGet(x) BYTE4GETBYTE(x,1)
694 #define mrcHeaderWriteModeGet(x) BYTE4GETBYTE(x,2)
695 #define mrcTailerWriteModeGet(x) BYTE4GETBYTE(x,3)
697 #define mrcFileWriteMode_InfoPrint 1
698 #define mrcFileWriteMode_NoCallForStatData 2
700 extern mrcStatusType mrcFileWrite (mrcImage* mrc, char* filename, char* message, long mode);
701 extern mrcStatusType mrcImageWrite (mrcImage* mrc, char* filename, char* message, long mode);
702 extern mrcStatusType mrcHeaderWrite(mrcImage* mrc, char* filename, char* message, long mode);
703 extern mrcStatusType mrcTailerWrite(mrcImage* mrc, char* filename, char* message, long mode);
705 extern mrcStatusType mrcFileWriteLowerResolution(mrcImage* mrc, char* filename, char* message, long sample , long mode);
707 extern double mrcImageDataGetbyAU(mrcImage* mrc,
708 mrcImageParaTypeReal x /* Angstrom */,
709 mrcImageParaTypeReal y /* Angstrom */,
710 mrcImageParaTypeReal z /* Angstrom */,
712 mrcPixelDataType mode,
713 mrcPixelDataHowToGet how);
714 extern double mrcPixelDataGet(mrcImage* mrc,
715 mrcImageParaTypeReal x /* Pixel Unit */,
716 mrcImageParaTypeReal y /* Pixel Unit */,
717 mrcImageParaTypeReal z /* Pixel Unit */,
719 mrcPixelDataType mode,
720 mrcPixelDataHowToGet how);
722 extern void mrcPixelsDataGet(float* data, mrcImageParaTypeRealCoord* inCoord, int nPixel, mrcImage* in, mrcPixelDataType type, mrcPixelDataHowToGet howto);
723 extern void mrcPixelDataGetbyMatrix3D(mrcImage* out, mrcImage* in, Matrix3D mat, mrcPixelDataHowToGet mode, int mode2);
725 static inline double mrcPixelDataGetFloatImage(mrcImage* img,
726 mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z)
728 return img->ImageFloatImage[x + y*img->HeaderN.x + z*img->HeaderN.x*img->HeaderN.y];
731 static inline double mrcPixelDataGetFloatFTRe(mrcImage* fft,
732 mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z)
734 return fft->ImageFloatImage[2*(x + y*(fft->HeaderN.x/2+1) + z*(fft->HeaderN.x/2+1)*fft->HeaderN.y)];
736 static inline double mrcPixelDataGetFloatFTIm(mrcImage* fft,
737 mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z)
739 return fft->ImageFloatImage[2*(x + y*(fft->HeaderN.x/2+1) + z*(fft->HeaderN.x/2+1)*fft->HeaderN.y)+1];
742 /* in mrcImageSet.c */
743 extern void mrcInfoSet(mrcImage* mrc, FILE* fptIn, FILE* fptOut, mrcImageParaTypeInteger mode);
748 /* in mrcImageDataSet.c */
749 typedef enum mrcImageDataSetMode {
750 mrcImageDataSetModeCentre = 0,
751 mrcImageDataSetModeOrigin = 1
752 } mrcImageDataSetMode;
755 /* prototype begin */
756 extern void mrcImageDataSet(mrcImage* out,
758 mrcImageParaTypeReal x,
759 mrcImageParaTypeReal y,
760 mrcImageParaTypeReal z,
762 mrcImageDataSetMode mode);
765 extern double mrcImageDataSetbyAU(mrcImage* mrc,
766 mrcImageParaTypeReal x /* Angstrom */,
767 mrcImageParaTypeReal y /* Angstrom */,
768 mrcImageParaTypeReal z /* Angstrom */,
770 mrcPixelDataType mode);
771 extern double mrcPixelDataSet(mrcImage* mrc,
772 mrcImageParaTypeReal x /* Pixel Unit */,
773 mrcImageParaTypeReal y /* Pixel Unit */,
774 mrcImageParaTypeReal z /* Pixel Unit */,
776 mrcPixelDataType mode);
778 static inline void mrcPixelDataSetFloatImage(mrcImage* img,
779 mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z, double data)
781 img->ImageFloatImage[x + y*img->HeaderN.x + z*img->HeaderN.x*img->HeaderN.y] = (float)data;
784 static inline void mrcPixelDataSetFloatFTRe(mrcImage* fft,
785 mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z, double data)
787 fft->ImageFloatImage[2*(x + y*(fft->HeaderN.x/2+1) + z*(fft->HeaderN.x/2+1)*fft->HeaderN.y)] = (float)data;
790 static inline void mrcPixelDataSetFloatFTIm(mrcImage* fft,
791 mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z, double data)
793 fft->ImageFloatImage[2*(x + y*(fft->HeaderN.x/2+1) + z*(fft->HeaderN.x/2+1)*fft->HeaderN.y)+1] = (float)data;
797 extern void mrcStatDataSet(mrcImage* mrc, mrcImageParaTypeInteger mode);
801 /* in mrcImageInfo.c */
802 extern void lmrcImageXSection(mrcImage* proj, mrcImage* img, double Y);
803 extern void lmrcImageYSection(mrcImage* proj, mrcImage* img, double X);
804 extern void lmrcImageXProjection(mrcImage* proj, mrcImage* img);
805 extern void lmrcImageYProjection(mrcImage* proj, mrcImage* img);
806 extern void lmrcImageZProjection(mrcImage* proj, mrcImage* img);
807 extern void lmrcImageXYProjection(mrcImage* proj, mrcImage* img);
808 extern void lmrcImageYZProjection(mrcImage* proj, mrcImage* img);
809 extern void lmrcImageZXProjection(mrcImage* proj, mrcImage* img);
811 /* Frequecy max -> 1 */
812 extern void lmrcImageHistgram(double** hist, unsigned long nlevel, mrcImage* img);
813 extern void lmrcImageHistgram2(double** hist, double delta, mrcImage* img);
814 extern void lmrcImageHistgram5(double** hist, unsigned long nlevel, double Low, double High, mrcImage* img);
816 extern void lmrcImageHistgram3(double** hist, unsigned long nlevel, mrcImage* img);
817 extern void lmrcImageHistgram4(double** hist, double delta, mrcImage* img);
818 extern void lmrcImageHistgram6(double** hist, unsigned long nlevel, double Low, double High, mrcImage* img);
819 extern void lmrcImageInformation(mrcImageInformation* info, mrcImage* img);
822 /* in mrcImageCopy.c */
823 extern void lmrcImageCopy(mrcImage* dst, mrcImage* src, mrcImageParaTypeRealCoord to);
826 extern int IsFloatImage(mrcImage* mrc, char* message, mrcImageParaTypeInteger mode);
827 extern int IsFloatFT(mrcImage* mrc, char* message, mrcImageParaTypeInteger mode);
828 extern int IsImage(mrcImage* mrc, char* message, mrcImageParaTypeInteger mode);
829 extern int IsFT(mrcImage* mrc, char* message, mrcImageParaTypeInteger mode);
830 extern int IsFFT(mrcImage* mrc, char* message, mrcImageParaTypeInteger mode);
831 extern void mrcImageInfoSet(mrcImage* mrc, FILE* fptIn, FILE* fptOut, long mode);
833 /* in mrcImageOperation.c */
834 extern void lmrcImageDividedByImage(mrcImage* img, mrcImage* i1, mrcImage* i2);
835 extern void lmrcImagetMapForZero(mrcImage* t, mrcImage* avg, mrcImage* se);
836 extern void lmrcImageSN(mrcImage* sn, mrcImage* avg, mrcImage* sig);
837 extern void lmrcImageDividedByReal(mrcImage* img, double d);
838 extern void lmrcImageDividedByRealForOnlyPositive(mrcImage* img, double d);
839 extern void lmrcImageAddedByReal(mrcImage* img, double d);
840 extern void lmrcImageStdDev(mrcImage* sig, mrcImage* avg, mrcImage* avg2, long num);
841 extern void lmrcImageStdErr(mrcImage* sig, mrcImage* avg, mrcImage* avg2, long num);
842 extern void lmrcImageAdd(mrcImage* img2, mrcImage* img1, long* num);
843 extern void lmrcSQRImageAdd(mrcImage* img2, mrcImage* img1, long* num);
844 extern void lmrcImageSquare(mrcImage* in);
845 extern void lmrcImageRoot(mrcImage* in ,double eps);
846 extern void lmrcImageAbs(mrcImage* out, mrcImage* in);
847 extern void lmrcImageConvolution(mrcImage* out, mrcImage* in, mrcImage* kernel, int mode);
849 /* in mrcImageToIntImage.c */
850 extern void lmrcImageToIntImage(mrcImage* dst, mrcImage* src, mrcImageParaTypeInteger mode);
853 extern void lfft2d(mrcImage* fft, mrcImage* img);
855 extern void lmrcImageFFT(mrcImage* fft, mrcImage* img, long mode);
856 extern void lmrcImageFFTFirstDimensionOnly(mrcImage* fft, mrcImage* img, long mode);
858 extern void lmrcImageFFTWFlagSet(unsigned int flag);
860 extern void lmrcFFTFGconj(mrcImage* out, mrcImage* in1, mrcImage* in2);
861 extern void lmrcFFTFxG(mrcImage* out, mrcImage* in1, mrcImage* in2);
862 extern void lmrcImageCorrelation(mrcImage* out, mrcImage* in, mrcImage* ref, long mode);
863 extern void lmrcImageCorrelationModePrint(FILE* fpt);
866 extern void lmrcImageCorrelationWithCTFCompensation(mrcImage* out, mrcImage* in, ctfInfo* inctf, mrcImage* ref, ctfInfo* refctf, long mode);
870 extern mrcStatusType mrcError(char* message, char* inRtnName, char* callRtnName, mrcStatusType status);
871 extern mrcStatusType mrcErrorMsg(FILE* fpt, char* message, char* inRtnName, char* callRtnName, mrcStatusType status);
872 /* in lmrcFFTInfo.c */
874 extern floatVector* lmrcFSInfoXAxisMag(mrcImage* fft);
875 extern floatVector* lmrcFSInfoXAxisPhase(mrcImage* fft);
876 extern floatVector* lmrcFSInfoYAxisMag(mrcImage* fft);
877 extern floatVector* lmrcFSInfoYAxisPhase(mrcImage* fft);
878 /* The returned values are not magnitudes but powers */
879 extern floatVector* lmrcFSInfoScatteringAngularDistribution(mrcImage* fft);
880 extern floatVector* lmrcFSInfoScatteringAngularDistributionAverage(mrcImage* fft);
881 extern floatVector* lmrcFSInfoScatteringAngularDistributionSD(mrcImage* fft);
882 extern floatVector* lmrcFSInfoSpacing(mrcImage* fft);
883 extern floatVector** lmrcFSInfoScatteringAngularDistributionDivisionAverage(mrcImage* fft, mrcImageParaTypeReal axis, mrcImageParaTypeInteger n, int mode);
884 extern floatVector** lmrcFSInfoScatteringAngularDistributionDivisionSD(mrcImage* fft, mrcImageParaTypeReal axis, mrcImageParaTypeInteger n, int mode);
885 extern floatVector** lmrcFSInfoScatteringAngularDistributionDivisionAverageDelR(mrcImage* fft, mrcImageParaTypeReal axis, mrcImageParaTypeInteger n, mrcImageParaTypeReal delR, int mode);
886 extern floatVector** lmrcFSInfoScatteringAngularDistributionDivisionSDDelR(mrcImage* fft, mrcImageParaTypeReal axis, mrcImageParaTypeInteger n, mrcImageParaTypeReal delR, int mode);
887 /* in mrcImageCheckSameSize.c */
888 extern void lmrcImageCheckSameSize(mrcImage* in, mrcImage* ref);
890 /* in mrcImageCheckFFT.c */
891 extern void lmrcImageCheckFFT(mrcImage* in, mrcImage* ref);
893 /* in lmrcImageSmoothing */
894 extern void lmrcImageSmoothingModeInfo(FILE* fpt);
895 extern void lmrcImageSmoothing(mrcImage* dst, mrcImage* src, lmrcImageSmoothingInfo* info, long mode);
897 /* in lmrcImageCVE */
898 extern void lmrcImageCVE(mrcImage* dst, mrcImage* src, lmrcImageCVEInfo* info);
900 /* in lmrcImageTfunction */
901 extern void lmrcImageTfunction(mrcImage* dst, mrcImage* src, lmrcImageTfunctionInfo* info, long mode);
903 /* in lmrcImageHighlighting */
904 extern void lmrcImageHighlightingInfoPrint(FILE* fpt);
905 extern void lmrcImageHighlighting(mrcImage* dst, mrcImage* src, lmrcImageHighlightInfo* info);
907 /* in lmrcImageLowPassFilter */
908 extern void lmrcImageLowPassFilter(mrcImage* dst, mrcImage* src, lmrcImageLowPassFilterInfo* info, long mode);
910 /* in lmrcImageHighPassFilter */
911 extern void lmrcImageHighPassFilter(mrcImage* dst, mrcImage* src, lmrcImageHighPassFilterInfo* info, long mode);
913 /* in lmrcImageBandPassFilter */
914 extern void lmrcImageBandPassFilter(mrcImage* dst, mrcImage* src, lmrcImageBandPassFilterInfo* info, long mode);
916 /* in lmrcImageShrink */
917 extern void lmrcImageShrink(mrcImage* dst, mrcImage* src, mrcImageParaTypeIntegerCoord S, long mode);
919 /* in lmrcImageShift */
920 extern void lmrcImageShift(mrcImage* out, mrcImage* in, mrcImageParaTypeRealCoord shift, mrcPixelDataHowToGet mode);
921 extern void lmrcImageShiftFollowingGC(mrcImage* out, mrcImage* in, int mode);
923 /* in mrcImagePrint */
924 extern void mrcInfoPrint(FILE* fpt, mrcImage* mrc, mrcImageParaTypeInteger mode);
929 /* in lmrcImageMultiCTFCompensation.c */
932 typedef enum lmrcImageMultiCTFCompensationSolventFlatteningMode {
933 lmrcImageMultiCTFCompensationSolventFlatteningModeDensityPeakIsSolvent=0,
934 lmrcImageMultiCTFCompensationSolventFlatteningModeDefinedSTDIsSolvent=1
935 } lmrcImageMultiCTFCompensationSolventFlatteningMode;
937 typedef struct lmrcImageMultiCTFCompensationInfo {
944 lmrcImageMultiCTFCompensationSolventFlatteningMode solventMode;
946 } lmrcImageMultiCTFCompensationInfo;
951 /* prototype begin */
953 extern void lmrcImageMultiCTFCompensationInfoInit(lmrcImageMultiCTFCompensationInfo* info);
954 extern void lmrcImageMultiCTFCompensationInfoSet(lmrcImageMultiCTFCompensationInfo* info);
955 extern void lmrcImageMultiCTFCompensation(mrcImage* dst, mrcImage* src, ctfInfo* ctf, long nfile, lmrcImageMultiCTFCompensationInfo info, long mode);
957 /* in lmrcImageCTFObservation.c */
958 extern void lmrcImageCTFObservation(mrcImage* dst, mrcImage* src, ctfInfo* ctf, long mode);
959 extern void lmrcImagesCTFObservation(mrcImage* dst, mrcImage* src, ctfInfo* ctf, long mode);
961 /* in lmrcImageCTFCompensation.c */
962 extern void lmrcImageCTFCompensation(mrcImage* src, ctfInfo* ctf, long mode);
967 /* in lmrcImageCTFSN.c */
969 typedef struct lmrcImageCTFSNInfo
971 long mode, deg1, deg2;
973 } lmrcImageCTFSNInfo;
976 /* prototype begin */
977 extern void lmrcImageCTFSN(mrcImage *outMrc, const mrcImage *inMrc, lmrcImageCTFSNInfo *info, long mode);
980 /* in lmrcImageFourierPowerSpectrum.c */
982 typedef struct mrcImageFourierPowerSpectrum
986 } mrcImageFourierPowerSpectrum;
988 typedef struct lmrcImageFourierPowerSpectrumInfo
991 } lmrcImageFourierPowerSpectrumInfo;
994 /* prototype begin */
996 extern mrcImageFourierPowerSpectrum lmrcImageFourierPowerSpectrumMakeSpectrum(const mrcImage *inFFT, lmrcImageFourierPowerSpectrumInfo *info);
997 extern void lmrcImageFourierPowerSpectrumDeleteSpectrum(mrcImageFourierPowerSpectrum theSpectrum);
998 extern mrcImageFourierPowerSpectrum lmrcImageFourierPowerSpectrum(const mrcImage *inMrc, lmrcImageFourierPowerSpectrumInfo *info, long mode);
1000 extern void lmrcImageRotation3DModePrint(FILE* fpt);
1001 extern void lmrcImageRotation3DFollowingEulerAngle(mrcImage* dst, mrcImage* src, const char* m,
1002 mrcImageParaTypeReal rot1, mrcImageParaTypeReal rot2, mrcImageParaTypeReal rot3, mrcPixelDataHowToGet mode, int mode2);
1004 #include "Matrix3D.h"
1005 extern void lmrcImageRotation3DFollowingMatrix3D(mrcImage* dst, mrcImage* src, Matrix3D mat, mrcPixelDataHowToGet mode, int mode2);
1007 extern void lmrcImageRotation3DZXY(mrcImage* dst, mrcImage* src,
1008 mrcImageParaTypeReal rotx, mrcImageParaTypeReal roty, mrcImageParaTypeReal rotz, mrcPixelDataHowToGet mode, int mode2);
1010 extern void lmrcImageRotation2D(mrcImage* dst, mrcImage* src, double angle, mrcPixelDataHowToGet mode);
1011 extern void lmrcImageRotation2DPeriodicBoundary(mrcImage* dst, mrcImage* src, double angle, mrcPixelDataHowToGet mode);
1013 /* in mrcImageSectionGet.c */
1014 extern char* mrcImageSectionGetModeDescription(long mode);
1015 extern void mrcImageSectionGet(mrcImage* dst, mrcImage* src, mrcImageParaTypeReal z, long mode);
1017 /* in mrcImageSectionSet.c */
1018 extern void mrcImageSectionSet(mrcImage* dst, mrcImage* src, mrcImageParaTypeReal z, long mode);
1020 extern double lmrcImageMaxDataGet(mrcImage* src, long mode);
1022 /* in lmrcImageStack.c */
1023 extern void lmrcImageStackAlloc(mrcImage* dst, mrcImage* src, int N, int* sp, int mode);
1024 extern void lmrcImageStackPush(mrcImage* dst, mrcImage* src, int* sp, int mode);
1032 #endif /* MRC_IMAGE_H */