|

楼主 |
发表于 2005-3-13 11:19:40
|
显示全部楼层
for(j=-100;j<101;j++){
for(q=0;q<10;q++) { printf("\n");
for(h=0;h<27;h++){potent[q][h]=energy[q][h]+0.3*j;printf(" %f",potent[q][h]);}} printf("\n");
xm=0.0;ym=0.0;xs=0.0;ys=0.0;r=0.0;a=0.0;b=0.0;fm=0.0;fzx=0.0;fzy=0.0;
for(nam=0;nam<28;nam++)
{
cl1=(Cluster *)malloc(sizeof(Cluster));cl2=(Cluster *)malloc(sizeof(Cluster));
strcpy(filename1,name[nam]);strcpy(filename2,name[nam]);
strcat(filename1,append1);strcat(filename2,append2);
printf("File is %s %s\n",filename1,filename2);
ReadPDB(filename1,cl1);ReadPDB(filename2,cl2);
fre=0.00;occu=0.00;n1=0;n2=0;i=0;
for(m1=0;m1<cl1->nchain;m1++) {ch1=cl1->Cincluster[m1];
for(p1=ch1->Astart->next; p1; p1=p1->next) {
for(m2=0;m2<cl2->nchain;m2++) {ch2=cl2->Cincluster[m2];
for(p2=ch2->Astart->next; p2; p2=p2->next) {
if(p1->alt >= 'A' && p1->alt == p2->alt) continue;
dist=Distance(p1->x, p2->x);
if(dist<2.6) {
printf("Distacne too small: %f\n",dist);
} else {
i=(int)((dist*10-20)/2);
if(i<30) {
n1=AtomClass(p1->name, p1->res);
n2=AtomClass(p2->name, p2->res);
k=PairTypes(n1,n2);
occu=(p1->q)*(p2->q);
fre+=(potent[k][i-3])*(occu);
}
}
}
}
}
}
g[nam]=fre;xs+=g[nam];ys+=yy[nam];
printf("|j-value%d |jiaoer is %f for code %s\n",j,fre,filename1);
release(cl1);release(cl2);
free(cl1);free(cl2);
}
xm=xs/28;ym=ys/28;
for(li=0;li<28;li++){fm+=(g[li]-xm)*(yy[li]-ym);fzx+=(g[li]-xm)*(g[li]-xm);fzy+=(yy[li]-ym)*(yy[li]-ym);}
r=fm/sqrt(fzx*fzy);b=fm/fzx;a=ym-b*xm;
printf("COIEFFICIENT %6.3f a %f b %f\n",r,a,b);
if(r>rr){rr=r;jr=j;}
}
printf("From -100 to 100 largest r is %f in %d",rr,jr);
}
void ReadPDB(char *fname,Cluster *cl)
{
FILE *f,*fopen();
Atom *q,*p;
Chain *ch;
// Cluster *cl;
char buf[limit],tmp[15],name[50],chain;
int i,j,k,n=0;
f=fopen(fname,"r");
/* Pstart=(Atom *)malloc(sizeof(Atom));
q=Pstart; q->next=NULL;*/
j=0;k=0; chain='a';
// cl=(Cluster *)malloc(sizeof(Cluster));
cl->next=NULL;
while(( i=FGetLine(f,buf) ) > -1) {
if(strncmp(buf,"ATOM",4) == 0) {
p=ReadATOM(buf);
// if(ReadATOM(buf)) {
if(p->chain!=chain){ ch=(Chain *)malloc(sizeof(Chain));ch->next=NULL;
cl->Cincluster[n]=ch;
if(n!=0)cl->Cincluster[n-1]->natom=k;n++;k=0;
ch->Astart=(Atom *)malloc(sizeof(Atom));q=ch->Astart;q->next=NULL;
}
chain=p->chain;
q->next=p; q=p; q->next=NULL; j++; k++;
// }
}
}
cl->Cincluster[n-1]->natom=k; cl->nchain=n;
printf("The natom is %d\n",j);
close(f);
}
void release(Cluster *cl)
{int m1;
Chain *ch1,*chq;
Atom *p1,*p1q;
for(m1=0;m1<cl->nchain;m1++) {ch1=cl->Cincluster[m1];
for(p1=ch1->Astart->next; p1; p1=p1q){p1q=p1->next;free(p1);}
free(ch1);}
}
[/CODE] [CODE] |
|