pdbFile(API)

From EosPedia
Revision as of 07:16, 7 October 2014 by Kinoshita (Talk | contribs)

Jump to: navigation, search

DataManip/pdbFile is API to treat PDB file.

constant

Syntax for PDB file

String length definition

#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)

String definition

#define pdbRecordAtom       ("ATOM  ")
#define pdbRecordHeteroAtom ("HETATM")
#define pdbRecordHelix      ("HELIX ")
#define pdbRecordSheet      ("SHEET ")
#define pdbRecordTurn       ("TURN  ")
#define pdbRecordEnd        ("END   ")

Residue Name

residueName3: 3 characters, residueName1: 1 character

typedef struct residueName {
  char residueName3[4];
  char residueName1[2];
} residueName;

Define the struct in header file, and define residue name in /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"
};
Element 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


Secondary Structure

Secondary Structure Mode

typedef enum pdbFileSecondaryStructureMode {
	pdbFileSecondaryStructureModeNo    = 0,
	pdbFileSecondaryStructureModeHelix = 1,
	pdbFileSecondaryStructureModeSheet = 2,
	pdbFileSecondaryStructureModeTurn  = 3
} pdbFileSecondaryStructureMode;

Helix Structure

typedef enum pdbSecondaryStructureHelixClass {
	HelixClassRightHandedAlpha = 1,
	HelixClassRightHandedOmega = 2,
	HelixClassRightHandedPi    = 3,
	HelixClassRightHandedGammda= 4,
	HelixClassRightHanded310   = 5,
	HelixClassLeftHandedAlpha  = 6,
	HelixClassLeftHandedOmega  = 7,
	HelixClassLeftHandedGammda = 9,
	HelixClassPolyProline      = 10,
} pdbSecondaryStructureHelixClass;

struct

Management Data

This is struct to manage PDB data and Secondary Structure data.

typedef struct pdbFile {
  pdbRecord* top;
  pdbRecord* PDB;
  pdbFileParaTypeInteger nAtom;
  pdbFileSecondaryStructure second;
} pdbFile;
Member Description
top Top PDB data(Pointer)
PDB Current PDB data(Pointer)
nAtom Number of PDB data
second Secondary Structure data


Management Secondary Structure data

typedef struct pdbFileSecondaryStructure {
	int nSecondaryStructure;
	pdbFileSecondaryStructureRecord* top;
	pdbFileSecondaryStructureRecord* SecondaryStructure; 
} pdbFileSecondaryStructure;
Member Description
nSecondaryStructure Number of Secondary Structure data
top Top Secondary Structure data(Pointer)
SecondaryStructure Current Secondary Structure data(Pointer)


PDB data

This is struct to store PDB data. Manage by list, and correspond one line PDB file data.

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;
};
Member Description
FullRecord One line PDB data
Record One line PDB data as Atom Information
AtomSerialNumber
AtomName Atom Name
LocationIndicator
ResidueName Residue Name
ChainIdentifier Chain ID
ResidueSequenceNumber Residue Sequence Number
InsertionCode
Coord Coordinates of Atom
Occupancy Occupancy
TemperatureFactor Temperature Factor
FootnoteNumber
Footnote
prev Previous data
next Next data


typedef char  pdbFileParaTypeCharacter;
typedef long  pdbFileParaTypeInteger;
typedef float pdbFileParaTypeReal;

Coordinates of PDB data

typedef struct pdbCoord {
  pdbFileParaTypeReal x;
  pdbFileParaTypeReal y;
  pdbFileParaTypeReal z;
} pdbCoord;

Secondary Structure

This is struct to store Secondary Structure data.Manage by list, and correspond one line Secondary Structure.

typedef struct pdbFileSecondaryStructureRecord pdbFileSecondaryStructureRecord; 
struct pdbFileSecondaryStructureRecord {
	pdbFileSecondaryStructureMode mode;
	pdbSecondaryStructureHelix*   helix;
	pdbSecondaryStructureSheet*   sheet;
	pdbSecondaryStructureTurn*    turn;
	pdbSecondaryStructureNo*      no;

	pdbFileSecondaryStructureRecord* prev;
	pdbFileSecondaryStructureRecord* next;
};
Member Description
mode Secondary Structure Mode
helix Helix Structure data
sheet Sheet Structure data
turn Turn Structure data
no Non Secondary Structure data
prev Previous data
next Next data


Helix Structure

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;

Sheet Structure

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;

Turn Structure

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;

Non Secondary Structure

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

File Management

Read

Read data in file fpt, and store to manage data pdb.

extern void pdbFileRead(FILE* fpt, pdbFile* pdb);

Write

Write manage data pdb to file fpt as PDB. (Repeat to use pdbFileRecordPrint)

extern void pdbFileWrite(FILE* fpt, pdbFile* pdb);

Write manage data pdb to file fpt as tsv. (Repeat to use pdbFileRecordTablePrint)

extern void pdbFileTableWrite(FILE* fpt, pdbFile* pdb); 

Write coordinates list in manage data pdb to file fpt.

extern void pdbFileWriteCoord(FILE* fpt, pdbFile* pdb);

Treat PDB data

New Create

Create new data to pdb->PDB.
Create new data allocating memory. Then set it to top data. In addition, set NULL to the previous and the next data.

extern pdbRecord* pdbFileNew(pdbFile* pdb);

Append

Create new data to nex of pdb->PDB.
Create new data allocating memory. Then set it to current data, original data to previous data, and original next data to next data.

extern pdbRecord* pdbFileAppend(pdbFile* pdb);

Release

Release all of PDB data in pdb.

extern pdbRecord* pdbFileFree(pdbFile* pdb);

Write

Write pdb->PDB to file fpt as PDB.

extern pdbRecord* pdbFileRecordPrint(FILE* fpt, pdbFile* pdb);

Write pdb->PDB to file fpt as tsv.

extern pdbRecord* pdbFileRecordTablePrint(FILE* fpt, pdbFile* pdb);

Pointer move

Move to top data.

extern pdbRecord* pdbFileTop(pdbFile* pdb);

Return pointer of top data to pdb->top.

extern pdbRecord* pdbFileTopPointer(pdbFile* pdb);

Move to next data.(If don't correspond, return NULL.)

extern pdbRecord* pdbFileNext(pdbFile* pdb);

Move to next Atom data.(If don't correspond, return NULL.)

extern pdbRecord* pdbFileNextAtom(pdbFile* pdb);

Move to next alpha carbon data.(If don't correspond, return NULL.)

extern pdbRecord* pdbFileNextCA(pdbFile* pdb);

Move to previous data.(If don't correspond, return NULL.)

extern pdbRecord* pdbFilePrev(pdbFile* pdb);

Move to previous Atom data.(If don't correspond, return NULL.)

extern pdbRecord* pdbFilePrevAtom(pdbFile* pdb);

Move to previous alpha carbon data.(If don't correspond, return NULL.)

extern pdbRecord* pdbFilePrevCA(pdbFile* pdb);

Move to end data.

extern long pdbFileGoToEnd(pdbFile* pdb);

Check Data

If end data, return 1. Otherwise, return 0.

extern long pdbFileEnd(pdbFile* pdb);

If pdb->PDB->Record is end character(END), return 1. Otherwise, return 0.

extern long pdbFileIsEndLine(pdbFile* pdb);

If pdb->PDB->Record is Atom, return 1. Otherwise, return 0.

extern long pdbFileIsAtom(pdbFile* pdb);

If pdb->PDB->AtomName is alpha carbon( CA ), return 1. Otherwise, return 0.

extern long pdbFileIsCA(pdbFile* pdb);

Return Z value from pdb->PDB->AtomName. If don't correspond, return 6 as carbon.

extern pdbFileParaTypeInteger pdbZValueGet(pdbFile* pdb);

If residue name of pdb->PDB is "D" or "E", return 1. Otherwise, return 0.

extern long pdbFileIsNegative(pdbFile* pdb);

If residue name of pdb->PDB is "K" or "R", return 1. Otherwise, return 0.

extern long pdbFileIsPositive(pdbFile* pdb);

If residue name of pdb->PDB is "K", "R", "D", or "E", return 1. Otherwise, return 0.

extern long pdbFileIsCharge(pdbFile* pdb);

If records have same ChainID and their sequence number difference is 1, return 1. Otherwise, return 0.

extern long pdbRecordIsNearby(pdbRecord record1,pdbRecord record2);

Set data

Set (x, y, z) to pdb->PDB->Coord.

extern long pdbFileCoordSet(pdbFile* pdb, pdbFileParaTypeReal x, pdbFileParaTypeReal y, pdbFileParaTypeReal z);

Set temp to pdb->PDB->TemperatureFactor.

extern void pdbFileTemperatureFactorSet(pdbFile* pdb, double temp);

Set c to pdb->PDB->ChainIdentifier.

extern void pdbFileChainIdentifierSet(pdbFile* pdb, unsigned char c);

Set c to all Chain ID in pdb.

extern void pdbFileChainIdentifierSetAll(pdbFile* pdb, unsigned char c);

Set temp to pdb->PDB->Occupancy.

extern void pdbFileOccupancySet(pdbFile* pdb, double temp);

Get data

Output pdb->PDB->Coord to (x, y, z).

extern long pdbFileCoordGet(pdbFile* pdb, pdbFileParaTypeReal* x, pdbFileParaTypeReal* y, pdbFileParaTypeReal* z);

Return pdb->PDB->ResidueSequenceNumber.

extern long pdbFileResidueSequenceNumberGet(pdbFile* pdb);

Return residue name. (If mode=RESIDUE_THREECHAR_MODE, 3 characters. Otherwise, 1 character)

extern char* pdbFileResidueNameGet(pdbFile* pdb,int mode);

Return pdb->PDB->TemperatureFactor.

extern pdbFileParaTypeReal pdbFileTemperatureFactorGet(pdbFile* pdb);

Return pdb->PDB->ChainIdentifier.

extern unsigned char pdbFileChainIdentifierGet(pdbFile* pdb);

Return pdb->PDB->Occupancy.

extern pdbFileParaTypeReal pdbFileOccupancyGet(pdbFile* pdb);

Increase

Increase pdb->PDB->ResidueSequenceNumber by 1..

extern void pdbFileResidueSequenceNumberIncrement(pdbFile* pdb, int n);

Increase all Residue Sequence Number in pdb by 1.

extern void pdbFileResidueSequenceNumberIncrementAll(pdbFile* pdb, int n);

Copy

Copy src->PDB to dst->PDB.
Then, keep the relation to previous and next data, and return dst->PDB.

extern pdbRecord* pdbFileOneRecordCopy(pdbFile* dst, pdbFile* src);

Copy all PDB data in src to dst with overwrite.
コピーを行う際にdstに対してpdbFileNewを呼び出すので,dstをpdbFileFreeなどで解放してから使用して下さい.

extern void pdbFileCopyAll(pdbFile* dst, pdbFile* src);

srcの全てのPDBdataをPDBdatadst->PDBの後に挿入します.

extern void pdbFileAppendAll(pdbFile* dst, pdbFile* src);

PDBdatasrc->PDBがアルファ炭素のときのみdst->PDBへコピーします.
このとき,前,次dataとの関係は保持されたままで,コピーした場合はdst->PDB,されなかった場合はNULLを返します.

extern pdbRecord* pdbFileCAOnlyCopy(pdbFile* pdb, pdbFile* src);

srcの全てのアルファ炭素のPDBdataをdstへ上書きコピーします.
コピーを行う際にdstに対してpdbFileNewを呼び出すので,dstをpdbFileFreeなどで解放してから使用して下さい.

extern void pdbFileCAOnlyCopyAll(pdbFile* pdb, pdbFile* src);

srcからdstへのタンパク質1つ分のdataをコピーします.
dstは予めpdbFileNewによりInitializeして使用して下さい.

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);

Write

二次構造datasecondをPDB形式でfilefptへWriteます.(pdbFileSecondaryStructureRecordPrintを繰り返して使用)

extern void pdbFileWriteSecondaryStructure(FILE* fpt, pdbFileSecondaryStructure* second);

二次構造datasecondをPDB形式でfilefptへ一行分Writeます.

extern pdbFileSecondaryStructureRecord* pdbFileSecondaryStructureRecordPrint(FILE* fpt, pdbFileSecondaryStructureRecord* second);

追加

secondへメモリを確保して新規Createした二次構造dataを追加します.

extern int pdbSecondaryStructureAppend(pdbFileSecondaryStructure* second);

元々のdata数second->nSecondaryStructure=0の場合は,新規dataを先頭dataとして,前,次のdataはNULLとします.
そうでない場合は,新規dataを現在のdataとして,前を元のdata,次を元dataの次として,間に挿入します.

data判定

二次構造(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に含まれている場合にその二次元構造data,そうでない場合はpdbFileSecondaryStructureModeNoを返します.

extern pdbFileSecondaryStructureMode pdbFileWithSecondaryStructure(pdbFile* pdb, pdbFileSecondaryStructure* second);

Matrixによるアフィン変換

file処理

Matrix3D(API)#file処理を使用して,fileの処理を行います.

extern void pdbMatrixFileFormat(FILE* fpt);
extern void pdbMatrixFileRead(FILE* fpt, Matrix3D Matrix);
extern void pdbMatrixFileWrite(FILE* fpt, Matrix3D Matrix);

アフィン変換

MatrixMatrixを使用して,pdbにアフィン変換を行います.

extern void pdbTrans(pdbFile* pdb, Matrix3D Matrix);
extern void pdbTransCuda(float* hv, int n, Matrix3D Matrix);

Matrix3D(API)#アフィンMatrixを使用してMatrixをCreateし,pdbを回転します.
Euler Angleを使用した回転

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);

指定したAxisの順番で回転

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);