OSDN Git Service

6eed6dd7b8a076310d0535ba24773eb70eba894f
[eos/optional.git] / doc / Objects / mrcImage.html
1 <HTML>
2 <HEAD>
3 <TITLE> mrcImage </TITLE>
4 </HEAD>
5 <BODY>
6 <H1> mrcImage </H1>
7 <H2> Concept </H2>
8         <A HREF="#include">mrcImage.h</A>
9 <H2> Data Structure </H2>
10 <H2> Member Function </H2>
11 <UL>
12 <LI> Momory Control for mrcImage <UL> 
13                 <LI>mrcInit
14                 <LI>mrcImageFree
15         </UL>
16 <LI> File Control for mrcImage-formatted file <UL>
17                 <LI>mrcFileRead <UL>
18                                 <DD> mrcHeaderRead and mrcImageRead     
19                                 <DD> No initialization is required.
20                         <LI>mrcImageRead
21                                 <DD> Read image following header information    
22                         <LI>mrcHeaderRead
23                 </UL>
24                 <LI>mrcFileWrite
25         </UL>
26
27         <LI> Subtration : in lmrcImageSubtraction.c <DL>
28                 <DT>lmrcImageSubtraction(mrcImage* out, mrcImage* in, double value);
29                         <DD>out := in  - 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); 
37                         <DD>out := in1 - in2        
38         </DL>
39         
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 
49         </DL>
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; 
56                         </UL>
57                         <DD>
58                 <DT>lmrcImageCorralation(mrcImage* out, mrcImage* in, mrcImage* ref, long mode);
59                         <DD>
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,
80                                 int mode)
81                         <DD> Auto Rotational correlation for many references.
82         </DL>
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
94                                 </UL>
95                         <LI> lmrcImageClusterMerge
96                         <LI> lmrcImageClusterAnalysisDistanceToLog(FILE* fpt, ...);     
97                                 <DD> Output the log file during analysis  
98                 </UL>
99         </UL>
100 </UL>
101 <HR>
102 <A NAME="Information">
103 <H2>Information from source codes</H2>
104 </A>
105 <PRE>
106 </PRE>
107 <HR>
108 <A NAME="include">
109 <H2>mrcImage.h</H2>
110 </A>
111 <PRE>
112 #ifndef MRC_IMAGE_H
113 #define MRC_IMAGE_H
114 /*
115 # %M% %Y% %I%
116 # The latest update : %G% at %U%
117 #
118 #%Z% mrcImage.h ver %I%
119 #%Z% Created by tacyas
120 #%Z%
121 #%Z% Usage : mrcImage.h 
122 #%Z% Attention
123 #%Z%
124 */
125
126 /* mrcImage.h
127 *    Language:   C or CC(c++)
128 *    Editor  :   tacyas.tkyemg.u_tokyo
129 *    Date    :   1990-1992
130 *    Modified:   2012 for CCP4(2000) 
131 */
132
133 /*        
134 *       Header File for MRC Format
135 *       Edited by Tac
136 */
137
138 #include <stdio.h>
139 #include <math.h>
140 #include "genUtil.h"
141 #include "Matrix3D.h"
142
143 /* struct begin */
144
145 /* Status Mask */
146 #ifdef M68
147 typedef unsigned int mrcStatusMask;  
148 #else
149 typedef unsigned int mrcStatusMask;
150 #endif
151
152 /* Status */
153 #ifdef M68
154 typedef unsigned int mrcStatusType;
155 #else
156 typedef unsigned int mrcStatusType;
157 #endif
158
159 /* struct end */
160
161 /* constant begin */
162
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)
179
180 #define  MRC_Status_OK              ((mrcStatusType)0x00000000L)
181
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)
188
189 #define  MRC_MemoryNotAllocate      ((mrcStatusType)0x00000000L|mrcStatusMask_ReferMemory)
190
191 #define  MRC_ModeNotSupported       ((mrcStatusType)0x00000000L|mrcStatusMask_Mode)
192 #define  MRC_ModeZNot1FFTMode       ((mrcStatusType)0x00000001L|mrcStatusMask_Mode)
193
194 #define  MRC_SizeOfZero             ((mrcStatusType)0x00000000L|mrcStatusMask_ReferMRCInfo)
195
196
197 extern char* mrcImageGeneralTypeList[];
198
199 /* constant end */
200
201 /* struct begin */
202 typedef union MRC_Status_t {
203     mrcStatusType all;
204     struct Content {
205 #ifdef M68
206         unsigned char level;
207         unsigned char category;
208         short detail;
209 #else
210         short detail;
211         unsigned char category;
212         unsigned char level;
213 #endif
214         } status;
215 } MRC_Status_t;
216
217 #ifdef M68
218 typedef int mrcImageParaTypeInteger;
219 #else
220 typedef int mrcImageParaTypeInteger;
221 #endif
222
223 typedef float mrcImageParaTypeReal;
224 typedef unsigned char mrcImageParaTypeCharacter;
225
226 typedef struct mrcImageParaTypeIntegerCoord {
227         mrcImageParaTypeInteger x;
228         mrcImageParaTypeInteger y;
229         mrcImageParaTypeInteger z;
230 } mrcImageParaTypeIntegerCoord;
231
232 typedef struct mrcImageParaTypeRealCoord {
233         mrcImageParaTypeReal x;
234         mrcImageParaTypeReal y;
235         mrcImageParaTypeReal z;
236 } mrcImageParaTypeRealCoord;
237 /* struct end */
238
239 /* 
240 *  MRC Image Header
241 *  Edited by Tac
242 */
243 /* Header Size */
244 /* constant begin */
245 #define MRC_HEADER (1024)
246 #define MRC_TAILER (1024)
247
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)
265
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)
272 // Change of IMOD 
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)
287
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)
292 /* constant end */
293
294 /* struct begin */
295
296 /* Image Header */
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];
319 } _mrcImageHeader;
320
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;
349
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 */
370         short                               nint;
371         short                               nreal; /*l Skew matrix S */
372         mrcImageParaTypeReal                extra2[5]; /* Extra, user defined storage space */
373         mrcImageParaTypeInteger             imodStamp;   
374         mrcImageParaTypeInteger             imodFlags;   
375         short                               idtype;   
376         short                               lnes;   
377         short                               nd1;   
378         short                               nd2;   
379         short                               vd1;   
380         short                               vd2;   
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;
391
392
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;
400 } mrcImageHeader;
401
402
403 #define FEI_EXTENDED_HEADER_EACH (128) 
404
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;
428
429 typedef union FEIextendedHeader {
430         mrcImageParaTypeReal Real[FEI_EXTENDED_HEADER_EACH/4];
431         _FEIextendedHeader   Cont;
432 } FEIextendedHeader;
433
434
435 /* struct end */
436
437 /*
438         Tailer
439 */
440 /* constant begin */
441 #define  mrcImageTailerMode2DProjection 0
442 /* constant end */
443
444 /* struct begin */
445 typedef struct _mrcImageTailer {
446         char                            Code[4]; 
447         mrcImageParaTypeInteger         Mode;  
448         char                        EulerAngleMode[4];
449         mrcImageParaTypeReal            Rot1;   
450         mrcImageParaTypeReal            Rot2;
451         mrcImageParaTypeReal            Rot3;
452         mrcImageParaTypeInteger         Mirror;
453 } _mrcImageTailer;
454
455
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;
461 } mrcImageTailer;
462
463
464 typedef char mrcImageSymmetryOperator;
465
466 /* 
467 mrcImage Structure 
468 */
469 typedef struct mrcImage {
470     mrcImageHeader          Header;
471     size_t BytePerImage;
472     mrcImageParaTypeInteger BytePerBand;
473     mrcImageParaTypeInteger BandPerPixel;
474     size_t PixelPerImage;
475     mrcStatusType           status;
476     char*           Image;
477     unsigned char*  ImageCharImage;
478     unsigned short* ImageShortImage;
479     unsigned long*  ImageLongImage;
480     float*          ImageFloatImage;
481     double*         ImageDoubleImage;
482
483         /* Tailer */
484         mrcImageTailer*         Tailer; 
485         mrcImageParaTypeInteger numTailer;
486
487         /* FEIextendedHeader */
488         FEIextendedHeader*      FEIHeader;
489         mrcImageParaTypeInteger numFEIHeader;
490
491         /* Dummy */
492         char*     dummyHeader;
493         mrcImageParaTypeInteger dummyHeaderByte;
494
495         /* Swap Bytes */
496         mrcImageParaTypeInteger flagByteSwap;
497
498         /* flag CCP4-2000 */
499         mrcImageParaTypeInteger   flagCCP4;
500         mrcImageParaTypeInteger   ImageOffset; 
501         mrcImageSymmetryOperator* SymmetryOperator;
502 } mrcImage;
503
504 typedef struct mrcImageInformation {
505     double mean;
506     double rootMeanSquare;
507     double meanOfSphereSurface;
508     double sdOfSphereSurface;
509     double seOfSphereSurface;
510     double meanOfCylinderSurface;
511     double sdOfCylinderSurface;
512     double seOfCylinderSurface;
513     double meanOfEdge;
514     double sdOfEdge;
515     double seOfEdge;
516     double max;
517         mrcImageParaTypeRealCoord maxCoord;
518     double min;
519         mrcImageParaTypeRealCoord minCoord;
520     double sd;
521     double se;
522         double rmax;
523         long flagrmax;
524         double RMS; /* Root mean square */
525         int mode;
526
527         /* For Search Area */
528         int flagXrange;
529         int flagYrange;
530         int flagZrange;
531         double XrangeMin; 
532         double XrangeMax; 
533         double YrangeMin; 
534         double YrangeMax; 
535         double ZrangeMin; 
536         double ZrangeMax; 
537
538         int flagCentre;
539         double CentreX;
540         double CentreY;
541         double CentreZ;
542 } mrcImageInformation;
543
544 /* struct end */
545
546 /* constant begin */
547 typedef enum mrcImageInformationMode {
548         meanOfAll             = 0,
549     meanOfSphereSurface   = 1,
550     meanOfCylinderSurface = 2,
551     meanOfEdge            = 3, 
552     meanOfCentre          = 4,
553     meanOfSparse          = 5,
554         meanOf2DEdgeY         = 6,
555         RMSofAllPixels       = 7
556 } mrcImageInformationMode;
557
558 /* 
559 *  Define
560 */
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
583
584 typedef enum mrcPixelDataType {
585     mrcPixelRePart = 0,
586     mrcPixelImPart,
587     mrcPixelMag,
588     mrcPixelPow,
589     mrcPixelLogMag,
590     mrcPixelLogPow,
591     mrcPixelPhase
592 } mrcPixelDataType;
593
594 typedef enum mrcPixelDataHowToGet {
595     mrcPixelHowNearest = 0,
596     mrcPixelHowLinear,
597     mrcPixelHowCubicConv,
598     mrcPixelHowPolySig
599 } mrcPixelDataHowToGet;
600
601 /* constant end */
602
603 /* struct begin */
604 typedef struct lmrcImageSmoothingInfo  {
605         long mode;
606         mrcImageParaTypeReal sx; /* Filter kernel size */
607         mrcImageParaTypeReal sy;
608         mrcImageParaTypeReal sz;
609         double sigma;            /* for Lee-Sigma filter  */
610 } lmrcImageSmoothingInfo;
611
612 typedef struct lmrcImageCVEInfo {
613         long sx; /* CVE domain size. */
614         long sy; /* Apr.30,1996 */
615         long sz;
616 } lmrcImageCVEInfo;
617
618 typedef struct lmrcImageTfunctionInfo {
619         long sx; /* Tfunction domain size. */
620         long sy; /* June 11,1996 */
621         long sz;
622 } lmrcImageTfunctionInfo;
623
624 typedef struct lmrcImageHighlightInfo {
625         long mode;
626         float Bias; /* May 1,1996 */
627         float Grad;
628 } lmrcImageHighlightInfo;
629
630 typedef struct lmrcImageLowPassFilterInfo 
631 {
632         long mode; /* June 4,1996 */
633         float hvp, width;
634 } lmrcImageLowPassFilterInfo;
635
636 typedef struct lmrcImageHighPassFilterInfo 
637 {
638         long mode; /* June 5,1996 */
639         float hvp, width;
640         float pathWindowLow;
641         float pathWindowHigh;
642 } lmrcImageHighPassFilterInfo;
643
644 typedef struct lmrcImageBandPassFilterInfo 
645 {
646         long mode; /* June 5,1996 */
647         float hvl, hvh, wl, wh;
648         int flagLowWeight;
649         double lowWeight;
650 } lmrcImageBandPassFilterInfo;
651
652 /* struct end */
653 /* Utility Routines */
654 #ifdef __cplusplus
655 extern "C" {
656 #endif
657 /* prototype begin */
658 /* in mrcInit.c */
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);
664 /* in mrcTailer.c */
665 extern void mrcTailerInit(mrcImage* mrc, long mode);
666 extern void mrcTailerCopy(mrcImage* dst, mrcImage* src, long mode); 
667   /* mode 1: Tailer Memory Allocation */
668 /* in mrcRead.c */
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); 
674
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);
679
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);
684
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);
689
690 extern int mrcImageByteSwap(mrcImage* mrc, long mode);
691 /* in mrcWrite.c */
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)
696
697 #define mrcFileWriteMode_InfoPrint         1
698 #define mrcFileWriteMode_NoCallForStatData 2
699
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);
704 /* in mrcWrite.c */
705 extern mrcStatusType mrcFileWriteLowerResolution(mrcImage* mrc, char* filename, char* message, long sample , long mode);
706 /* in mrcGet.c */
707 extern double mrcImageDataGetbyAU(mrcImage* mrc,
708                               mrcImageParaTypeReal x /* Angstrom */,
709                               mrcImageParaTypeReal y /* Angstrom */,
710                               mrcImageParaTypeReal z /* Angstrom */,
711                               double* data,
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 */,
718                               double* data,
719                               mrcPixelDataType mode,
720                               mrcPixelDataHowToGet how);
721
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);
724
725 static inline double mrcPixelDataGetFloatImage(mrcImage* img, 
726                 mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z)
727 {
728         return img->ImageFloatImage[x + y*img->HeaderN.x + z*img->HeaderN.x*img->HeaderN.y];
729 }
730
731 static inline double mrcPixelDataGetFloatFTRe(mrcImage* fft, 
732                 mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z)
733 {
734         return fft->ImageFloatImage[2*(x + y*(fft->HeaderN.x/2+1) + z*(fft->HeaderN.x/2+1)*fft->HeaderN.y)];
735 }
736 static inline double mrcPixelDataGetFloatFTIm(mrcImage* fft, 
737                 mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z)
738 {
739         return fft->ImageFloatImage[2*(x + y*(fft->HeaderN.x/2+1) + z*(fft->HeaderN.x/2+1)*fft->HeaderN.y)+1];
740 }
741
742 /* in mrcImageSet.c */
743 extern void mrcInfoSet(mrcImage* mrc, FILE* fptIn, FILE* fptOut, mrcImageParaTypeInteger mode);
744
745 /* prototype end */
746
747 /* struct begin */
748 /* in mrcImageDataSet.c */
749 typedef enum mrcImageDataSetMode {
750         mrcImageDataSetModeCentre = 0,
751         mrcImageDataSetModeOrigin = 1
752 } mrcImageDataSetMode;
753 /* struct end */
754
755 /* prototype begin */
756 extern void mrcImageDataSet(mrcImage* out, 
757                                                         mrcImage* in, 
758                                                         mrcImageParaTypeReal x,
759                                                         mrcImageParaTypeReal y,
760                                                         mrcImageParaTypeReal z,
761                                                         float phi,
762                                                         mrcImageDataSetMode  mode);
763
764 /* in mrcSet.c */
765 extern double mrcImageDataSetbyAU(mrcImage* mrc,
766                               mrcImageParaTypeReal x /* Angstrom */,
767                               mrcImageParaTypeReal y /* Angstrom */,
768                               mrcImageParaTypeReal z /* Angstrom */,
769                               double data,
770                               mrcPixelDataType mode);
771 extern double mrcPixelDataSet(mrcImage* mrc,
772                               mrcImageParaTypeReal x /* Pixel Unit */,
773                               mrcImageParaTypeReal y /* Pixel Unit */,
774                               mrcImageParaTypeReal z /* Pixel Unit */,
775                               double data,
776                               mrcPixelDataType mode);
777
778 static inline void mrcPixelDataSetFloatImage(mrcImage* img, 
779                 mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z, double data)
780 {
781         img->ImageFloatImage[x + y*img->HeaderN.x + z*img->HeaderN.x*img->HeaderN.y] = (float)data;
782 }
783
784 static inline void mrcPixelDataSetFloatFTRe(mrcImage* fft, 
785                 mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z, double data)
786 {
787         fft->ImageFloatImage[2*(x + y*(fft->HeaderN.x/2+1) + z*(fft->HeaderN.x/2+1)*fft->HeaderN.y)] = (float)data;
788 }
789
790 static inline void mrcPixelDataSetFloatFTIm(mrcImage* fft, 
791                 mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z, double data)
792 {
793         fft->ImageFloatImage[2*(x + y*(fft->HeaderN.x/2+1) + z*(fft->HeaderN.x/2+1)*fft->HeaderN.y)+1] = (float)data;
794 }
795
796
797 extern void mrcStatDataSet(mrcImage* mrc, mrcImageParaTypeInteger mode);
798
799
800
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);
810         /* Histgram */
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);
815         /* Frequency */ 
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);
820
821
822 /* in mrcImageCopy.c */
823 extern void lmrcImageCopy(mrcImage* dst, mrcImage* src, mrcImageParaTypeRealCoord to);
824
825 /* in mrcUtil.c */
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);
832
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);
848
849 /* in mrcImageToIntImage.c */
850 extern void lmrcImageToIntImage(mrcImage* dst, mrcImage* src, mrcImageParaTypeInteger mode);
851
852
853 extern void lfft2d(mrcImage* fft, mrcImage* img);
854
855 extern void lmrcImageFFT(mrcImage* fft, mrcImage* img, long mode);
856 extern void lmrcImageFFTFirstDimensionOnly(mrcImage* fft, mrcImage* img, long mode);
857 #ifdef FFTW
858 extern void lmrcImageFFTWFlagSet(unsigned int flag);
859 #endif
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);
864
865 #include "ctfInfo.h"
866 extern void lmrcImageCorrelationWithCTFCompensation(mrcImage* out, mrcImage* in, ctfInfo* inctf, mrcImage* ref, ctfInfo* refctf, long mode);
867
868
869 /* in mrcError.c */
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 */
873 #include "Vector.h"
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);
889
890 /* in mrcImageCheckFFT.c */
891 extern void lmrcImageCheckFFT(mrcImage* in, mrcImage* ref);
892
893 /* in lmrcImageSmoothing */
894 extern void lmrcImageSmoothingModeInfo(FILE* fpt);
895 extern void lmrcImageSmoothing(mrcImage* dst, mrcImage* src, lmrcImageSmoothingInfo* info, long mode);
896
897 /* in lmrcImageCVE */
898 extern void lmrcImageCVE(mrcImage* dst, mrcImage* src, lmrcImageCVEInfo* info);
899
900 /* in lmrcImageTfunction */
901 extern void lmrcImageTfunction(mrcImage* dst, mrcImage* src, lmrcImageTfunctionInfo* info, long mode);
902
903 /* in lmrcImageHighlighting */
904 extern void lmrcImageHighlightingInfoPrint(FILE* fpt);
905 extern void lmrcImageHighlighting(mrcImage* dst, mrcImage* src, lmrcImageHighlightInfo* info);
906
907 /* in lmrcImageLowPassFilter */
908 extern void lmrcImageLowPassFilter(mrcImage* dst, mrcImage* src, lmrcImageLowPassFilterInfo* info, long mode);
909
910 /* in lmrcImageHighPassFilter */
911 extern void lmrcImageHighPassFilter(mrcImage* dst, mrcImage* src, lmrcImageHighPassFilterInfo* info, long mode);
912
913 /* in lmrcImageBandPassFilter */
914 extern void lmrcImageBandPassFilter(mrcImage* dst, mrcImage* src, lmrcImageBandPassFilterInfo* info, long mode);
915
916 /* in lmrcImageShrink */
917 extern void lmrcImageShrink(mrcImage* dst, mrcImage* src, mrcImageParaTypeIntegerCoord S, long mode);
918
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);
922
923 /* in mrcImagePrint */
924 extern  void mrcInfoPrint(FILE* fpt, mrcImage* mrc, mrcImageParaTypeInteger mode);
925
926
927 /* prototype end */
928
929 /* in lmrcImageMultiCTFCompensation.c */
930 /* struct begin */
931 #include "ctfInfo.h"
932 typedef enum lmrcImageMultiCTFCompensationSolventFlatteningMode {
933         lmrcImageMultiCTFCompensationSolventFlatteningModeDensityPeakIsSolvent=0,
934         lmrcImageMultiCTFCompensationSolventFlatteningModeDefinedSTDIsSolvent=1
935 } lmrcImageMultiCTFCompensationSolventFlatteningMode;
936
937 typedef struct lmrcImageMultiCTFCompensationInfo {
938         long   maxiteration;
939         double okrms;
940         long   diversefactor;
941         double z;
942         long   nhist;
943         FILE*  logfile;
944         lmrcImageMultiCTFCompensationSolventFlatteningMode solventMode;
945         float  definedSTD;              
946 } lmrcImageMultiCTFCompensationInfo;
947 /* struct end */
948
949 #include "ctfInfo.h"
950
951 /* prototype begin */
952
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);
956
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);
960
961 /* in lmrcImageCTFCompensation.c */
962 extern void lmrcImageCTFCompensation(mrcImage* src, ctfInfo* ctf, long mode);
963
964 /* prototype end */
965
966
967 /* in lmrcImageCTFSN.c */
968 /* struct begin */
969 typedef struct lmrcImageCTFSNInfo
970 {
971         long mode, deg1, deg2;
972         ctfInfo ctf;
973 } lmrcImageCTFSNInfo;
974 /* struct end */
975
976 /* prototype begin */
977 extern void lmrcImageCTFSN(mrcImage *outMrc, const mrcImage *inMrc, lmrcImageCTFSNInfo *info, long mode);
978 /* prototype end */
979
980 /* in lmrcImageFourierPowerSpectrum.c */
981 /* struct begin */
982 typedef struct mrcImageFourierPowerSpectrum
983 {
984         long n;
985         double d, *h;
986 } mrcImageFourierPowerSpectrum;
987
988 typedef struct lmrcImageFourierPowerSpectrumInfo
989 {
990         double dX, dY, dZ;
991 } lmrcImageFourierPowerSpectrumInfo;
992 /* struct end */
993
994 /* prototype begin */
995
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);
999
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);
1003
1004 #include "Matrix3D.h"
1005 extern void lmrcImageRotation3DFollowingMatrix3D(mrcImage* dst, mrcImage* src, Matrix3D mat, mrcPixelDataHowToGet mode, int mode2);
1006
1007 extern void lmrcImageRotation3DZXY(mrcImage* dst, mrcImage* src,  
1008         mrcImageParaTypeReal rotx, mrcImageParaTypeReal roty, mrcImageParaTypeReal rotz, mrcPixelDataHowToGet mode, int mode2);
1009
1010 extern void lmrcImageRotation2D(mrcImage* dst, mrcImage* src, double angle, mrcPixelDataHowToGet mode);
1011 extern void lmrcImageRotation2DPeriodicBoundary(mrcImage* dst, mrcImage* src, double angle, mrcPixelDataHowToGet mode);
1012
1013 /* in mrcImageSectionGet.c */
1014 extern char* mrcImageSectionGetModeDescription(long mode);
1015 extern void mrcImageSectionGet(mrcImage* dst, mrcImage* src, mrcImageParaTypeReal z, long mode);
1016
1017 /* in mrcImageSectionSet.c */
1018 extern void mrcImageSectionSet(mrcImage* dst, mrcImage* src, mrcImageParaTypeReal z, long mode);
1019
1020 extern double lmrcImageMaxDataGet(mrcImage* src, long mode);
1021
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);
1025
1026 /* prototype end */
1027
1028 #ifdef __cplusplus
1029 };
1030 #endif
1031
1032 #endif  /* MRC_IMAGE_H */
1033 </PRE>
1034 </HTML>
1035 </HEAD>