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

📄 score.c

📁 最经典的分子对结软件
💻 C
📖 第 1 页 / 共 3 页
字号:
    (      contact,      label,      molecule,      &grid->receptor,      atom,      rec_atom,      &score    );    inter->total += score;  }}/* ///////////////////////////////////////////////////////////////Routine to compute the intramolecular contact scorebetween two ligand atoms.2/97 te/////////////////////////////////////////////////////////////// */void calc_intra_contact(  SCORE_CONTACT *contact,  LABEL		*label,  MOLECULE	*molecule,  int		atomi,  int		atomj,  SCORE_PART	*intra){  float score;  calc_pairwise_contact  (    contact,    label,    molecule,    molecule,    atomi,    atomj,    &score  );  intra->total += score;}/* ///////////////////////////////////////////////////////////////Routine to compute the contact score between any two atoms.2/97 te/////////////////////////////////////////////////////////////// */void calc_pairwise_contact(  SCORE_CONTACT	*contact,  LABEL		*label,  MOLECULE	*origin,  MOLECULE	*target,  int		origin_atom,  int		target_atom,  float		*score){  float reference;  float sq_distance;  if  (    origin->atom[origin_atom].heavy_flag &&    target->atom[target_atom].heavy_flag &&    ((sq_distance = square_distance      (origin->coord[origin_atom], target->coord[target_atom]))        < SQR (contact->distance))  )  {    reference = contact->clash_overlap *      (label->vdw.member[origin->atom[origin_atom].vdw_id].radius +      label->vdw.member[target->atom[target_atom].vdw_id].radius);    if (sq_distance < SQR (reference))      *score = contact->clash_penalty;    else      *score = -1;  }  else    *score = 0;}/* ///////////////////////////////////////////////////////////////Routine to add contact score components.2/97 te/////////////////////////////////////////////////////////////// */void sum_contact(  SCORE_PART	*sum,  SCORE_PART	*increment){  sum->total += increment->total;}/* /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Routine to compute the intermolecular energy score betweena ligand atom and the receptor.2/97 te/////////////////////////////////////////////////////////////// */void calc_inter_energy(  SCORE_GRID	*grid,  SCORE_ENERGY	*energy,  LABEL		*label,  MOLECULE	*molecule,  int		atom,  SCORE_PART	*inter){  if (!energy->vdw_init_flag)    initialize_vdw_energy (energy, &label->vdw);  if (label->vdw.member[molecule->atom[atom].vdw_id].well_depth != 0.0)  {    if (grid->flag)      calc_inter_energy_grid (grid, energy, label, molecule, atom, inter);    else      calc_inter_score_cont      (        grid,        (void *) energy,        energy->distance,        (void (*)()) calc_inter_energy_cont,        label,        molecule,        atom,        inter      );  }}/* ///////////////////////////////////////////////////////////////Routine to initialize vdw parameters.2/97 te/////////////////////////////////////////////////////////////// */void initialize_vdw_energy(  SCORE_ENERGY	*energy,  LABEL_VDW	*label_vdw){  int i;  if (!label_vdw->init_flag)    get_vdw_labels (label_vdw);  ecalloc  (    (void **) &energy->vdwA,    label_vdw->total,    sizeof (float),    "energy vdwA terms",    global.outfile  );  ecalloc  (    (void **) &energy->vdwB,    label_vdw->total,    sizeof (float),    "energy vdwB terms",    global.outfile  );  for (i = 0; i < label_vdw->total; i++)  {    energy->vdwA[i] = sqrt (label_vdw->member[i].well_depth *      (float) energy->attractive_exponent /      (float) (energy->repulsive_exponent - energy->attractive_exponent) *      pow (2 * label_vdw->member[i].radius, energy->repulsive_exponent));    energy->vdwB[i] = sqrt (label_vdw->member[i].well_depth *      (float) energy->repulsive_exponent /      (float) (energy->repulsive_exponent - energy->attractive_exponent) *      pow (2 * label_vdw->member[i].radius, energy->attractive_exponent));  }  energy->dielectric_factor = 332.0 / energy->dielectric_factor;  energy->vdw_init_flag = TRUE;}/* /////////////////////////////////////////////////////////////// */void free_vdw_energy (SCORE_ENERGY *energy){  efree ((void **) &energy->vdwA);  efree ((void **) &energy->vdwB);}/* ///////////////////////////////////////////////////////////////Routine to compute the intermolecular energy score using a precomputed grid.2/97 te/////////////////////////////////////////////////////////////// */void calc_inter_energy_grid(  SCORE_GRID	*grid,  SCORE_ENERGY	*energy,  LABEL		*label,  MOLECULE	*molecule,  int		atom,  SCORE_PART	*inter){  int index[8];  int out_flag;  XYZ cube_coord;  void get_index_ (XYZ, XYZ, float *, int *, int *, int *, float *);  float get_value_ (float *, XYZ, int *);  if (label->vdw.member[molecule->atom[atom].vdw_id].well_depth != 0.0)  {    get_index_    (      molecule->coord[atom],      grid->origin,      &grid->spacing,      grid->span,      &out_flag,      index,      cube_coord    );    if (out_flag == 0)    {      inter->vdw +=        (          energy->vdwA[molecule->atom[atom].vdw_id] *            get_value_(energy->avdw, cube_coord, index) -          energy->vdwB[molecule->atom[atom].vdw_id] *            get_value_(energy->bvdw, cube_coord, index)        ) * energy->scale_vdw;      inter->electro +=        molecule->atom[atom].charge *        get_value_(energy->es, cube_coord, index) *        energy->scale_electro;      inter->total = inter->vdw + inter->electro;    }  }}/* ///////////////////////////////////////////////////////////////Routine to compute the intermolecular energy score in a continuousfashion given a ligand atom and a receptor atom.2/97 te/////////////////////////////////////////////////////////////// */void calc_inter_energy_cont(  SCORE_GRID	*grid,  SCORE_ENERGY	*energy,  LABEL		*label,  MOLECULE	*molecule,  int		atom,  int		rec_atom,  SCORE_PART	*inter){  float vdwA, vdwB, electro;  if (label->vdw.member[grid->receptor.atom[rec_atom].vdw_id].well_depth != 0.0)  {    calc_pairwise_energy    (      energy,      label,      molecule,      &grid->receptor,      atom,      rec_atom,      &vdwA,      &vdwB,      &electro    );    inter->vdw += (vdwA - vdwB) * energy->scale_vdw;    inter->electro += electro * energy->scale_electro;    inter->total = inter->vdw + inter->electro;  }}/* ///////////////////////////////////////////////////////////////Routine to compute the intramolecular energy scorebetween two ligand atoms.2/97 te/////////////////////////////////////////////////////////////// */void calc_intra_energy(  SCORE_ENERGY	*energy,  LABEL		*label,  MOLECULE	*molecule,  int		atomi,  int		atomj,  SCORE_PART	*intra){  float vdwA, vdwB, electro;  calc_pairwise_energy  (    energy,    label,    molecule,    molecule,    atomi,    atomj,    &vdwA,    &vdwB,    &electro  );  intra->vdw += (vdwA - vdwB) * energy->scale_vdw;  intra->electro += electro * energy->scale_electro;  intra->total = intra->vdw + intra->electro;/*  fprintf (global.outfile, "%s %s %f\n",    molecule->atom[atomi].name,    molecule->atom[atomj].name,    vdwA - vdwB + electro);*/}/* ///////////////////////////////////////////////////////////////Routine to compute the energy score between any two atoms.2/97 te/////////////////////////////////////////////////////////////// */void calc_pairwise_energy(  SCORE_ENERGY	*energy,  LABEL		*label,  MOLECULE	*origin,  MOLECULE	*target,  int		origin_atom,  int		target_atom,  float		*vdwA,  float		*vdwB,  float		*electro){  int power_exponent;  float power_distance;  float distance;  int square_flag = TRUE;  if (!energy->vdw_init_flag)    initialize_vdw_energy (energy, &label->vdw);  if  (    (label->vdw.member[origin->atom[origin_atom].vdw_id].well_depth != 0.0) &&    (label->vdw.member[target->atom[target_atom].vdw_id].well_depth != 0.0) &&    ((distance = square_distance      (origin->coord[origin_atom], target->coord[target_atom]))      <= SQR (energy->distance))  )  {    distance = 1.0 / MAX (distance, DISTANCE_MIN);    if (energy->repulsive_exponent % 2)    {      power_exponent = energy->repulsive_exponent;      distance = sqrt (distance);      square_flag = FALSE;    }    else      power_exponent = energy->repulsive_exponent / 2;    POWER (distance, power_exponent, power_distance);    *vdwA =      energy->vdwA[origin->atom[origin_atom].vdw_id] *      energy->vdwA[target->atom[target_atom].vdw_id] *      power_distance;    if (square_flag == TRUE)    {      if (energy->repulsive_exponent % 2)      {        power_exponent = energy->attractive_exponent;        distance = sqrt (distance);        square_flag = FALSE;      }      else        power_exponent = energy->attractive_exponent / 2;    }    else      power_exponent = energy->attractive_exponent;    POWER (distance, power_exponent, power_distance);    *vdwB =      energy->vdwB[origin->atom[origin_atom].vdw_id] *      energy->vdwB[target->atom[target_atom].vdw_id] *      power_distance;    *electro =      energy->dielectric_factor *      origin->atom[origin_atom].charge *      target->atom[target_atom].charge *      (energy->distance_dielectric == TRUE          ? (square_flag == TRUE ? distance : SQR (distance))          : (square_flag == TRUE ? sqrt (distance) : distance));  }  else    *vdwA = *vdwB = *electro = 0;}/* ///////////////////////////////////////////////////////////////Routine to add energy score components.2/97 te/////////////////////////////////////////////////////////////// */void sum_energy(  SCORE_PART	*sum,  SCORE_PART	*increment){  sum->vdw += increment->vdw;  sum->electro += increment->electro;  sum->total = sum->vdw + sum->electro;}/* /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Routine to compute the intermolecular chemical score betweena ligand atom and the receptor.2/97 te

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -