IMP  2.0.0
The Integrative Modeling Platform
SpiderHeader.h
Go to the documentation of this file.
1 /**
2  * \file IMP/em/SpiderHeader.h
3  * \brief Header for Spider and Xmipp formats
4  *
5  * Copyright 2007-2013 IMP Inventors. All rights reserved.
6 */
7 
8 #ifndef IMPEM_SPIDER_HEADER_H
9 #define IMPEM_SPIDER_HEADER_H
10 
11 #include <ostream>
12 #include <IMP/em/em_config.h>
13 
14 IMPEM_BEGIN_NAMESPACE
15 
16 //! Header for Spider images. IMP-EM is designed to be compatible with it
17 struct SpiderHeader {
18 //! Number of slices (=1 for images)
19  float fNslice;
20  //! Number of rows
21  float fNrow;
22  //! Total number of records
23  float fNrec;
24  //! Auxiliary number used to compute the number of records
25  float fNlabel;
26  //! FILE TYPE SPECIFIER.
27  /**
28  * +3 FOR A 3-D FILE (FLOAT)
29  * +1 FOR A 2-D IMAGE (FLOAT)
30  * -1 FOR A 2-D FOURIER TRANSFORM
31  * -3 FOR A 3-D FOURIER TRANSFORM
32  * -5 FOR A NEW 2-D FOURIER TRANSFORM
33  * -7 FOR A NEW 3-D FOURIER TRANSFORM
34  * +8 FOR A 2-D EIGHT BIT IMAGE FILE
35  * +9 FOR A 2-D INT IMAGE FILE
36  * 10 FOR A 3-D INT IMAGE FILE
37  * 11 FOR A 2-D EIGHT BIT COLOR IMAGE FILE
38  **/
39  float fIform;
40  //! MAXIMUM/MINIMUM FLAG.
41  /** IS SET AT 0 WHEN THE FILE IS CREATED, AND AT 1 WHEN THE MAXIMUM AND
42  * MINIMUM HAVE BEEN COMPUTED, AND HAVE BEEN STORED
43  * INTO THIS LABEL RECORD (SEE FOLLOWING WORDS)
44  */
45  float fImami;
46  //! maximum value in the image
47  float fFmax;
48  //! minimum value in the image
49  float fFmin;
50  //! average value
51  float fAv;
52  //! Standard deviation. If -1 it means that it has no been computed
53  float fSig;
54  //! FLAG INDICATING IF THE HISTOGRAM HAS BE COMPUTED. NOT USED IN 3D FILES!
55  float fIhist; // It is obsolete in Spider
56  //! Number of columns
57  float fNcol;
58  //! number of records in file header (label)
59  float fLabrec;
60  //! flag that tilt angles are present.
61  float fIangle;
62  //! 1st Euler rotation angle (Rot) (ZYZ convention)
63  float fPhi;
64  //! 2nd Euler rotation angle (Tilt) (ZYZ convention)
65  float fTheta;
66  //! 3rd Euler rotation angle (Psi) (ZYZ convention)
67  float fPsi;
68  //! X TRANSLATION
69  float fXoff;
70  //! Y TRANSLATION
71  float fYoff;
72  //! Z TRANSLATION
73  float fZoff;
74  //! SCALE
75  float fScale;
76  //! Total number of bytes in the header
77  float fLabbyt;
78  //! RECORD LENGTH IN BYTES
79  float fLenbyt;
80  //! this is a Spider incongruence. 24 bytes without meaning
81  char fNothing[24];
82  //! THAT ANGLES ARE SET.
83  /**
84  * 1 = ONE ADDITIONAL
85  * ROTATION IS PRESENT, 2 = ADDITIONAL ROTATION
86  * THAT PRECEEDS THE ROTATION THAT WAS STORED IN
87  * 15 FOR DETAILS SEE MANUAL CHAPTER VOCEUL.MAN
88  */
89  float fFlag;
90  float fPhi1;
91  float fTheta1;
92  float fPsi1;
93  float fPhi2;
94  float fTheta2;
95  float fPsi2;
96  double fGeo_matrix[3][3]; //! x9 = 72 bytes: Geometric info
97  float fAngle1; //! angle info
98  float fr1;
99  float fr2; //! lift up cosine mask parameters
100  //! For Radon transforms
101  float RTflag; //! 1=RT, 2=FFT(RT)
102  float Astart;
103  float Aend;
104  float Ainc;
105  float Rsigma; //! 4*7 = 28 bytes
106  float Tstart;
107  float Tend;
108  float Tinc; //! 4*3 = 12, 12+28 = 40B
109  //! For Max-Likelihood refinement (Xmipp compatibility)
110  float Weight;
111  //! 0= no flipping , 1= flipping (Xmipp compatibility)
112  float Flip;
113  //! Empty field in the SPIDER header format.
114  /**
115  * Originally is 700 bytes long, but additional information has been added:
116  * empty 700-76-40=624-40-8= 576 bytes
117  */
118  char empty[576];
119  //! date
120  char szIDat[12];
121  //! time of creation
122  char szITim[8];
123  //! Title
124  char szITit[160];
125 
126  void show(std::ostream& out) const { out << "SpiderHeader"; }
127 };
128 
129 
130 IMPEM_END_NAMESPACE
131 
132 #endif /* IMPEM_SPIDER_HEADER_H */