?? pocket.c
字號:
# include "grow.h"
Pocket::Pocket()
{
max_x=min_x=0;
max_y=min_y=0;
max_z=min_z=0;
num_grid=0; grid=NULL;
num_atom=0; atom=NULL;
}
Pocket::~Pocket()
{
delete [] grid;
delete [] atom;
}
void Pocket::Show_Content() const
{
int i;
printf("min_x=%d max_x=%d\n",min_x,max_x);
printf("min_y=%d max_y=%d\n",min_y,max_y);
printf("min_z=%d max_z=%d\n",min_z,max_z);
printf("num_grid=%d\n",num_grid);
for(i=0;i<num_grid;i++) printf("Grid %d\t%c\n", i+1, grid[i]);
printf("num_atom=%d\n",num_atom);
for(i=0;i<num_atom;i++)
{
printf("Atom: ");
printf("%3d ", atom[i].id);
printf("%5s ", atom[i].type);
printf("%7.2f ", atom[i].coor[0]);
printf("%7.2f ", atom[i].coor[1]);
printf("%7.2f ", atom[i].coor[2]);
printf("%4.2f ", atom[i].R);
printf("%5.2f ", atom[i].logp);
printf("%2s ", atom[i].hb);
printf("%7.2f ", atom[i].root[0]);
printf("%7.2f ", atom[i].root[1]);
printf("%7.2f ", atom[i].root[2]);
printf("\n");
}
return;
}
void Pocket::Read_Grids(char *filename)
{
FILE *fp;
int i,tmp;
char buf[160],head[80];
if((fp=fopen(filename,"r"))==NULL) Openning_File_Error(filename);
do
{
if(fgets(buf,160,fp)==NULL) Reading_File_Error(filename);
else sscanf(buf,"%s",head);
} while(strcmp(head,"<X_boundary>"));
sscanf(buf,"%*s%d%d",&min_x,&max_x); // X_boundary
fgets(buf,160,fp); // Y_boundary
sscanf(buf,"%*s%d%d",&min_y,&max_y);
fgets(buf,160,fp); // Z_boundary
sscanf(buf,"%*s%d%d",&min_z,&max_z);
fgets(buf,160,fp);
sscanf(buf,"%*s%d",&num_grid);
grid=new char[num_grid];
if(grid==NULL) Memory_Allocation_Error();
for(i=0;i<num_grid;i++)
{
fgets(buf,160,fp);
sscanf(buf,"%d%*f%*f%*f%s",&tmp,head);
grid[i]=head[0];
if(tmp!=(i+1))
{
puts("Warning: something wrong in reading the grids");
puts("This may lead to unpredictable results.");
}
}
fclose(fp);
return;
}
void Pocket::Read_Atoms(char *filename)
{
FILE *fp;
int i;
char buf[160],head[80];
if((fp=fopen(filename,"r"))==NULL) Openning_File_Error(filename);
do
{
if(fgets(buf,160,fp)==NULL) Reading_File_Error(filename);
else sscanf(buf,"%s",head);
} while(strcmp(head,"<Atom_number>"));
sscanf(buf,"%*s%d",&num_atom);
// read the pocket atoms
atom=new Atom[num_atom];
if(atom==NULL) Memory_Allocation_Error();
for(i=0;i<num_atom;i++)
{
fgets(buf,160,fp);
sscanf(buf,"%d%*d%s%f%f%f%f%f%s%f%f%f",
&atom[i].id,
atom[i].type,
&atom[i].coor[0],
&atom[i].coor[1],
&atom[i].coor[2],
&atom[i].R,
&atom[i].logp,
atom[i].hb,
&atom[i].root[0],
&atom[i].root[1],
&atom[i].root[2]);
if(atom[i].id!=(i+1))
{
puts("Warning: something wrong in reading the pocket");
puts("This may lead to unpredictable results.");
}
else atom[i].valid=1;
}
fclose(fp);
return;
}
char Pocket::Get_Grid_Property(float coor[3]) const
{
if(coor[0]<min_x) return 'E';
if(coor[0]>max_x) return 'E';
if(coor[1]<min_y) return 'E';
if(coor[1]>max_y) return 'E';
if(coor[2]<min_z) return 'E';
if(coor[2]>max_z) return 'E';
int i,j,k,num;
int dx,dy,dz;
dx=(max_x-min_x)*2+1; // grid space is 0.5A
dy=(max_y-min_y)*2+1;
dz=(max_z-min_z)*2+1;
i=(int)((coor[0]-min_x)*2.0+0.500);
j=(int)((coor[1]-min_y)*2.0+0.500);
k=(int)((coor[2]-min_z)*2.0+0.500);
num=i*dy*dz+j*dz+k;
return grid[num];
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -