⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 logp.c

📁 药物开发中的基于结构的从头设计代码
💻 C
📖 第 1 页 / 共 3 页
字号:
{
        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 + -