OSDN Git Service

Fixed conflict
[eos/hostdependX86LINUX64.git] / include / pdbFile.h
1 #ifndef PDB_FILE_H
2 #define PDB_FILE_H
3 /*
4 # %M% %Y% %I%
5 # The latest update : %G% at %U%
6 #
7 #%Z% pdbFile.h ver %I%
8 #%Z% Created by tacyas
9 #%Z%
10 #%Z% Usage : pdbFile.h 
11 #%Z% Attention
12 #%Z%
13 */
14 #include <stdio.h>
15 #include "Matrix3D.h"
16 #include "mrcImage.h"
17
18 /* constant begin */
19 #define PDB_FILE_RECORD_FULL_LENGTH (80)
20 #define PDB_FILE_RECORD_START       (0)
21 #define PDB_FILE_RECORD_LENGTH      (6)
22 #define PDB_FILE_ATOM_NUMBER_START  (6)
23 #define PDB_FILE_ATOM_NUMBER_LENGTH (5)
24 #define PDB_FILE_ATOM_NAME_START    (12)
25 #define PDB_FILE_ATOM_NAME_LENGTH   (4)
26 #define PDB_FILE_LOCATION_START     (16)
27 #define PDB_FILE_LOCATION_LENGTH    (1)
28 #define PDB_FILE_RESIDUE_START      (17)
29 #define PDB_FILE_RESIDUE_LENGTH     (3)
30 #define PDB_FILE_CHAIN_IDENT_START  (21)
31 #define PDB_FILE_CHAIN_IDENT_LENGTH (1)
32 #define PDB_FILE_RESNUM_START       (22)
33 #define PDB_FILE_RESNUM_LENGTH      (4)
34 #define PDB_FILE_INSERTION_START    (26)
35 #define PDB_FILE_INSERTION_LENGTH   (1)
36 #define PDB_FILE_X_START            (30)
37 #define PDB_FILE_X_LENGTH           (8)
38 #define PDB_FILE_Y_START            (38)
39 #define PDB_FILE_Y_LENGTH           (8)
40 #define PDB_FILE_Z_START            (46)
41 #define PDB_FILE_Z_LENGTH           (8)
42 #define PDB_FILE_OCCUPANCY_START    (54)
43 #define PDB_FILE_OCCUPANCY_LENGTH   (6)
44 #define PDB_FILE_TEMPERATURE_START  (60)
45 #define PDB_FILE_TEMPERATURE_LENGTH (6)
46 #define PDB_FILE_FOOT_START         (67)
47 #define PDB_FILE_FOOT_LENGTH        (3)
48 #define PDB_FILE_FOOTNOTE_START     (70)
49 #define PDB_FILE_FOOTNOTE_LENGTH    (10)
50 #define MAX_RESIDUE_NUMBER          (20)
51 #define RESIDUE_ONECHAR_MODE        (1)
52 #define RESIDUE_THREECHAR_MODE      (3)
53 #define pdbRecordAtom       ("ATOM  ")
54 #define pdbRecordHeteroAtom ("HETATM")
55 #define pdbRecordHelix      ("HELIX ")
56 #define pdbRecordSheet      ("SHEET ")
57 #define pdbRecordTurn       ("TURN  ")
58 #define pdbRecordEnd        ("END   ")
59
60 /* constant end */
61
62 /* struct begin */
63 typedef char  pdbFileParaTypeCharacter;
64 typedef long  pdbFileParaTypeInteger;
65 typedef float pdbFileParaTypeReal;
66
67 typedef struct residueName {
68   char residueName3[4];
69   char residueName1[2];
70 } residueName;
71
72 typedef struct pdbCoord {
73   pdbFileParaTypeReal x;
74   pdbFileParaTypeReal y;
75   pdbFileParaTypeReal z;
76 } pdbCoord;
77
78 typedef enum pdbSecondaryStructureHelixClass {
79         HelixClassRightHandedAlpha = 1,
80         HelixClassRightHandedOmega = 2,
81         HelixClassRightHandedPi    = 3,
82         HelixClassRightHandedGammda= 4,
83         HelixClassRightHanded310   = 5,
84         HelixClassLeftHandedAlpha  = 6,
85         HelixClassLeftHandedOmega  = 7,
86         HelixClassLeftHandedGammda = 9,
87         HelixClassPolyProline      = 10,
88 } pdbSecondaryStructureHelixClass;
89
90 typedef struct pdbSecondaryStructureHelix {
91         int  serNum;            /* Serial Number */
92         char* helixID;          /* HelixID : Three alpahnumeric characters */
93 /* informtion for the initial residue */
94         char* initResName;/* Name of the initial residue : Three alpahnumeric characters */ 
95         char initChainID;       /* Chain identifier */ 
96         int  initSeqNum;    /* Sequence number of the initial residue */
97         char initICode; 
98 /* informtion for the terminal residue */
99         char* endResName;/* Name of the initial residue : Three alpahnumeric characters */ 
100         char endChainID;        /* Chain identifier */ 
101         int  endSeqNum;    /* Sequence number of the initial residue */
102         char endICode; 
103
104         pdbSecondaryStructureHelixClass helixClass;
105         char* comment; 
106         int  length;
107 } pdbSecondaryStructureHelix;
108
109 typedef struct pdbSecondaryStructureSheet {
110         int  strand;            /* Strand number which starts 1 for eache strand wihtin a sheet and increases by one */  
111         char* sheetID;    /* Sheet ID */                        
112         int  numStrands;    /* Number of strands in sheet */
113
114 /* initial residue */
115         char* initResName;/* Name of the initial residue : Three alpahnumeric characters */ 
116         char initChainID;       /* Chain identifier */ 
117         int  initSeqNum;    /* Sequence number of the initial residue */
118         char initICode; 
119
120 /* informtion for the terminal residue */
121         char* endResName;/* Name of the initial residue : Three alpahnumeric characters */ 
122         char endChainID;        /* Chain identifier */ 
123         int  endSeqNum;    /* Sequence number of the initial residue */
124         char endICode; 
125
126         int sense;  /* 0: first strand, 1: parallel, -1: anti-paralle */ 
127
128         char* curAtom; /* Registration. Atom name in current strand */
129         char* curResName; /* Registration. Residue name in current strand */
130         char curChainID; /* Registration. Chain ID in current strand */
131         int  curResSeq;  /* Registration. Res sequence in current strand */
132         char curICode;  /* Registration. Insertion code in current strand */
133
134         char* prevAtom; /* Registration. Atom name in current strand */
135         char* prevResName; /* Registration. Residue name in current strand */
136         char prevChainID; /* Registration. Chain ID in current strand */
137         int prevResSeq;  /* Registration. Res sequence in current strand */
138         char prevICode;  /* Registration. Insertion code in current strand */
139 }pdbSecondaryStructureSheet;
140
141
142 typedef struct pdbSecondaryStructureTurn {
143         int  serNum;            /* Serial Number */
144         char* turnID;           /* Turn ID : Three alpahnumeric characters */
145 /* informtion for the initial residue */
146         char* initResName;/* Name of the initial residue : Three alpahnumeric characters */ 
147         char initChainID;       /* Chain identifier */ 
148         int  initSeqNum;    /* Sequence number of the initial residue */
149         char initICode; 
150 /* informtion for the terminal residue */
151         char* endResName;/* Name of the initial residue : Three alpahnumeric characters */ 
152         char endChainID;        /* Chain identifier */ 
153         int  endSeqNum;    /* Sequence number of the initial residue */
154         char endICode; 
155
156         char* comment; 
157 }pdbSecondaryStructureTurn;
158
159 typedef struct pdbSecondaryStructureNo {
160         int   serNum;           /* Serial Number */
161         char* noID;         /* Turn ID : Three alpahnumeric characters */
162 /* informtion for the initial residue */
163         char* initResName;/* Name of the initial residue : Three alpahnumeric characters */ 
164         char initChainID;       /* Chain identifier */ 
165         int  initSeqNum;    /* Sequence number of the initial residue */
166         char initICode; 
167 /* informtion for the terminal residue */
168         char* endResName;/* Name of the initial residue : Three alpahnumeric characters */ 
169         char endChainID;        /* Chain identifier */ 
170         int  endSeqNum;    /* Sequence number of the initial residue */
171         char endICode; 
172
173         char* comment; 
174 }pdbSecondaryStructureNo;
175
176 typedef enum pdbFileSecondaryStructureMode {
177         pdbFileSecondaryStructureModeNo    = 0,
178         pdbFileSecondaryStructureModeHelix = 1,
179         pdbFileSecondaryStructureModeSheet = 2,
180         pdbFileSecondaryStructureModeTurn  = 3
181 } pdbFileSecondaryStructureMode;
182
183 typedef struct pdbFileSecondaryStructureRecord pdbFileSecondaryStructureRecord; 
184 struct pdbFileSecondaryStructureRecord {
185         pdbFileSecondaryStructureMode mode;
186         pdbSecondaryStructureHelix*   helix;
187         pdbSecondaryStructureSheet*   sheet;
188         pdbSecondaryStructureTurn*    turn;
189         pdbSecondaryStructureNo*      no;
190
191         pdbFileSecondaryStructureRecord* prev;
192         pdbFileSecondaryStructureRecord* next;
193 };
194
195 typedef struct pdbFileSecondaryStructure {
196         int nSecondaryStructure;
197         pdbFileSecondaryStructureRecord* top;
198         pdbFileSecondaryStructureRecord* SecondaryStructure; 
199 } pdbFileSecondaryStructure;
200
201 typedef struct pdbRecord pdbRecord;
202
203 struct pdbRecord {
204   pdbFileParaTypeCharacter FullRecord[PDB_FILE_RECORD_FULL_LENGTH+1];
205
206   pdbFileParaTypeCharacter Record[PDB_FILE_RECORD_LENGTH+1];
207
208 /* ATOM and HETATM Record */
209   pdbFileParaTypeInteger   AtomSerialNumber;
210   pdbFileParaTypeCharacter AtomName[PDB_FILE_ATOM_NAME_LENGTH+1];
211   pdbFileParaTypeCharacter LocationIndicator;
212   pdbFileParaTypeCharacter ResidueName[PDB_FILE_RESIDUE_LENGTH+1];
213   pdbFileParaTypeCharacter ChainIdentifier;
214   pdbFileParaTypeInteger   ResidueSequenceNumber;
215   pdbFileParaTypeCharacter InsertionCode;
216   pdbCoord                 Coord;
217   pdbFileParaTypeReal      Occupancy;
218   pdbFileParaTypeReal      TemperatureFactor;
219   pdbFileParaTypeInteger   FootnoteNumber;
220   pdbFileParaTypeCharacter Footnote[PDB_FILE_FOOTNOTE_LENGTH+1];
221
222   pdbRecord*               prev;
223   pdbRecord*               next;
224
225 };
226
227 typedef struct pdbFile {
228   pdbRecord* top;
229   pdbRecord* PDB;
230   pdbFileParaTypeInteger nAtom;
231   pdbFileSecondaryStructure second;
232 } pdbFile;
233 /* struct end */
234
235 #ifdef __cplusplus
236 extern "C" {
237 #endif
238
239 /* prototype begin */
240 extern void pdbFileRead(FILE* fpt, pdbFile* pdb);
241 extern void pdbFileWrite(FILE* fpt, pdbFile* pdb);
242
243 /*werewolf presents*/
244
245 extern void pdbFileTableWrite(FILE* fpt, pdbFile* pdb);
246
247 extern void pdbFileWriteSecondaryStructure(FILE* fpt, pdbFileSecondaryStructure* second);
248
249 extern void pdbMatrixFileFormat(FILE* fpt);
250 extern void pdbMatrixFileRead(FILE* fpt, Matrix3D Matrix);
251 extern void pdbMatrixFileWrite(FILE* fpt, Matrix3D Matrix);
252 extern void pdbTrans(pdbFile* pdb, Matrix3D Matrix);
253
254 extern void pdbFileResidueSequenceNumberIncrementAll(pdbFile* pdb, int n);
255 extern void pdbFileResidueSequenceNumberIncrement(pdbFile* pdb, int n);
256
257 extern void pdbFileChainIdentifierSetAll(pdbFile* pdb, unsigned char c);
258 extern void pdbFileChainIdentifierSet(pdbFile* pdb, unsigned char c);
259 extern unsigned char pdbFileChainIdentifierGet(pdbFile* pdb);
260
261 extern pdbFileParaTypeReal pdbFileTemperatureFactorGet(pdbFile* pdb);
262 extern void pdbFileTemperatureFactorSet(pdbFile* pdb, double temp);
263
264 extern pdbFileParaTypeReal pdbFileOccupancyGet(pdbFile* pdb);
265 extern void pdbFileOccupancySet(pdbFile* pdb, double temp);
266
267 extern long pdbFileCoordSet(pdbFile* pdb, pdbFileParaTypeReal x, pdbFileParaTypeReal y, pdbFileParaTypeReal z);
268
269 extern long pdbFileCoordGet(pdbFile* pdb, pdbFileParaTypeReal* x, pdbFileParaTypeReal* y, pdbFileParaTypeReal* z);
270 extern long pdbFileResidueSequenceNumberGet(pdbFile* pdb);
271 extern char* pdbFileResidueNameGet(pdbFile* pdb,int mode);
272
273 extern pdbRecord* pdbFileTop(pdbFile* pdb);
274 extern pdbRecord* pdbFileTopPointer(pdbFile* pdb);
275 extern pdbRecord* pdbFileNext(pdbFile* pdb);
276 extern pdbRecord* pdbFileNextAtom(pdbFile* pdb);
277 extern pdbRecord* pdbFileNextCA(pdbFile* pdb);
278 extern pdbRecord* pdbFilePrev(pdbFile* pdb);
279 extern pdbRecord* pdbFilePrevAtom(pdbFile* pdb);
280 extern pdbRecord* pdbFilePrevCA(pdbFile* pdb);
281 extern long pdbFileEnd(pdbFile* pdb);
282 extern long pdbFileGoToEnd(pdbFile* pdb);
283 extern long pdbFileIsEndLine(pdbFile* pdb);
284 extern long pdbFileIsAtom(pdbFile* pdb);
285 extern long pdbRecordIsNearby(pdbRecord record1,pdbRecord record2);
286 extern long pdbFileIsCA(pdbFile* pdb);
287 extern long pdbFileIsNegative(pdbFile* pdb);
288 extern long pdbFileIsPositive(pdbFile* pdb);
289 extern long pdbFileIsCharge(pdbFile* pdb);
290 extern long pdbFileIsSecondaryStructure(pdbFile* pdb);
291 extern long pdbFileIsHelix(pdbFile* pdb);
292 extern long pdbFileIsSheet(pdbFile* pdb);
293 extern long pdbFileIsTurn(pdbFile* pdb);
294 extern pdbRecord* pdbFileNew(pdbFile* pdb);
295 extern pdbRecord* pdbFileAppend(pdbFile* pdb);
296 extern pdbRecord* pdbFileFree(pdbFile* pdb);
297 extern pdbRecord* pdbFileRecordPrint(FILE* fpt, pdbFile* pdb);
298
299 extern pdbFileParaTypeInteger pdbZValueGet(pdbFile* pdb);
300 /*werewolf presented*/
301 extern pdbRecord* pdbFileRecordTablePrint(FILE* fpt, pdbFile* pdb);
302
303 extern pdbFileSecondaryStructureRecord* pdbFileSecondaryStructureRecordPrint(FILE* fpt, pdbFileSecondaryStructureRecord* second);
304 extern pdbRecord* pdbFileCAOnlyCopy(pdbFile* pdb, pdbFile* src);
305 extern void pdbFileCAOnlyCopyAll(pdbFile* pdb, pdbFile* src);
306 extern void pdbFileCopyAll(pdbFile* dst, pdbFile* src);
307 extern void pdbFileAppendAll(pdbFile* dst, pdbFile* src);
308 extern pdbRecord* pdbFileOneRecordCopy(pdbFile* dst, pdbFile* src);
309 extern void pdbFileOneProteinCopy(pdbFile* dst, pdbFile* src, long num);
310
311
312 extern void pdbRotationFollowingEulerAngle(pdbFile* pdb, char Mode[4], pdbFileParaTypeReal rot1, pdbFileParaTypeReal rot2, pdbFileParaTypeReal rot3);
313 extern void pdbRotationFollowingEulerAngleInverse(pdbFile* pdb, char Mode[4], pdbFileParaTypeReal rot1, pdbFileParaTypeReal rot2, pdbFileParaTypeReal rot3);
314 extern void pdbRotationXYZ(pdbFile* pdb, pdbFileParaTypeReal rotx, pdbFileParaTypeReal roty, pdbFileParaTypeReal rotz);
315 extern void pdbRotationZYX(pdbFile* pdb, pdbFileParaTypeReal rotx, pdbFileParaTypeReal roty, pdbFileParaTypeReal rotz);
316 extern void pdbRotationZXY(pdbFile* pdb, pdbFileParaTypeReal rotx, pdbFileParaTypeReal roty, pdbFileParaTypeReal rotz);
317 extern void pdbRotationYXZ(pdbFile* pdb, pdbFileParaTypeReal rotx, pdbFileParaTypeReal roty, pdbFileParaTypeReal rotz);
318
319 extern int pdbSecondaryStructureSetFromPDB(pdbFile* pdb, pdbFileSecondaryStructure* second);
320 extern int pdbNoSecondaryStructureSetFromPDB(pdbFile* pdb, pdbFileSecondaryStructure* second);
321 extern int pdbSecondaryStructureAppend(pdbFileSecondaryStructure* second);
322 extern pdbFileSecondaryStructureMode pdbFileWithSecondaryStructure(pdbFile* pdb, pdbFileSecondaryStructure* second);
323
324 /* prototype end */
325
326 #ifdef __cplusplus
327 }
328 #endif
329 #endif /* PDB_FILE_H */