「pdbFile(API)」の版間の差分
(→PDBデータ) |
(→PDBデータ処理) |
||
(同じ利用者による、間の37版が非表示) | |||
行46: | 行46: | ||
#define pdbRecordTurn ("TURN ") | #define pdbRecordTurn ("TURN ") | ||
#define pdbRecordEnd ("END ") | #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" | ||
+ | }; | ||
+ | <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> | ||
=== 二次構造 === | === 二次構造 === | ||
行70: | 行193: | ||
== 構造体 == | == 構造体 == | ||
− | === | + | === 管理データ === |
− | + | PDBデータ及びその二次構造データを管理する構造体です。 | |
typedef struct pdbFile { | typedef struct pdbFile { | ||
pdbRecord* top; | pdbRecord* top; | ||
行93: | 行216: | ||
<tr> | <tr> | ||
<td>nAtom</td> | <td>nAtom</td> | ||
− | <td> | + | <td>PDBデータ数</td> |
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>second</td> | <td>second</td> | ||
<td>二次構造データ</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> | </tr> | ||
</table> | </table> | ||
行103: | 行252: | ||
=== PDBデータ === | === PDBデータ === | ||
− | [[PDB]] | + | [[PDB]]データが格納されている構造体です。リスト構造で管理し、PDBファイル一行分のデータに対応しています。 |
typedef struct pdbRecord pdbRecord; | typedef struct pdbRecord pdbRecord; | ||
行159: | 行308: | ||
<tr> | <tr> | ||
<td>ChainIdentifier</td> | <td>ChainIdentifier</td> | ||
− | <td></td> | + | <td>Chain ID</td> |
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>ResidueSequenceNumber</td> | <td>ResidueSequenceNumber</td> | ||
− | <td></td> | + | <td>残基配列番号</td> |
</tr> | </tr> | ||
<tr> | <tr> | ||
行175: | 行324: | ||
<tr> | <tr> | ||
<td>Occupancy</td> | <td>Occupancy</td> | ||
− | <td></td> | + | <td>占有率</td> |
</tr> | </tr> | ||
<tr> | <tr> | ||
行204: | 行353: | ||
typedef float pdbFileParaTypeReal; | typedef float pdbFileParaTypeReal; | ||
− | + | PDBデータの座標 | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
typedef struct pdbCoord { | typedef struct pdbCoord { | ||
pdbFileParaTypeReal x; | pdbFileParaTypeReal x; | ||
行217: | 行361: | ||
=== 二次構造 === | === 二次構造 === | ||
− | typedef struct | + | 二次構造データが格納されている構造体です。リスト構造で管理し、二次構造一行分のデータに対応しています。 |
− | + | typedef struct pdbFileSecondaryStructureRecord pdbFileSecondaryStructureRecord; | |
− | pdbFileSecondaryStructureRecord* | + | struct pdbFileSecondaryStructureRecord { |
− | 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> | ||
==== ヘリックス構造 ==== | ==== ヘリックス構造 ==== | ||
行294: | 行480: | ||
}pdbSecondaryStructureTurn; | }pdbSecondaryStructureTurn; | ||
+ | ==== 二次構造なし ==== | ||
typedef struct pdbSecondaryStructureNo { | typedef struct pdbSecondaryStructureNo { | ||
int serNum; /* Serial Number */ | int serNum; /* Serial Number */ | ||
行310: | 行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とします。 | メモリを確保して新規データを作り、先頭データとして、前、次のデータはNULLとします。 | ||
extern pdbRecord* pdbFileNew(pdbFile* pdb); | extern pdbRecord* pdbFileNew(pdbFile* pdb); | ||
行345: | 行523: | ||
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); | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
==== ポインタ移動 ==== | ==== ポインタ移動 ==== | ||
先頭データに移動します。 | 先頭データに移動します。 | ||
行424: | 行553: | ||
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を返します。 | pdb->PDB->Recordが終端文字(END)の場合は1、そうでない場合は0を返します。 | ||
extern long pdbFileIsEndLine(pdbFile* pdb); | extern long pdbFileIsEndLine(pdbFile* pdb); | ||
pdb->PDB->Recordが原子の場合は1、そうでない場合は0を返します。 | 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); | ||
ヘリックス構造(HELIX)の場合は1、そうでない場合は0を返します。 | ヘリックス構造(HELIX)の場合は1、そうでない場合は0を返します。 | ||
extern long pdbFileIsHelix(pdbFile* pdb); | extern long pdbFileIsHelix(pdbFile* pdb); | ||
行447: | 行659: | ||
ターン構造(TURN)の場合は1、そうでない場合は0を返します。 | ターン構造(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 pdbTrans(pdbFile* pdb, Matrix3D Matrix); | ||
+ | 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);