pdbFile(API)
提供: Eospedia
DataManip/pdbFileはPDBファイルを取り扱うためのAPI です。
目次
定数
#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 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 enum pdbSecondaryStructureHelixClass {
HelixClassRightHandedAlpha = 1,
HelixClassRightHandedOmega = 2,
HelixClassRightHandedPi = 3,
HelixClassRightHandedGammda= 4,
HelixClassRightHanded310 = 5,
HelixClassLeftHandedAlpha = 6,
HelixClassLeftHandedOmega = 7,
HelixClassLeftHandedGammda = 9,
HelixClassPolyProline = 10,
} pdbSecondaryStructureHelixClass;
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;
typedef enum pdbFileSecondaryStructureMode {
pdbFileSecondaryStructureModeNo = 0,
pdbFileSecondaryStructureModeHelix = 1,
pdbFileSecondaryStructureModeSheet = 2,
pdbFileSecondaryStructureModeTurn = 3
} pdbFileSecondaryStructureMode;
typedef struct pdbFileSecondaryStructureRecord pdbFileSecondaryStructureRecord;
struct pdbFileSecondaryStructureRecord {
pdbFileSecondaryStructureMode mode;
pdbSecondaryStructureHelix* helix;
pdbSecondaryStructureSheet* sheet;
pdbSecondaryStructureTurn* turn;
pdbSecondaryStructureNo* no;
pdbFileSecondaryStructureRecord* prev;
pdbFileSecondaryStructureRecord* next;
};
typedef struct pdbFileSecondaryStructure {
int nSecondaryStructure;
pdbFileSecondaryStructureRecord* top;
pdbFileSecondaryStructureRecord* SecondaryStructure;
} pdbFileSecondaryStructure;
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;
};
PDBファイルの構造
typedef struct pdbFile {
pdbRecord* top;
pdbRecord* PDB;
pdbFileParaTypeInteger nAtom;
pdbFileSecondaryStructure second;
} pdbFile;
API
ファイル読み出し(pdbFileRead)
extern void pdbFileRead(FILE* fpt, pdbFile* pdb);
ファイル書き込み(pdbFileWrite)
extern void pdbFileWrite(FILE* fpt, pdbFile* pdb);
座標情報のみ
extern void pdbFileWriteCoord(FILE* fpt, pdbFile* pdb);
PDBデータ処理
新規作成
pdb->PDBのデータに初期化データを新規作成します。
メモリを確保して全てのデータを0として、先頭データとします。前、次のデータはNULLとします。
extern pdbRecord* pdbFileNew(pdbFile* pdb);
追加
pdb->PDBのデータの後に初期化データを追加します。
メモリを確保して全てのデータを0として、現在のデータとします。前を元のデータ、次を元データの次として、間に挿入します。
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 void pdbFileWriteSecondaryStructure(FILE* fpt, pdbFileSecondaryStructure* second); 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);
座標
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);
pdb->PDB = pdb->prevとして前データに移動します。(該当無しの場合は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);
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); extern long pdbFileIsSecondaryStructure(pdbFile* pdb); extern long pdbFileIsHelix(pdbFile* pdb); extern long pdbFileIsSheet(pdbFile* pdb); extern long pdbFileIsTurn(pdbFile* pdb);
extern pdbFileParaTypeInteger pdbZValueGet(pdbFile* pdb);
extern pdbFileSecondaryStructureRecord* pdbFileSecondaryStructureRecordPrint(FILE* fpt, pdbFileSecondaryStructureRecord* second); 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);
extern int pdbSecondaryStructureSetFromPDB(pdbFile* pdb, pdbFileSecondaryStructure* second); extern int pdbNoSecondaryStructureSetFromPDB(pdbFile* pdb, pdbFileSecondaryStructure* second); extern int pdbSecondaryStructureAppend(pdbFileSecondaryStructure* second); extern pdbFileSecondaryStructureMode pdbFileWithSecondaryStructure(pdbFile* pdb, pdbFileSecondaryStructure* second);