「pdbFile(API)」の版間の差分
|  (→API) |  (→PDBデータ処理) | ||
| (同じ利用者による、間の44版が非表示) | |||
| 行1: | 行1: | ||
| − | DataManip/'''pdbFile'''は[[PDB]] | + | DataManip/'''pdbFile'''は[[PDB]]ファイルを取り扱うための[[API]]です。 | 
| == 定数 == | == 定数 == | ||
| + | === [[PDB]]ファイルでの構文 === | ||
| + | ==== 文字数定義 ==== | ||
|   #define PDB_FILE_RECORD_FULL_LENGTH (80) |   #define PDB_FILE_RECORD_FULL_LENGTH (80) | ||
|   #define PDB_FILE_RECORD_START       (0) |   #define PDB_FILE_RECORD_START       (0) | ||
| 行36: | 行38: | ||
|   #define RESIDUE_ONECHAR_MODE        (1) |   #define RESIDUE_ONECHAR_MODE        (1) | ||
|   #define RESIDUE_THREECHAR_MODE      (3) |   #define RESIDUE_THREECHAR_MODE      (3) | ||
| + | |||
| + | ==== 文字列定義 ==== | ||
|   #define pdbRecordAtom       ("ATOM  ") |   #define pdbRecordAtom       ("ATOM  ") | ||
|   #define pdbRecordHeteroAtom ("HETATM") |   #define pdbRecordHeteroAtom ("HETATM") | ||
| 行43: | 行47: | ||
|   #define pdbRecordEnd        ("END   ") |   #define pdbRecordEnd        ("END   ") | ||
| − | ==  | + | === 残基名 === | 
| − | + | residueName3: 3文字表記, residueName1: 1文字表記 | |
| − | + | ||
| − | + | ||
| − | + | ||
|   typedef struct residueName { |   typedef struct residueName { | ||
|     char residueName3[4]; |     char residueName3[4]; | ||
|     char residueName1[2]; |     char residueName1[2]; | ||
|   } residueName; |   } residueName; | ||
| + | ヘッダファイルには構造体のみ定義して、残基名は/pdbFile/src/pdbGet.cで定義しています。 | ||
| + |  static residueName residue[MAX_RESIDUE_NUMBER] = {  | ||
| + |  "ALA","A", "VAL","V", "PHE","F", "PRO","P", | ||
| + |  "MET","M", "ILE","I", "LEU","L", "ASP","D", | ||
| + |  "GLU","E", "LYS","K", "ARG","R", "SER","S", | ||
| + |  "THR","T", "TYR","Y", "HIS","H", "CYS","C", | ||
| + |  "ASN","N", "GLN","Q", "TRP","W", "GLY","G" | ||
| + |  }; | ||
| + | <table border="1"> | ||
| + | 	<tr>  | ||
| + | 		<th>要素No.</th>  | ||
| + | 		<th>residueName3</th>  | ||
| + | 		<th>residueName1</th>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>0</td>  | ||
| + | 		<td>ALA</td>  | ||
| + | 		<td>A</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>1</td>  | ||
| + | 		<td>VAL</td>  | ||
| + | 		<td>V</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>2</td>  | ||
| + | 		<td>PHE</td>  | ||
| + | 		<td>F</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>3</td>  | ||
| + | 		<td>PRO</td>  | ||
| + | 		<td>P</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>4</td>  | ||
| + | 		<td>MET</td>  | ||
| + | 		<td>M</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>5</td>  | ||
| + | 		<td>ILE</td>  | ||
| + | 		<td>I</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>6</td>  | ||
| + | 		<td>LEU</td>  | ||
| + | 		<td>L</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>7</td>  | ||
| + | 		<td>ASP</td>  | ||
| + | 		<td>D</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>8</td>  | ||
| + | 		<td>GLU</td>  | ||
| + | 		<td>E</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>9</td>  | ||
| + | 		<td>LYS</td>  | ||
| + | 		<td>K</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>10</td>  | ||
| + | 		<td>ARG</td>  | ||
| + | 		<td>R</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>11</td>  | ||
| + | 		<td>SER</td>  | ||
| + | 		<td>S</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>12</td>  | ||
| + | 		<td>THR</td>  | ||
| + | 		<td>T</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>13</td>  | ||
| + | 		<td>TYR</td>  | ||
| + | 		<td>Y</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>14</td>  | ||
| + | 		<td>HIS</td>  | ||
| + | 		<td>H</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>15</td>  | ||
| + | 		<td>CYS</td>  | ||
| + | 		<td>C</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>16</td>  | ||
| + | 		<td>ASN</td>  | ||
| + | 		<td>N</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>17</td>  | ||
| + | 		<td>GLN</td>  | ||
| + | 		<td>Q</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>18</td>  | ||
| + | 		<td>TRP</td>  | ||
| + | 		<td>W</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>19</td>  | ||
| + | 		<td>GLY</td>  | ||
| + | 		<td>G</td>  | ||
| + | 	</tr>   | ||
| + | </table> | ||
| + | <br> | ||
| − | + | === 二次構造 === | |
| − |   typedef  | + | ==== 二次構造のモード ==== | 
| − | + |   typedef enum pdbFileSecondaryStructureMode { | |
| − | + |  	pdbFileSecondaryStructureModeNo    = 0, | |
| − | + |  	pdbFileSecondaryStructureModeHelix = 1, | |
| − |   }  | + |  	pdbFileSecondaryStructureModeSheet = 2, | 
| + |  	pdbFileSecondaryStructureModeTurn  = 3 | ||
| + |   } pdbFileSecondaryStructureMode; | ||
| + | ==== ヘリックス構造 ==== | ||
|   typedef enum pdbSecondaryStructureHelixClass { |   typedef enum pdbSecondaryStructureHelixClass { | ||
|   	HelixClassRightHandedAlpha = 1, |   	HelixClassRightHandedAlpha = 1, | ||
| 行72: | 行192: | ||
|   } pdbSecondaryStructureHelixClass; |   } pdbSecondaryStructureHelixClass; | ||
| + | == 構造体 == | ||
| + | === 管理データ === | ||
| + | PDBデータ及びその二次構造データを管理する構造体です。 | ||
| + |  typedef struct pdbFile { | ||
| + |    pdbRecord* top; | ||
| + |    pdbRecord* PDB; | ||
| + |    pdbFileParaTypeInteger nAtom; | ||
| + |    pdbFileSecondaryStructure second; | ||
| + |  } pdbFile; | ||
| + | <table border="1"> | ||
| + | 	<tr>  | ||
| + | 		<th>メンバ</th>  | ||
| + | 		<th>説明</th>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>top</td>  | ||
| + | 		<td>先頭のPDBデータ(ポインタ)</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>PDB</td>  | ||
| + | 		<td>現在のPDBデータ(ポインタ)</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>nAtom</td>  | ||
| + | 		<td>PDBデータ数</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>second</td>  | ||
| + | 		<td>二次構造データ</td>  | ||
| + | 	</tr>  | ||
| + | </table> | ||
| + | <br> | ||
| + | |||
| + | ==== 二次構造管理データ ==== | ||
| + |  typedef struct pdbFileSecondaryStructure { | ||
| + |  	int nSecondaryStructure; | ||
| + |  	pdbFileSecondaryStructureRecord* top; | ||
| + |  	pdbFileSecondaryStructureRecord* SecondaryStructure;  | ||
| + |  } pdbFileSecondaryStructure; | ||
| + | <table border="1"> | ||
| + | 	<tr>  | ||
| + | 		<th>メンバ</th>  | ||
| + | 		<th>説明</th>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>nSecondaryStructure</td>  | ||
| + | 		<td>二次構造データ数</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>top</td>  | ||
| + | 		<td>先頭の二次構造データ(ポインタ)</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>SecondaryStructure</td>  | ||
| + | 		<td>現在の二次構造データ(ポインタ)</td>  | ||
| + | 	</tr>  | ||
| + | </table> | ||
| + | <br> | ||
| + | |||
| + | === PDBデータ === | ||
| + | [[PDB]]データが格納されている構造体です。リスト構造で管理し、PDBファイル一行分のデータに対応しています。 | ||
| + |  typedef struct pdbRecord pdbRecord; | ||
| + | |||
| + |  struct pdbRecord { | ||
| + |    pdbFileParaTypeCharacter FullRecord[PDB_FILE_RECORD_FULL_LENGTH+1]; | ||
| + | |||
| + |    pdbFileParaTypeCharacter Record[PDB_FILE_RECORD_LENGTH+1]; | ||
| + | |||
| + |  /* ATOM and HETATM Record */ | ||
| + |    pdbFileParaTypeInteger   AtomSerialNumber; | ||
| + |    pdbFileParaTypeCharacter AtomName[PDB_FILE_ATOM_NAME_LENGTH+1]; | ||
| + |    pdbFileParaTypeCharacter LocationIndicator; | ||
| + |    pdbFileParaTypeCharacter ResidueName[PDB_FILE_RESIDUE_LENGTH+1]; | ||
| + |    pdbFileParaTypeCharacter ChainIdentifier; | ||
| + |    pdbFileParaTypeInteger   ResidueSequenceNumber; | ||
| + |    pdbFileParaTypeCharacter InsertionCode; | ||
| + |    pdbCoord                 Coord; | ||
| + |    pdbFileParaTypeReal      Occupancy; | ||
| + |    pdbFileParaTypeReal      TemperatureFactor; | ||
| + |    pdbFileParaTypeInteger   FootnoteNumber; | ||
| + |    pdbFileParaTypeCharacter Footnote[PDB_FILE_FOOTNOTE_LENGTH+1]; | ||
| + | |||
| + |    pdbRecord*               prev; | ||
| + |    pdbRecord*               next; | ||
| + |  }; | ||
| + | <table border="1"> | ||
| + | 	<tr>  | ||
| + | 		<th>メンバ</th>  | ||
| + | 		<th>説明</th>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>FullRecord</td>  | ||
| + | 		<td>一行分のPDBデータ</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>Record</td>  | ||
| + | 		<td>原子情報としての一行分のPDBデータ</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>AtomSerialNumber</td>  | ||
| + | 		<td></td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>AtomName</td>  | ||
| + | 		<td>原子名</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>LocationIndicator</td>  | ||
| + | 		<td></td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>ResidueName</td>  | ||
| + | 		<td>残基名</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>ChainIdentifier</td>  | ||
| + | 		<td>Chain ID</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>ResidueSequenceNumber</td>  | ||
| + | 		<td>残基配列番号</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>InsertionCode</td>  | ||
| + | 		<td></td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>Coord</td>  | ||
| + | 		<td>原子の座標</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>Occupancy</td>  | ||
| + | 		<td>占有率</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>TemperatureFactor</td>  | ||
| + | 		<td>温度因子</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>FootnoteNumber</td>  | ||
| + | 		<td></td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>Footnote</td>  | ||
| + | 		<td></td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>prev</td>  | ||
| + | 		<td>前データ</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>next</td>  | ||
| + | 		<td>次データ</td>  | ||
| + | 	</tr>  | ||
| + | </table> | ||
| + | <br> | ||
| + | |||
| + |  typedef char  pdbFileParaTypeCharacter; | ||
| + |  typedef long  pdbFileParaTypeInteger; | ||
| + |  typedef float pdbFileParaTypeReal; | ||
| + | |||
| + | PDBデータの座標 | ||
| + |  typedef struct pdbCoord { | ||
| + |    pdbFileParaTypeReal x; | ||
| + |    pdbFileParaTypeReal y; | ||
| + |    pdbFileParaTypeReal z; | ||
| + |  } pdbCoord; | ||
| + | |||
| + | === 二次構造 === | ||
| + | 二次構造データが格納されている構造体です。リスト構造で管理し、二次構造一行分のデータに対応しています。 | ||
| + |  typedef struct pdbFileSecondaryStructureRecord pdbFileSecondaryStructureRecord;  | ||
| + |  struct pdbFileSecondaryStructureRecord { | ||
| + |  	pdbFileSecondaryStructureMode mode; | ||
| + |  	pdbSecondaryStructureHelix*   helix; | ||
| + |  	pdbSecondaryStructureSheet*   sheet; | ||
| + |  	pdbSecondaryStructureTurn*    turn; | ||
| + |  	pdbSecondaryStructureNo*      no; | ||
| + | |||
| + |  	pdbFileSecondaryStructureRecord* prev; | ||
| + |  	pdbFileSecondaryStructureRecord* next; | ||
| + |  }; | ||
| + | <table border="1"> | ||
| + | 	<tr>  | ||
| + | 		<th>メンバ</th>  | ||
| + | 		<th>説明</th>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>mode</td>  | ||
| + | 		<td>二次構造のモード</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>helix</td>  | ||
| + | 		<td>ヘリックス構造のデータ</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>sheet</td>  | ||
| + | 		<td>シート構造のデータ</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>turn</td>  | ||
| + | 		<td>ターン構造のデータ</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>no</td>  | ||
| + | 		<td>二次構造なしのデータ</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>prev</td>  | ||
| + | 		<td>前データ</td>  | ||
| + | 	</tr>  | ||
| + | 	<tr>  | ||
| + | 		<td>next</td>  | ||
| + | 		<td>次データ</td>  | ||
| + | 	</tr>  | ||
| + | </table> | ||
| + | <br> | ||
| + | |||
| + | ==== ヘリックス構造 ==== | ||
|   typedef struct pdbSecondaryStructureHelix { |   typedef struct pdbSecondaryStructureHelix { | ||
|   	int  serNum;     	/* Serial Number */ |   	int  serNum;     	/* Serial Number */ | ||
| 行91: | 行429: | ||
|   } pdbSecondaryStructureHelix; |   } pdbSecondaryStructureHelix; | ||
| + | ==== シート構造 ==== | ||
|   typedef struct pdbSecondaryStructureSheet { |   typedef struct pdbSecondaryStructureSheet { | ||
|   	int  strand; 		/* Strand number which starts 1 for eache strand wihtin a sheet and increases by one */    |   	int  strand; 		/* Strand number which starts 1 for eache strand wihtin a sheet and increases by one */    | ||
| 行122: | 行461: | ||
|   	char prevICode;  /* Registration. Insertion code in current strand */ |   	char prevICode;  /* Registration. Insertion code in current strand */ | ||
|   }pdbSecondaryStructureSheet; |   }pdbSecondaryStructureSheet; | ||
| − | + | ||
| + | ==== ターン構造 ==== | ||
|   typedef struct pdbSecondaryStructureTurn { |   typedef struct pdbSecondaryStructureTurn { | ||
|   	int  serNum;     	/* Serial Number */ |   	int  serNum;     	/* Serial Number */ | ||
| 行140: | 行480: | ||
|   }pdbSecondaryStructureTurn; |   }pdbSecondaryStructureTurn; | ||
| + | ==== 二次構造なし ==== | ||
|   typedef struct pdbSecondaryStructureNo { |   typedef struct pdbSecondaryStructureNo { | ||
|   	int   serNum;     	/* Serial Number */ |   	int   serNum;     	/* Serial Number */ | ||
| 行156: | 行497: | ||
|   	char* comment;   |   	char* comment;   | ||
|   }pdbSecondaryStructureNo; |   }pdbSecondaryStructureNo; | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| == API == | == API == | ||
| − | === | + | === ファイル管理 === | 
| + | ==== 読み出し ==== | ||
| + | ファイルfptから読み出したデータを管理データpdbへ格納します。 | ||
|   extern void pdbFileRead(FILE* fpt, pdbFile* pdb); |   extern void pdbFileRead(FILE* fpt, pdbFile* pdb); | ||
| − | === | + | ==== 書き込み ==== | 
| + | 管理データpdbを[[PDB]]形式でファイルfptへ書き込みます。(pdbFileRecordPrintを繰り返して使用) | ||
|   extern void pdbFileWrite(FILE* fpt, pdbFile* pdb); |   extern void pdbFileWrite(FILE* fpt, pdbFile* pdb); | ||
| − | + | 管理データpdbをtsv形式でファイルfptへ書き込みます。(pdbFileRecordTablePrintを繰り返して使用) | |
| + |  extern void pdbFileTableWrite(FILE* fpt, pdbFile* pdb);  | ||
| + | 管理データpdbから座標リストのみをファイルfptへ書き込みます。 | ||
|   extern void pdbFileWriteCoord(FILE* fpt, pdbFile* pdb); |   extern void pdbFileWriteCoord(FILE* fpt, pdbFile* pdb); | ||
| === PDBデータ処理 === | === PDBデータ処理 === | ||
| ==== 新規作成 ==== | ==== 新規作成 ==== | ||
| − | pdb-> | + | pdb->PDBに新規データを作成します。<br> | 
| − | + | メモリを確保して新規データを作り、先頭データとして、前、次のデータはNULLとします。 | |
|   extern pdbRecord* pdbFileNew(pdbFile* pdb); |   extern pdbRecord* pdbFileNew(pdbFile* pdb); | ||
| ==== 追加 ==== | ==== 追加 ==== | ||
| − | pdb-> | + | pdb->PDBのデータの後に新規データを追加します。<br> | 
| − | + | メモリを確保して新規データを作り、現在のデータとして、前を元のデータ、次を元データの次として、間に挿入します。 | |
|   extern pdbRecord* pdbFileAppend(pdbFile* pdb); |   extern pdbRecord* pdbFileAppend(pdbFile* pdb); | ||
| + | ==== 解放 ==== | ||
| + | pdbのPDBデータを全て解放します。 | ||
|   extern pdbRecord* pdbFileFree(pdbFile* pdb); |   extern pdbRecord* pdbFileFree(pdbFile* pdb); | ||
| + | |||
| + | ==== 書き込み ==== | ||
| + | pdb->PDBのデータを[[PDB]]形式でファイルfptへ一行分書き込みます。 | ||
|   extern pdbRecord* pdbFileRecordPrint(FILE* fpt, pdbFile* pdb); |   extern pdbRecord* pdbFileRecordPrint(FILE* fpt, pdbFile* pdb); | ||
| − | + | pdb->PDBのデータをtsv形式でファイルfptへ一行分書き込みます。 | |
| − | + | ||
| − | + | ||
| − | + | ||
|   extern pdbRecord* pdbFileRecordTablePrint(FILE* fpt, pdbFile* pdb); |   extern pdbRecord* pdbFileRecordTablePrint(FILE* fpt, pdbFile* pdb); | ||
| − | === | + | ==== ポインタ移動 ==== | 
| − | + | 先頭データに移動します。 | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
|   extern pdbRecord* pdbFileTop(pdbFile* pdb); |   extern pdbRecord* pdbFileTop(pdbFile* pdb); | ||
| + | 先頭データのポインタpdb->topを返します。 | ||
|   extern pdbRecord* pdbFileTopPointer(pdbFile* pdb); |   extern pdbRecord* pdbFileTopPointer(pdbFile* pdb); | ||
| + | |||
| + | 次データに移動します。(該当無しの場合はNULLとします) | ||
|   extern pdbRecord* pdbFileNext(pdbFile* pdb); |   extern pdbRecord* pdbFileNext(pdbFile* pdb); | ||
| + | 次の原子データに移動します。(該当無しの場合はNULLとします) | ||
|   extern pdbRecord* pdbFileNextAtom(pdbFile* pdb); |   extern pdbRecord* pdbFileNextAtom(pdbFile* pdb); | ||
| + | 次のアルファ炭素データに移動します。(該当無しの場合はNULLとします) | ||
|   extern pdbRecord* pdbFileNextCA(pdbFile* pdb); |   extern pdbRecord* pdbFileNextCA(pdbFile* pdb); | ||
| + | |||
| + | 前データに移動します。(該当無しの場合はNULLとします) | ||
|   extern pdbRecord* pdbFilePrev(pdbFile* pdb); |   extern pdbRecord* pdbFilePrev(pdbFile* pdb); | ||
| + | 前の原子データに移動します。(該当無しの場合はNULLとします) | ||
|   extern pdbRecord* pdbFilePrevAtom(pdbFile* pdb); |   extern pdbRecord* pdbFilePrevAtom(pdbFile* pdb); | ||
| + | 前のアルファ炭素データに移動します。(該当無しの場合はNULLとします) | ||
|   extern pdbRecord* pdbFilePrevCA(pdbFile* pdb); |   extern pdbRecord* pdbFilePrevCA(pdbFile* pdb); | ||
| − | + | ||
| + | 末尾データに移動します。 | ||
|   extern long pdbFileGoToEnd(pdbFile* pdb); |   extern long pdbFileGoToEnd(pdbFile* pdb); | ||
| + | |||
| + | ==== データ判定 ==== | ||
| + | 末尾データの場合は1、そうでない場合は0を返します。 | ||
| + |  extern long pdbFileEnd(pdbFile* pdb); | ||
| + | pdb->PDB->Recordが終端文字(END)の場合は1、そうでない場合は0を返します。 | ||
|   extern long pdbFileIsEndLine(pdbFile* pdb); |   extern long pdbFileIsEndLine(pdbFile* pdb); | ||
| + | pdb->PDB->Recordが原子の場合は1、そうでない場合は0を返します。 | ||
|   extern long pdbFileIsAtom(pdbFile* pdb); |   extern long pdbFileIsAtom(pdbFile* pdb); | ||
| − | + | 原子名pdb->PDB->AtomNameがアルファ炭素( CA )の場合は1、そうでない場合は0を返します。 | |
|   extern long pdbFileIsCA(pdbFile* pdb); |   extern long pdbFileIsCA(pdbFile* pdb); | ||
| + | 原子名pdb->PDB->AtomNameから原子番号を返します。未対応の記号の場合は炭素として6を返します。 | ||
| + |  extern pdbFileParaTypeInteger pdbZValueGet(pdbFile* pdb); | ||
| + | pdb->PDBの残基名(1文字)が"D"または"E"の場合は1、そうでない場合は0を返します。 | ||
|   extern long pdbFileIsNegative(pdbFile* pdb); |   extern long pdbFileIsNegative(pdbFile* pdb); | ||
| + | pdb->PDBの残基名(1文字)が"K"または"R"の場合は1、そうでない場合は0を返します。 | ||
|   extern long pdbFileIsPositive(pdbFile* pdb); |   extern long pdbFileIsPositive(pdbFile* pdb); | ||
| + | pdb->PDBの残基名(1文字)が"K", "R", "D", "E"のいずれかの場合は1、そうでない場合は0を返します。 | ||
|   extern long pdbFileIsCharge(pdbFile* pdb); |   extern long pdbFileIsCharge(pdbFile* pdb); | ||
| + | ChainIDが同じで配列番号が隣同士の場合は1、そうでない場合は0を返します。 | ||
| + |  extern long pdbRecordIsNearby(pdbRecord record1,pdbRecord record2); | ||
| + | |||
| + | ==== データ設定 ==== | ||
| + | 座標pdb->PDB->Coordに(x, y, z)を設定します。 | ||
| + |  extern long pdbFileCoordSet(pdbFile* pdb, pdbFileParaTypeReal x, pdbFileParaTypeReal y, pdbFileParaTypeReal z); | ||
| + | 温度因子pdb->PDB->TemperatureFactorにtempを設定します。 | ||
| + |  extern void pdbFileTemperatureFactorSet(pdbFile* pdb, double temp); | ||
| + | Chain ID pdb->PDB->ChainIdentifierにcを設定します。 | ||
| + |  extern void pdbFileChainIdentifierSet(pdbFile* pdb, unsigned char c); | ||
| + | pdb内の全ての原子に対してChain IDをcに設定します。 | ||
| + |  extern void pdbFileChainIdentifierSetAll(pdbFile* pdb, unsigned char c); | ||
| + | 占有率pdb->PDB->Occupancyにtempを設定します。 | ||
| + |  extern void pdbFileOccupancySet(pdbFile* pdb, double temp); | ||
| + | |||
| + | ==== データ取得 ==== | ||
| + | (x, y, z)にpdb->PDB->Coordの座標を出力します。 | ||
| + |  extern long pdbFileCoordGet(pdbFile* pdb, pdbFileParaTypeReal* x, pdbFileParaTypeReal* y, pdbFileParaTypeReal* z); | ||
| + | 残基配列番号pdb->PDB->ResidueSequenceNumberを返します。 | ||
| + |  extern long pdbFileResidueSequenceNumberGet(pdbFile* pdb); | ||
| + | 残基名を返します。(mode=RESIDUE_THREECHAR_MODE で3文字、そうでない場合は1文字) | ||
| + |  extern char* pdbFileResidueNameGet(pdbFile* pdb,int mode); | ||
| + | 温度因子pdb->PDB->TemperatureFactorを返します。 | ||
| + |  extern pdbFileParaTypeReal pdbFileTemperatureFactorGet(pdbFile* pdb); | ||
| + | Chain ID pdb->PDB->ChainIdentifierを返します。 | ||
| + |  extern unsigned char pdbFileChainIdentifierGet(pdbFile* pdb); | ||
| + | 占有率pdb->PDB->Occupancyを返します。 | ||
| + |  extern pdbFileParaTypeReal pdbFileOccupancyGet(pdbFile* pdb); | ||
| + | |||
| + | ==== データ処理 ==== | ||
| + | 残基配列番号pdb->PDB->ResidueSequenceNumberを1つ増やします。 | ||
| + |  extern void pdbFileResidueSequenceNumberIncrement(pdbFile* pdb, int n); | ||
| + | pdb内の全ての原子に対して残基配列番号を1つ増やします。 | ||
| + |  extern void pdbFileResidueSequenceNumberIncrementAll(pdbFile* pdb, int n); | ||
| + | |||
| + | ==== コピー処理 ==== | ||
| + | PDBデータsrc->PDBをdst->PDBへコピーします。<br> | ||
| + | このとき、前、次データとの関係は保持されたままで、dst->PDBを返します。 | ||
| + |  extern pdbRecord* pdbFileOneRecordCopy(pdbFile* dst, pdbFile* src); | ||
| + | |||
| + | srcの全てのPDBデータをdstへ上書きコピーします。<br> | ||
| + | コピーを行う際にdstに対してpdbFileNewを呼び出すので、dstをpdbFileFreeなどで解放してから使用して下さい。 | ||
| + |  extern void pdbFileCopyAll(pdbFile* dst, pdbFile* src); | ||
| + | srcの全てのPDBデータをPDBデータdst->PDBの後に挿入します。<br> | ||
| + |  extern void pdbFileAppendAll(pdbFile* dst, pdbFile* src); | ||
| + | |||
| + | PDBデータsrc->PDBがアルファ炭素のときのみdst->PDBへコピーします。<br> | ||
| + | このとき、前、次データとの関係は保持されたままで、コピーした場合はdst->PDB、されなかった場合はNULLを返します。 | ||
| + |  extern pdbRecord* pdbFileCAOnlyCopy(pdbFile* pdb, pdbFile* src); | ||
| + | |||
| + | srcの全てのアルファ炭素のPDBデータをdstへ上書きコピーします。<br> | ||
| + | コピーを行う際にdstに対してpdbFileNewを呼び出すので、dstをpdbFileFreeなどで解放してから使用して下さい。 | ||
| + |  extern void pdbFileCAOnlyCopyAll(pdbFile* pdb, pdbFile* src); | ||
| + | |||
| + | srcからdstへのタンパク質1つ分のデータをコピーします。<br> | ||
| + | dstは予めpdbFileNewにより初期化して使用して下さい。 | ||
| + |  extern void pdbFileOneProteinCopy(pdbFile* dst, pdbFile* src, long num); | ||
| + | |||
| + | ===二次構造=== | ||
| + | ==== 読み出し ==== | ||
| + | pdb->PDB->FullRecordから二次構造を読み取り、secondへ格納します。 | ||
| + |  extern int pdbSecondaryStructureSetFromPDB(pdbFile* pdb, pdbFileSecondaryStructure* second); | ||
| + | pdb->PDB->FullRecordから二次構造に含まれないアルファ炭素を読み取り、secondへ格納します。 | ||
| + |  extern int pdbNoSecondaryStructureSetFromPDB(pdbFile* pdb, pdbFileSecondaryStructure* second); | ||
| + | |||
| + | ==== 書き込み ==== | ||
| + | 二次構造データsecondを[[PDB]]形式でファイルfptへ書き込みます。(pdbFileSecondaryStructureRecordPrintを繰り返して使用) | ||
| + |  extern void pdbFileWriteSecondaryStructure(FILE* fpt, pdbFileSecondaryStructure* second); | ||
| + | 二次構造データsecondを[[PDB]]形式でファイルfptへ一行分書き込みます。 | ||
| + |  extern pdbFileSecondaryStructureRecord* pdbFileSecondaryStructureRecordPrint(FILE* fpt, pdbFileSecondaryStructureRecord* second); | ||
| + | |||
| + | ==== 追加 ==== | ||
| + | secondへメモリを確保して新規作成した二次構造データを追加します。 | ||
| + |  extern int pdbSecondaryStructureAppend(pdbFileSecondaryStructure* second); | ||
| + | 元々のデータ数second->nSecondaryStructure=0の場合は、新規データを先頭データとして、前、次のデータはNULLとします。<br> | ||
| + | そうでない場合は、新規データを現在のデータとして、前を元のデータ、次を元データの次として、間に挿入します。 | ||
| + | |||
| + | ==== データ判定 ==== | ||
| + | 二次構造(HELIX, SHEET, TURN)の場合は1、そうでない場合は0を返します。 | ||
|   extern long pdbFileIsSecondaryStructure(pdbFile* pdb); |   extern long pdbFileIsSecondaryStructure(pdbFile* pdb); | ||
| + | ヘリックス構造(HELIX)の場合は1、そうでない場合は0を返します。 | ||
|   extern long pdbFileIsHelix(pdbFile* pdb); |   extern long pdbFileIsHelix(pdbFile* pdb); | ||
| + | シート構造(SHEET)の場合は1、そうでない場合は0を返します。 | ||
|   extern long pdbFileIsSheet(pdbFile* pdb); |   extern long pdbFileIsSheet(pdbFile* pdb); | ||
| + | ターン構造(TURN)の場合は1、そうでない場合は0を返します。 | ||
|   extern long pdbFileIsTurn(pdbFile* pdb); |   extern long pdbFileIsTurn(pdbFile* pdb); | ||
| + | pdb->PDBがsecond->SecondaryStructureに含まれている場合にその二次元構造データ、そうでない場合はpdbFileSecondaryStructureModeNoを返します。 | ||
| + |  extern pdbFileSecondaryStructureMode pdbFileWithSecondaryStructure(pdbFile* pdb, pdbFileSecondaryStructure* second); | ||
| − |   extern  | + | === 行列によるアフィン変換 === | 
| + | ==== ファイル処理 ==== | ||
| + | [[Matrix3D(API)#ファイル処理]]を使用して、ファイルの処理を行います。 | ||
| + |  extern void pdbMatrixFileFormat(FILE* fpt); | ||
| + |  extern void pdbMatrixFileRead(FILE* fpt, Matrix3D Matrix); | ||
| + |   extern void pdbMatrixFileWrite(FILE* fpt, Matrix3D Matrix); | ||
| − | + | ==== アフィン変換 ==== | |
| − | + | 行列Matrixを使用して、pdbにアフィン変換を行います。 | |
| − |   extern void  | + |   extern void pdbTrans(pdbFile* pdb, Matrix3D Matrix); | 
| − |   extern void  | + |   extern void pdbTransCuda(float* hv, int n, Matrix3D Matrix); | 
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | [[Matrix3D(API)#アフィン行列]]を使用して行列を作成し、pdbを回転します。<br> | |
| + | [[オイラー角]]を使用した回転 | ||
|   extern void pdbRotationFollowingEulerAngle(pdbFile* pdb, char Mode[4], pdbFileParaTypeReal rot1, pdbFileParaTypeReal rot2, pdbFileParaTypeReal rot3); |   extern void pdbRotationFollowingEulerAngle(pdbFile* pdb, char Mode[4], pdbFileParaTypeReal rot1, pdbFileParaTypeReal rot2, pdbFileParaTypeReal rot3); | ||
|   extern void pdbRotationFollowingEulerAngleInverse(pdbFile* pdb, char Mode[4], pdbFileParaTypeReal rot1, pdbFileParaTypeReal rot2, pdbFileParaTypeReal rot3); |   extern void pdbRotationFollowingEulerAngleInverse(pdbFile* pdb, char Mode[4], pdbFileParaTypeReal rot1, pdbFileParaTypeReal rot2, pdbFileParaTypeReal rot3); | ||
| + | 指定した軸の順番で回転 | ||
|   extern void pdbRotationXYZ(pdbFile* pdb, pdbFileParaTypeReal rotx, pdbFileParaTypeReal roty, pdbFileParaTypeReal rotz); |   extern void pdbRotationXYZ(pdbFile* pdb, pdbFileParaTypeReal rotx, pdbFileParaTypeReal roty, pdbFileParaTypeReal rotz); | ||
|   extern void pdbRotationZYX(pdbFile* pdb, pdbFileParaTypeReal rotx, pdbFileParaTypeReal roty, pdbFileParaTypeReal rotz); |   extern void pdbRotationZYX(pdbFile* pdb, pdbFileParaTypeReal rotx, pdbFileParaTypeReal roty, pdbFileParaTypeReal rotz); | ||
|   extern void pdbRotationZXY(pdbFile* pdb, pdbFileParaTypeReal rotx, pdbFileParaTypeReal roty, pdbFileParaTypeReal rotz); |   extern void pdbRotationZXY(pdbFile* pdb, pdbFileParaTypeReal rotx, pdbFileParaTypeReal roty, pdbFileParaTypeReal rotz); | ||
|   extern void pdbRotationYXZ(pdbFile* pdb, pdbFileParaTypeReal rotx, pdbFileParaTypeReal roty, pdbFileParaTypeReal rotz); |   extern void pdbRotationYXZ(pdbFile* pdb, pdbFileParaTypeReal rotx, pdbFileParaTypeReal roty, pdbFileParaTypeReal rotz); | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
2014年10月7日 (火) 06:45時点における最新版
DataManip/pdbFileはPDBファイルを取り扱うためのAPIです。
定数
PDBファイルでの構文
文字数定義
#define PDB_FILE_RECORD_FULL_LENGTH (80) #define PDB_FILE_RECORD_START (0) #define PDB_FILE_RECORD_LENGTH (6) #define PDB_FILE_ATOM_NUMBER_START (6) #define PDB_FILE_ATOM_NUMBER_LENGTH (5) #define PDB_FILE_ATOM_NAME_START (12) #define PDB_FILE_ATOM_NAME_LENGTH (4) #define PDB_FILE_LOCATION_START (16) #define PDB_FILE_LOCATION_LENGTH (1) #define PDB_FILE_RESIDUE_START (17) #define PDB_FILE_RESIDUE_LENGTH (3) #define PDB_FILE_CHAIN_IDENT_START (21) #define PDB_FILE_CHAIN_IDENT_LENGTH (1) #define PDB_FILE_RESNUM_START (22) #define PDB_FILE_RESNUM_LENGTH (4) #define PDB_FILE_INSERTION_START (26) #define PDB_FILE_INSERTION_LENGTH (1) #define PDB_FILE_X_START (30) #define PDB_FILE_X_LENGTH (8) #define PDB_FILE_Y_START (38) #define PDB_FILE_Y_LENGTH (8) #define PDB_FILE_Z_START (46) #define PDB_FILE_Z_LENGTH (8) #define PDB_FILE_OCCUPANCY_START (54) #define PDB_FILE_OCCUPANCY_LENGTH (6) #define PDB_FILE_TEMPERATURE_START (60) #define PDB_FILE_TEMPERATURE_LENGTH (6) #define PDB_FILE_FOOT_START (67) #define PDB_FILE_FOOT_LENGTH (3) #define PDB_FILE_FOOTNOTE_START (70) #define PDB_FILE_FOOTNOTE_LENGTH (10) #define MAX_RESIDUE_NUMBER (20) #define RESIDUE_ONECHAR_MODE (1) #define RESIDUE_THREECHAR_MODE (3)
文字列定義
#define pdbRecordAtom       ("ATOM  ")
#define pdbRecordHeteroAtom ("HETATM")
#define pdbRecordHelix      ("HELIX ")
#define pdbRecordSheet      ("SHEET ")
#define pdbRecordTurn       ("TURN  ")
#define pdbRecordEnd        ("END   ")
残基名
residueName3: 3文字表記, residueName1: 1文字表記
typedef struct residueName {
  char residueName3[4];
  char residueName1[2];
} residueName;
ヘッダファイルには構造体のみ定義して、残基名は/pdbFile/src/pdbGet.cで定義しています。
static residueName residue[MAX_RESIDUE_NUMBER] = { 
"ALA","A", "VAL","V", "PHE","F", "PRO","P",
"MET","M", "ILE","I", "LEU","L", "ASP","D",
"GLU","E", "LYS","K", "ARG","R", "SER","S",
"THR","T", "TYR","Y", "HIS","H", "CYS","C",
"ASN","N", "GLN","Q", "TRP","W", "GLY","G"
};
| 要素No. | residueName3 | residueName1 | 
|---|---|---|
| 0 | ALA | A | 
| 1 | VAL | V | 
| 2 | PHE | F | 
| 3 | PRO | P | 
| 4 | MET | M | 
| 5 | ILE | I | 
| 6 | LEU | L | 
| 7 | ASP | D | 
| 8 | GLU | E | 
| 9 | LYS | K | 
| 10 | ARG | R | 
| 11 | SER | S | 
| 12 | THR | T | 
| 13 | TYR | Y | 
| 14 | HIS | H | 
| 15 | CYS | C | 
| 16 | ASN | N | 
| 17 | GLN | Q | 
| 18 | TRP | W | 
| 19 | GLY | G | 
二次構造
二次構造のモード
typedef enum pdbFileSecondaryStructureMode {
	pdbFileSecondaryStructureModeNo    = 0,
	pdbFileSecondaryStructureModeHelix = 1,
	pdbFileSecondaryStructureModeSheet = 2,
	pdbFileSecondaryStructureModeTurn  = 3
} pdbFileSecondaryStructureMode;
ヘリックス構造
typedef enum pdbSecondaryStructureHelixClass {
	HelixClassRightHandedAlpha = 1,
	HelixClassRightHandedOmega = 2,
	HelixClassRightHandedPi    = 3,
	HelixClassRightHandedGammda= 4,
	HelixClassRightHanded310   = 5,
	HelixClassLeftHandedAlpha  = 6,
	HelixClassLeftHandedOmega  = 7,
	HelixClassLeftHandedGammda = 9,
	HelixClassPolyProline      = 10,
} pdbSecondaryStructureHelixClass;
構造体
管理データ
PDBデータ及びその二次構造データを管理する構造体です。
typedef struct pdbFile {
  pdbRecord* top;
  pdbRecord* PDB;
  pdbFileParaTypeInteger nAtom;
  pdbFileSecondaryStructure second;
} pdbFile;
| メンバ | 説明 | 
|---|---|
| top | 先頭のPDBデータ(ポインタ) | 
| PDB | 現在のPDBデータ(ポインタ) | 
| nAtom | PDBデータ数 | 
| second | 二次構造データ | 
二次構造管理データ
typedef struct pdbFileSecondaryStructure {
	int nSecondaryStructure;
	pdbFileSecondaryStructureRecord* top;
	pdbFileSecondaryStructureRecord* SecondaryStructure; 
} pdbFileSecondaryStructure;
| メンバ | 説明 | 
|---|---|
| nSecondaryStructure | 二次構造データ数 | 
| top | 先頭の二次構造データ(ポインタ) | 
| SecondaryStructure | 現在の二次構造データ(ポインタ) | 
PDBデータ
PDBデータが格納されている構造体です。リスト構造で管理し、PDBファイル一行分のデータに対応しています。
typedef struct pdbRecord pdbRecord;
struct pdbRecord {
  pdbFileParaTypeCharacter FullRecord[PDB_FILE_RECORD_FULL_LENGTH+1];
  pdbFileParaTypeCharacter Record[PDB_FILE_RECORD_LENGTH+1];
/* ATOM and HETATM Record */
  pdbFileParaTypeInteger   AtomSerialNumber;
  pdbFileParaTypeCharacter AtomName[PDB_FILE_ATOM_NAME_LENGTH+1];
  pdbFileParaTypeCharacter LocationIndicator;
  pdbFileParaTypeCharacter ResidueName[PDB_FILE_RESIDUE_LENGTH+1];
  pdbFileParaTypeCharacter ChainIdentifier;
  pdbFileParaTypeInteger   ResidueSequenceNumber;
  pdbFileParaTypeCharacter InsertionCode;
  pdbCoord                 Coord;
  pdbFileParaTypeReal      Occupancy;
  pdbFileParaTypeReal      TemperatureFactor;
  pdbFileParaTypeInteger   FootnoteNumber;
  pdbFileParaTypeCharacter Footnote[PDB_FILE_FOOTNOTE_LENGTH+1];
  pdbRecord*               prev;
  pdbRecord*               next;
};
| メンバ | 説明 | 
|---|---|
| FullRecord | 一行分のPDBデータ | 
| Record | 原子情報としての一行分のPDBデータ | 
| AtomSerialNumber | |
| AtomName | 原子名 | 
| LocationIndicator | |
| ResidueName | 残基名 | 
| ChainIdentifier | Chain ID | 
| ResidueSequenceNumber | 残基配列番号 | 
| InsertionCode | |
| Coord | 原子の座標 | 
| Occupancy | 占有率 | 
| TemperatureFactor | 温度因子 | 
| FootnoteNumber | |
| Footnote | |
| prev | 前データ | 
| next | 次データ | 
typedef char pdbFileParaTypeCharacter; typedef long pdbFileParaTypeInteger; typedef float pdbFileParaTypeReal;
PDBデータの座標
typedef struct pdbCoord {
  pdbFileParaTypeReal x;
  pdbFileParaTypeReal y;
  pdbFileParaTypeReal z;
} pdbCoord;
二次構造
二次構造データが格納されている構造体です。リスト構造で管理し、二次構造一行分のデータに対応しています。
typedef struct pdbFileSecondaryStructureRecord pdbFileSecondaryStructureRecord; 
struct pdbFileSecondaryStructureRecord {
	pdbFileSecondaryStructureMode mode;
	pdbSecondaryStructureHelix*   helix;
	pdbSecondaryStructureSheet*   sheet;
	pdbSecondaryStructureTurn*    turn;
	pdbSecondaryStructureNo*      no;
	pdbFileSecondaryStructureRecord* prev;
	pdbFileSecondaryStructureRecord* next;
};
| メンバ | 説明 | 
|---|---|
| mode | 二次構造のモード | 
| helix | ヘリックス構造のデータ | 
| sheet | シート構造のデータ | 
| turn | ターン構造のデータ | 
| no | 二次構造なしのデータ | 
| prev | 前データ | 
| next | 次データ | 
ヘリックス構造
typedef struct pdbSecondaryStructureHelix {
	int  serNum;     	/* Serial Number */
	char* helixID;   	/* HelixID : Three alpahnumeric characters */
/* informtion for the initial residue */
	char* initResName;/* Name of the initial residue : Three alpahnumeric characters */ 
	char initChainID;  	/* Chain identifier */ 
	int  initSeqNum;    /* Sequence number of the initial residue */
	char initICode; 
/* informtion for the terminal residue */
	char* endResName;/* Name of the initial residue : Three alpahnumeric characters */ 
	char endChainID;  	/* Chain identifier */ 
	int  endSeqNum;    /* Sequence number of the initial residue */
	char endICode; 
	pdbSecondaryStructureHelixClass helixClass;
	char* comment; 
	int  length;
} pdbSecondaryStructureHelix;
シート構造
typedef struct pdbSecondaryStructureSheet {
	int  strand; 		/* Strand number which starts 1 for eache strand wihtin a sheet and increases by one */  
	char* sheetID;    /* Sheet ID */			
	int  numStrands;    /* Number of strands in sheet */
/* initial residue */
	char* initResName;/* Name of the initial residue : Three alpahnumeric characters */ 
	char initChainID;  	/* Chain identifier */ 
	int  initSeqNum;    /* Sequence number of the initial residue */
	char initICode; 
/* informtion for the terminal residue */
	char* endResName;/* Name of the initial residue : Three alpahnumeric characters */ 
	char endChainID;  	/* Chain identifier */ 
	int  endSeqNum;    /* Sequence number of the initial residue */
	char endICode; 
	int sense;  /* 0: first strand, 1: parallel, -1: anti-paralle */ 
	char* curAtom; /* Registration. Atom name in current strand */
	char* curResName; /* Registration. Residue name in current strand */
	char curChainID; /* Registration. Chain ID in current strand */
	int  curResSeq;  /* Registration. Res sequence in current strand */
	char curICode;  /* Registration. Insertion code in current strand */
	char* prevAtom; /* Registration. Atom name in current strand */
	char* prevResName; /* Registration. Residue name in current strand */
	char prevChainID; /* Registration. Chain ID in current strand */
	int prevResSeq;  /* Registration. Res sequence in current strand */
	char prevICode;  /* Registration. Insertion code in current strand */
}pdbSecondaryStructureSheet;
ターン構造
typedef struct pdbSecondaryStructureTurn {
	int  serNum;     	/* Serial Number */
	char* turnID;   	/* Turn ID : Three alpahnumeric characters */
/* informtion for the initial residue */
	char* initResName;/* Name of the initial residue : Three alpahnumeric characters */ 
	char initChainID;  	/* Chain identifier */ 
	int  initSeqNum;    /* Sequence number of the initial residue */
	char initICode; 
/* informtion for the terminal residue */
	char* endResName;/* Name of the initial residue : Three alpahnumeric characters */ 
	char endChainID;  	/* Chain identifier */ 
	int  endSeqNum;    /* Sequence number of the initial residue */
	char endICode; 
	char* comment; 
}pdbSecondaryStructureTurn;
二次構造なし
typedef struct pdbSecondaryStructureNo {
	int   serNum;     	/* Serial Number */
	char* noID;   	    /* Turn ID : Three alpahnumeric characters */
/* informtion for the initial residue */
	char* initResName;/* Name of the initial residue : Three alpahnumeric characters */ 
	char initChainID;  	/* Chain identifier */ 
	int  initSeqNum;    /* Sequence number of the initial residue */
	char initICode; 
/* informtion for the terminal residue */
	char* endResName;/* Name of the initial residue : Three alpahnumeric characters */ 
	char endChainID;  	/* Chain identifier */ 
	int  endSeqNum;    /* Sequence number of the initial residue */
	char endICode; 
	char* comment; 
}pdbSecondaryStructureNo;
API
ファイル管理
読み出し
ファイルfptから読み出したデータを管理データpdbへ格納します。
extern void pdbFileRead(FILE* fpt, pdbFile* pdb);
書き込み
管理データpdbをPDB形式でファイルfptへ書き込みます。(pdbFileRecordPrintを繰り返して使用)
extern void pdbFileWrite(FILE* fpt, pdbFile* pdb);
管理データpdbをtsv形式でファイルfptへ書き込みます。(pdbFileRecordTablePrintを繰り返して使用)
extern void pdbFileTableWrite(FILE* fpt, pdbFile* pdb);
管理データpdbから座標リストのみをファイルfptへ書き込みます。
extern void pdbFileWriteCoord(FILE* fpt, pdbFile* pdb);
PDBデータ処理
新規作成
pdb->PDBに新規データを作成します。
メモリを確保して新規データを作り、先頭データとして、前、次のデータはNULLとします。
extern pdbRecord* pdbFileNew(pdbFile* pdb);
追加
pdb->PDBのデータの後に新規データを追加します。
メモリを確保して新規データを作り、現在のデータとして、前を元のデータ、次を元データの次として、間に挿入します。
extern pdbRecord* pdbFileAppend(pdbFile* pdb);
解放
pdbのPDBデータを全て解放します。
extern pdbRecord* pdbFileFree(pdbFile* pdb);
書き込み
pdb->PDBのデータをPDB形式でファイルfptへ一行分書き込みます。
extern pdbRecord* pdbFileRecordPrint(FILE* fpt, pdbFile* pdb);
pdb->PDBのデータをtsv形式でファイルfptへ一行分書き込みます。
extern pdbRecord* pdbFileRecordTablePrint(FILE* fpt, pdbFile* pdb);
ポインタ移動
先頭データに移動します。
extern pdbRecord* pdbFileTop(pdbFile* pdb);
先頭データのポインタpdb->topを返します。
extern pdbRecord* pdbFileTopPointer(pdbFile* pdb);
次データに移動します。(該当無しの場合はNULLとします)
extern pdbRecord* pdbFileNext(pdbFile* pdb);
次の原子データに移動します。(該当無しの場合はNULLとします)
extern pdbRecord* pdbFileNextAtom(pdbFile* pdb);
次のアルファ炭素データに移動します。(該当無しの場合はNULLとします)
extern pdbRecord* pdbFileNextCA(pdbFile* pdb);
前データに移動します。(該当無しの場合はNULLとします)
extern pdbRecord* pdbFilePrev(pdbFile* pdb);
前の原子データに移動します。(該当無しの場合はNULLとします)
extern pdbRecord* pdbFilePrevAtom(pdbFile* pdb);
前のアルファ炭素データに移動します。(該当無しの場合はNULLとします)
extern pdbRecord* pdbFilePrevCA(pdbFile* pdb);
末尾データに移動します。
extern long pdbFileGoToEnd(pdbFile* pdb);
データ判定
末尾データの場合は1、そうでない場合は0を返します。
extern long pdbFileEnd(pdbFile* pdb);
pdb->PDB->Recordが終端文字(END)の場合は1、そうでない場合は0を返します。
extern long pdbFileIsEndLine(pdbFile* pdb);
pdb->PDB->Recordが原子の場合は1、そうでない場合は0を返します。
extern long pdbFileIsAtom(pdbFile* pdb);
原子名pdb->PDB->AtomNameがアルファ炭素( CA )の場合は1、そうでない場合は0を返します。
extern long pdbFileIsCA(pdbFile* pdb);
原子名pdb->PDB->AtomNameから原子番号を返します。未対応の記号の場合は炭素として6を返します。
extern pdbFileParaTypeInteger pdbZValueGet(pdbFile* pdb);
pdb->PDBの残基名(1文字)が"D"または"E"の場合は1、そうでない場合は0を返します。
extern long pdbFileIsNegative(pdbFile* pdb);
pdb->PDBの残基名(1文字)が"K"または"R"の場合は1、そうでない場合は0を返します。
extern long pdbFileIsPositive(pdbFile* pdb);
pdb->PDBの残基名(1文字)が"K", "R", "D", "E"のいずれかの場合は1、そうでない場合は0を返します。
extern long pdbFileIsCharge(pdbFile* pdb);
ChainIDが同じで配列番号が隣同士の場合は1、そうでない場合は0を返します。
extern long pdbRecordIsNearby(pdbRecord record1,pdbRecord record2);
データ設定
座標pdb->PDB->Coordに(x, y, z)を設定します。
extern long pdbFileCoordSet(pdbFile* pdb, pdbFileParaTypeReal x, pdbFileParaTypeReal y, pdbFileParaTypeReal z);
温度因子pdb->PDB->TemperatureFactorにtempを設定します。
extern void pdbFileTemperatureFactorSet(pdbFile* pdb, double temp);
Chain ID pdb->PDB->ChainIdentifierにcを設定します。
extern void pdbFileChainIdentifierSet(pdbFile* pdb, unsigned char c);
pdb内の全ての原子に対してChain IDをcに設定します。
extern void pdbFileChainIdentifierSetAll(pdbFile* pdb, unsigned char c);
占有率pdb->PDB->Occupancyにtempを設定します。
extern void pdbFileOccupancySet(pdbFile* pdb, double temp);
データ取得
(x, y, z)にpdb->PDB->Coordの座標を出力します。
extern long pdbFileCoordGet(pdbFile* pdb, pdbFileParaTypeReal* x, pdbFileParaTypeReal* y, pdbFileParaTypeReal* z);
残基配列番号pdb->PDB->ResidueSequenceNumberを返します。
extern long pdbFileResidueSequenceNumberGet(pdbFile* pdb);
残基名を返します。(mode=RESIDUE_THREECHAR_MODE で3文字、そうでない場合は1文字)
extern char* pdbFileResidueNameGet(pdbFile* pdb,int mode);
温度因子pdb->PDB->TemperatureFactorを返します。
extern pdbFileParaTypeReal pdbFileTemperatureFactorGet(pdbFile* pdb);
Chain ID pdb->PDB->ChainIdentifierを返します。
extern unsigned char pdbFileChainIdentifierGet(pdbFile* pdb);
占有率pdb->PDB->Occupancyを返します。
extern pdbFileParaTypeReal pdbFileOccupancyGet(pdbFile* pdb);
データ処理
残基配列番号pdb->PDB->ResidueSequenceNumberを1つ増やします。
extern void pdbFileResidueSequenceNumberIncrement(pdbFile* pdb, int n);
pdb内の全ての原子に対して残基配列番号を1つ増やします。
extern void pdbFileResidueSequenceNumberIncrementAll(pdbFile* pdb, int n);
コピー処理
PDBデータsrc->PDBをdst->PDBへコピーします。
このとき、前、次データとの関係は保持されたままで、dst->PDBを返します。
extern pdbRecord* pdbFileOneRecordCopy(pdbFile* dst, pdbFile* src);
srcの全てのPDBデータをdstへ上書きコピーします。
コピーを行う際にdstに対してpdbFileNewを呼び出すので、dstをpdbFileFreeなどで解放してから使用して下さい。
extern void pdbFileCopyAll(pdbFile* dst, pdbFile* src);
srcの全てのPDBデータをPDBデータdst->PDBの後に挿入します。
extern void pdbFileAppendAll(pdbFile* dst, pdbFile* src);
PDBデータsrc->PDBがアルファ炭素のときのみdst->PDBへコピーします。
このとき、前、次データとの関係は保持されたままで、コピーした場合はdst->PDB、されなかった場合はNULLを返します。
extern pdbRecord* pdbFileCAOnlyCopy(pdbFile* pdb, pdbFile* src);
srcの全てのアルファ炭素のPDBデータをdstへ上書きコピーします。
コピーを行う際にdstに対してpdbFileNewを呼び出すので、dstをpdbFileFreeなどで解放してから使用して下さい。
extern void pdbFileCAOnlyCopyAll(pdbFile* pdb, pdbFile* src);
srcからdstへのタンパク質1つ分のデータをコピーします。
dstは予めpdbFileNewにより初期化して使用して下さい。
extern void pdbFileOneProteinCopy(pdbFile* dst, pdbFile* src, long num);
二次構造
読み出し
pdb->PDB->FullRecordから二次構造を読み取り、secondへ格納します。
extern int pdbSecondaryStructureSetFromPDB(pdbFile* pdb, pdbFileSecondaryStructure* second);
pdb->PDB->FullRecordから二次構造に含まれないアルファ炭素を読み取り、secondへ格納します。
extern int pdbNoSecondaryStructureSetFromPDB(pdbFile* pdb, pdbFileSecondaryStructure* second);
書き込み
二次構造データsecondをPDB形式でファイルfptへ書き込みます。(pdbFileSecondaryStructureRecordPrintを繰り返して使用)
extern void pdbFileWriteSecondaryStructure(FILE* fpt, pdbFileSecondaryStructure* second);
二次構造データsecondをPDB形式でファイルfptへ一行分書き込みます。
extern pdbFileSecondaryStructureRecord* pdbFileSecondaryStructureRecordPrint(FILE* fpt, pdbFileSecondaryStructureRecord* second);
追加
secondへメモリを確保して新規作成した二次構造データを追加します。
extern int pdbSecondaryStructureAppend(pdbFileSecondaryStructure* second);
元々のデータ数second->nSecondaryStructure=0の場合は、新規データを先頭データとして、前、次のデータはNULLとします。
そうでない場合は、新規データを現在のデータとして、前を元のデータ、次を元データの次として、間に挿入します。
データ判定
二次構造(HELIX, SHEET, TURN)の場合は1、そうでない場合は0を返します。
extern long pdbFileIsSecondaryStructure(pdbFile* pdb);
ヘリックス構造(HELIX)の場合は1、そうでない場合は0を返します。
extern long pdbFileIsHelix(pdbFile* pdb);
シート構造(SHEET)の場合は1、そうでない場合は0を返します。
extern long pdbFileIsSheet(pdbFile* pdb);
ターン構造(TURN)の場合は1、そうでない場合は0を返します。
extern long pdbFileIsTurn(pdbFile* pdb);
pdb->PDBがsecond->SecondaryStructureに含まれている場合にその二次元構造データ、そうでない場合はpdbFileSecondaryStructureModeNoを返します。
extern pdbFileSecondaryStructureMode pdbFileWithSecondaryStructure(pdbFile* pdb, pdbFileSecondaryStructure* second);
行列によるアフィン変換
ファイル処理
Matrix3D(API)#ファイル処理を使用して、ファイルの処理を行います。
extern void pdbMatrixFileFormat(FILE* fpt); extern void pdbMatrixFileRead(FILE* fpt, Matrix3D Matrix); extern void pdbMatrixFileWrite(FILE* fpt, Matrix3D Matrix);
アフィン変換
行列Matrixを使用して、pdbにアフィン変換を行います。
extern void pdbTrans(pdbFile* pdb, Matrix3D Matrix); extern void pdbTransCuda(float* hv, int n, Matrix3D Matrix);
Matrix3D(API)#アフィン行列を使用して行列を作成し、pdbを回転します。
オイラー角を使用した回転
extern void pdbRotationFollowingEulerAngle(pdbFile* pdb, char Mode[4], pdbFileParaTypeReal rot1, pdbFileParaTypeReal rot2, pdbFileParaTypeReal rot3); extern void pdbRotationFollowingEulerAngleInverse(pdbFile* pdb, char Mode[4], pdbFileParaTypeReal rot1, pdbFileParaTypeReal rot2, pdbFileParaTypeReal rot3);
指定した軸の順番で回転
extern void pdbRotationXYZ(pdbFile* pdb, pdbFileParaTypeReal rotx, pdbFileParaTypeReal roty, pdbFileParaTypeReal rotz); extern void pdbRotationZYX(pdbFile* pdb, pdbFileParaTypeReal rotx, pdbFileParaTypeReal roty, pdbFileParaTypeReal rotz); extern void pdbRotationZXY(pdbFile* pdb, pdbFileParaTypeReal rotx, pdbFileParaTypeReal roty, pdbFileParaTypeReal rotz); extern void pdbRotationYXZ(pdbFile* pdb, pdbFileParaTypeReal rotx, pdbFileParaTypeReal roty, pdbFileParaTypeReal rotz);
