「pdbFile(API)」の版間の差分
|  (→ファイル書き込み(pdbFileWrite)) |  (→二次構造) | ||
| 行278: | 行278: | ||
| 	<tr>   | 	<tr>   | ||
| 		<td>no</td>   | 		<td>no</td>   | ||
| − | 		<td></td>   | + | 		<td>二次構造なしのデータ</td>   | 
| 	</tr>   | 	</tr>   | ||
| 	<tr>   | 	<tr>   | ||
| 行362: | 行362: | ||
|   }pdbSecondaryStructureTurn; |   }pdbSecondaryStructureTurn; | ||
| + | ==== 二次構造なし ==== | ||
|   typedef struct pdbSecondaryStructureNo { |   typedef struct pdbSecondaryStructureNo { | ||
|   	int   serNum;     	/* Serial Number */ |   	int   serNum;     	/* Serial Number */ | ||
2014年10月6日 (月) 06:06時点における版
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   ")
二次構造
二次構造のモード
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 | |
| ResidueSequenceNumber | |
| InsertionCode | |
| Coord | 原子の座標 | 
| Occupancy | |
| TemperatureFactor | 温度因子 | 
| FootnoteNumber | |
| Footnote | |
| prev | 前データ | 
| next | 次データ | 
typedef char pdbFileParaTypeCharacter; typedef long pdbFileParaTypeInteger; typedef float pdbFileParaTypeReal;
typedef struct residueName {
  char residueName3[4];
  char residueName1[2];
} residueName;
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
ファイル読み出し(pdbFileRead)
ファイルfptから読み出したデータを管理データpdbへ格納します。
extern void pdbFileRead(FILE* fpt, pdbFile* pdb);
ファイル書き込み(pdbFileWrite)
管理データpdbをファイルfptへ書き込みます。
extern void pdbFileWrite(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);
extern pdbRecord* pdbFileFree(pdbFile* pdb); extern pdbRecord* pdbFileRecordPrint(FILE* fpt, pdbFile* pdb);
テーブル処理
extern void pdbFileTableWrite(FILE* fpt, pdbFile* pdb); extern pdbRecord* pdbFileRecordTablePrint(FILE* fpt, pdbFile* pdb);
行列処理
extern void pdbMatrixFileFormat(FILE* fpt); extern void pdbMatrixFileRead(FILE* fpt, Matrix3D Matrix); extern void pdbMatrixFileWrite(FILE* fpt, Matrix3D Matrix);
extern void pdbTrans(pdbFile* pdb, Matrix3D Matrix); extern void pdbTransCuda(float* hv, int n, Matrix3D Matrix);
Residue
extern void pdbFileResidueSequenceNumberIncrementAll(pdbFile* pdb, int n); extern void pdbFileResidueSequenceNumberIncrement(pdbFile* pdb, int n);
Chain ID
extern void pdbFileChainIdentifierSetAll(pdbFile* pdb, unsigned char c); extern void pdbFileChainIdentifierSet(pdbFile* pdb, unsigned char c); extern unsigned char pdbFileChainIdentifierGet(pdbFile* pdb);
温度因子
extern pdbFileParaTypeReal pdbFileTemperatureFactorGet(pdbFile* pdb); extern void pdbFileTemperatureFactorSet(pdbFile* pdb, double temp);
extern pdbFileParaTypeReal pdbFileOccupancyGet(pdbFile* pdb); extern void pdbFileOccupancySet(pdbFile* pdb, double temp);
二次構造
二次構造をファイルfptへ書き出します。
extern void pdbFileWriteSecondaryStructure(FILE* fpt, pdbFileSecondaryStructure* second);
二次構造(HELIX, SHEET, TURN)の場合は1、そうでない場合は0を返します。
extern long pdbFileIsSecondaryStructure(pdbFile* pdb);
extern pdbFileSecondaryStructureRecord* pdbFileSecondaryStructureRecordPrint(FILE* fpt, pdbFileSecondaryStructureRecord* second);
pdb->PDB->FullRecordから二次構造を読み取り、secondへ格納します。
extern int pdbSecondaryStructureSetFromPDB(pdbFile* pdb, pdbFileSecondaryStructure* second); extern int pdbNoSecondaryStructureSetFromPDB(pdbFile* pdb, pdbFileSecondaryStructure* second);
secondへメモリを確保して新規作成した二次構造データを追加します。
extern int pdbSecondaryStructureAppend(pdbFileSecondaryStructure* second);
元々のデータ数second->nSecondaryStructure=0の場合は、新規データを先頭データとして、前、次のデータはNULLとします。
そうでない場合は、新規データを現在のデータとして、前を元のデータ、次を元データの次として、間に挿入します。
extern pdbFileSecondaryStructureMode pdbFileWithSecondaryStructure(pdbFile* pdb, pdbFileSecondaryStructure* second);
座標
extern long pdbFileCoordSet(pdbFile* pdb, pdbFileParaTypeReal x, pdbFileParaTypeReal y, pdbFileParaTypeReal z);
extern long pdbFileCoordGet(pdbFile* pdb, pdbFileParaTypeReal* x, pdbFileParaTypeReal* y, pdbFileParaTypeReal* z); extern long pdbFileResidueSequenceNumberGet(pdbFile* pdb); extern char* pdbFileResidueNameGet(pdbFile* pdb,int mode);
原子情報
ポインタ移動
先頭データに移動します。
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);
末尾データの場合は1、そうでない場合は0を返します。
extern long pdbFileEnd(pdbFile* pdb);
末尾データに移動します。
extern long pdbFileGoToEnd(pdbFile* pdb);
pdb->PDB->Recordが終端文字(END)の場合は1、そうでない場合は0を返します。
extern long pdbFileIsEndLine(pdbFile* pdb);
pdb->PDB->Recordが原子の場合は1、そうでない場合は0を返します。
extern long pdbFileIsAtom(pdbFile* pdb);
extern long pdbRecordIsNearby(pdbRecord record1,pdbRecord record2); extern long pdbFileIsCA(pdbFile* pdb); extern long pdbFileIsNegative(pdbFile* pdb); extern long pdbFileIsPositive(pdbFile* pdb); extern long pdbFileIsCharge(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);
extern pdbFileParaTypeInteger pdbZValueGet(pdbFile* pdb);
extern pdbRecord* pdbFileCAOnlyCopy(pdbFile* pdb, pdbFile* src); extern void pdbFileCAOnlyCopyAll(pdbFile* pdb, pdbFile* src); extern void pdbFileCopyAll(pdbFile* dst, pdbFile* src); extern void pdbFileAppendAll(pdbFile* dst, pdbFile* src); extern pdbRecord* pdbFileOneRecordCopy(pdbFile* dst, pdbFile* src); extern void pdbFileOneProteinCopy(pdbFile* dst, pdbFile* src, long num);
回転処理
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);
