📄 logp.c
字号:
{
int i,mark;
id--;
mark=TRUE;
for(i=0;i<num_atom;i++)
{
if(i==id) continue;
else if(!strcmp(atom[i].type,"F")||
!strcmp(atom[i].type,"Cl")||
!strcmp(atom[i].type,"Br")||
!strcmp(atom[i].type,"I")||
atom[i].type[0]=='N'||
atom[i].type[0]=='O'||
atom[i].type[0]=='S'||
atom[i].type[0]=='P')
{
if(Connection_1_2_Check(atom[id].id,atom[i].id)==TRUE)
{mark=FALSE; break;}
else if(Connection_1_3_Check(atom[id].id,atom[i].id)==TRUE)
{mark=FALSE; break;}
else if(Connection_1_4_Check(atom[id].id,atom[i].id)==TRUE)
{mark=FALSE; break;}
else continue;
}
else continue;
}
return mark;
}
int Ligand::Count_Internal_HBond()
{
int i,j,num,mark1,mark2;
int *record;
record=new int[num_atom];
if(record==NULL) Memory_Allocation_Error();
for(i=0;i<num_atom;i++) record[i]=0;
num=0;
for(i=0;i<num_atom;i++)
{
if(strcmp(atom[i].hb,"D")&&strcmp(atom[i].hb,"DA")) continue;
else if(atom[i].ring!=0) continue; // not allowed in ring
if(Adjacent_Ring_Check(atom[i].id)==FALSE) mark1=FALSE;
else mark1=TRUE;
for(j=0;j<num_atom;j++)
{
if(i==j) continue;
if(strcmp(atom[j].hb,"A")&&
strcmp(atom[j].hb,"DA")) continue;
else if(atom[j].ring!=0) continue; // not in ring
if(Adjacent_Ring_Check(atom[j].id)==FALSE) mark2=FALSE;
else mark2=TRUE;
if(mark1==TRUE&&mark2==TRUE)
{
if(Connection_1_4_Check(atom[i].id,
atom[j].id)==FALSE) continue;
else if(record[i]>0||record[j]>0) continue;
else
{
num++;
record[i]++; record[j]++;
atom[i].logp+=((LOGP_INTERNAL_HBOND)/2.0);
atom[j].logp+=((LOGP_INTERNAL_HBOND)/2.0);
break;
}
}
else if(mark1==TRUE&&mark2==FALSE)
{
if(Connection_1_5_Check(atom[i].id,
atom[j].id)==FALSE) continue;
else if(record[i]>0||record[j]>0) continue;
else
{
num++;
record[i]++; record[j]++;
atom[i].logp+=((LOGP_INTERNAL_HBOND)/2.0);
atom[j].logp+=((LOGP_INTERNAL_HBOND)/2.0);
break;
}
}
else if(mark2==FALSE&&mark2==TRUE)
{
if(Connection_1_5_Check(atom[i].id,
atom[j].id)==FALSE) continue;
else if(record[i]>0||record[j]>0) continue;
else
{
num++;
record[i]++; record[j]++;
atom[i].logp+=((LOGP_INTERNAL_HBOND)/2.0);
atom[j].logp+=((LOGP_INTERNAL_HBOND)/2.0);
break;
}
}
else continue;
}
}
delete [] record;
return num;
}
int Ligand::Adjacent_Ring_Check(int id) const
{
int i,num,tmp,mark;
id--;
mark=FALSE; num=atom[id].num_neib;
for(i=0;i<num;i++)
{
tmp=atom[id].neib[i];
if(atom[tmp-1].ring!=0) {mark=tmp; break;}
else continue;
}
return mark;
}
int Ligand::Count_Halogen_1_3_Pair()
{
int i,j;
int num1,num2;
num1=num2=0;
for(i=0;i<num_atom-1;i++)
{
if(strcmp(atom[i].type,"F")) continue;
for(j=i+1;j<num_atom;j++)
{
if(strcmp(atom[j].type,"F")) continue;
else if(Connection_1_3_Check(atom[i].id,atom[j].id)
==FALSE) continue;
else
{
num1++;
atom[i].logp+=((LOGP_HALOGEN_PAIR)/2.0);
atom[j].logp+=((LOGP_HALOGEN_PAIR)/2.0);
continue;
}
}
}
for(i=0;i<num_atom-1;i++)
{
if(strcmp(atom[i].type,"Cl")&&
strcmp(atom[i].type,"Br")&&
strcmp(atom[i].type,"I")) continue;
for(j=i+1;j<num_atom;j++)
{
if(strcmp(atom[j].type,"Cl")&&
strcmp(atom[j].type,"Br")&&
strcmp(atom[j].type,"I")) continue;
else if(Connection_1_3_Check(atom[i].id,atom[j].id)
==FALSE) continue;
else
{
num2++;
atom[i].logp+=((LOGP_HALOGEN_PAIR)/2.0);
atom[j].logp+=((LOGP_HALOGEN_PAIR)/2.0);
continue;
}
}
}
return (num1+num2);
}
int Ligand::Count_Nar_1_4_Pair()
{
int i,j,num,tmp1,tmp2,tmp3,tmp4;
num=0;
for(i=0;i<num_atom-1;i++)
{
if(strcmp(atom[i].type,"N.ar")) continue;
tmp1=atom[i].neib[0]; tmp2=atom[i].neib[1];
for(j=i+1;j<num_atom;j++)
{
if(strcmp(atom[j].type,"N.ar")) continue;
else if(Connection_1_4_Check(atom[i].id, atom[j].id)
==FALSE) continue;
else
{
tmp3=atom[j].neib[0]; tmp4=atom[j].neib[1];
if(Connection_1_2_Check(tmp1,tmp3)==TRUE)
{
if(Connection_1_2_Check(tmp2,tmp4)==TRUE)
{
num++;
atom[i].logp+=((LOGP_NAR_PAIR)/2.0);
atom[j].logp+=((LOGP_NAR_PAIR)/2.0);
}
else continue;
}
else if(Connection_1_2_Check(tmp1,tmp4)==TRUE)
{
if(Connection_1_2_Check(tmp2,tmp3)
==TRUE)
{
num++;
atom[i].logp+=((LOGP_NAR_PAIR)/2.0);
atom[j].logp+=((LOGP_NAR_PAIR)/2.0);
}
else continue;
}
else continue;
}
}
}
return num;
}
int Ligand::Count_O3_1_4_Pair()
{
int i,j,num;
int *record;
record=new int[num_atom];
if(record==NULL) Memory_Allocation_Error();
for(i=0;i<num_atom;i++) record[i]=0;
num=0;
for(i=0;i<num_atom-1;i++)
{
if(strcmp(atom[i].type,"O.3")) continue;
else if(atom[i].num_nonh!=2) continue;
else if(atom[i].ring!=0) continue;
else if(Adjacent_Aromatic_Check(atom[i].id)==FALSE) continue;
for(j=i+1;j<num_atom;j++)
{
if(strcmp(atom[j].type,"O.3")) continue;
else if(atom[j].num_nonh!=2) continue;
else if(atom[j].ring!=0) continue;
else if(Adjacent_Aromatic_Check(atom[j].id)==FALSE)
continue;
else if(Connection_1_4_Check(atom[i].id,atom[j].id)
==FALSE) continue;
else if(record[i]>0||record[j]>0) continue;
else
{
num++;
atom[i].logp+=((LOGP_O3_PAIR)/2.0);
atom[j].logp+=((LOGP_O3_PAIR)/2.0);
record[i]++; record[j]++;
continue;
}
}
}
delete [] record;
return num;
}
int Ligand::Count_Acceptor_1_5_Pair()
{
int i,j,num,tmp1,tmp2;
num=0;
for(i=0;i<num_atom-1;i++)
{
if(strcmp(atom[i].hb,"A")) continue;
tmp1=atom[i].neib[0]-1;
if(atom[tmp1].type[0]=='S') continue;
else if(atom[tmp1].type[0]=='P') continue;
else if(atom[tmp1].ring!=0) continue;
for(j=i+1;j<num_atom;j++)
{
if(strcmp(atom[j].hb,"A")) continue;
tmp2=atom[j].neib[0]-1;
if(atom[tmp2].type[0]=='S') continue;
else if(atom[tmp2].type[0]=='P') continue;
else if(atom[tmp2].ring!=0) continue;
if(Connection_1_5_Check(atom[i].id, atom[j].id)
==FALSE) continue;
else
{
num++;
atom[i].logp+=((LOGP_ACCEPTOR_PAIR)/2.0);
atom[j].logp+=((LOGP_ACCEPTOR_PAIR)/2.0);
continue;
}
}
}
return num;
}
int Ligand::Count_Salicylic_Acid()
{
int i,j,num,tmp,mark;
num=0;
for(i=0;i<num_atom;i++)
{
if(strcmp(atom[i].type,"O.2")) continue;
tmp=atom[i].neib[0]-1;
if(atom[tmp].type[0]!='C') continue;
else if(atom[tmp].ring!=0) continue;
else if(Adjacent_Aromatic_Check(atom[tmp].id)==FALSE) continue;
mark=FALSE;
for(j=0;j<num_atom;j++)
{
if(i==j) continue;
else if(strcmp(atom[j].type,"O.3")) continue;
else if(atom[j].ring!=0) continue;
else if(Connection_1_3_Check(atom[i].id, atom[j].id)
==FALSE) continue;
else {mark=TRUE; break;}
}
if(mark==FALSE) continue;
mark=FALSE;
for(j=0;j<num_atom;j++)
{
if(i==j) continue;
else if(strcmp(atom[j].type,"O.3")) continue;
else if(strcmp(atom[j].hb,"DA")) continue;
else if(Adjacent_Aromatic_Check(atom[j].id)==FALSE)
continue;
else if(Connection_1_5_Check(atom[i].id, atom[j].id)
==FALSE) continue;
else
{
num++;
atom[i].logp+=((LOGP_SALICYLIC_ACID)/2.0);
atom[j].logp+=((LOGP_SALICYLIC_ACID)/2.0);
break;
}
}
if(num!=0) break;
}
return num;
}
int Ligand::Adjacent_Aromatic_Check(int id) const
{
int i,num,tmp,mark;
id--;
mark=FALSE; num=atom[id].num_neib;
for(i=0;i<num;i++)
{
tmp=atom[id].neib[i];
if(!strcmp(atom[tmp-1].type,"C.ar")) {mark=tmp; break;}
else continue;
}
return mark;
}
int Ligand::Count_Amino_Acid()
{
int i,j,tmp,num,mark;
num=0;
for(i=0;i<num_atom;i++)
{
if(strcmp(atom[i].type,"O.2")) continue;
tmp=atom[i].neib[0]-1;
if(atom[tmp].type[0]!='C') continue;
else if(atom[tmp].ring!=0) continue;
mark=FALSE;
for(j=0;j<num_atom;j++)
{
if(i==j) continue;
else if(strcmp(atom[j].type,"O.3")) continue;
else if(strcmp(atom[j].hb,"DA")) continue;
else if(atom[j].ring!=0) continue;
else if(Connection_1_3_Check(atom[i].id, atom[j].id)
==FALSE) continue;
else {mark=TRUE; break;}
}
if(mark==FALSE) continue;
for(j=0;j<num_atom;j++)
{
if(strcmp(atom[j].xtype,"N.3.h2.pi=0")) continue;
else if(Connection_1_4_Check(atom[i].id, atom[j].id)
==FALSE) continue;
else
{
num++;
atom[i].logp+=((LOGP_AMINO_ACID)/2.0);
atom[j].logp+=((LOGP_AMINO_ACID)/2.0);
break;
}
}
if(num!=0) break;
for(j=0;j<num_atom;j++)
{
if(strcmp(atom[j].type,"N.ar")) continue;
else if(Connection_1_4_Check(atom[i].id, atom[j].id)
==FALSE) continue;
else
{
num++;
atom[i].logp+=((LOGP_AMINO_ACID)/2.0);
atom[j].logp+=((LOGP_AMINO_ACID)/2.0);
break;
}
}
if(num!=0) break;
}
return num;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -