#include <math.h>#include <string.h>#include "mode.h"#include "ichister.h"#include "ichiring.h"#include "ichi.h"#include "ichitaut.h"#include "ichicomp.h"#include "ichicant.h"#include "util.h"#include "bcf_s.h"
 Include dependency graph for ichister.c:Macros | |
| #define | ZTYPE_DOWN (-1) /* should be equal to -ZTYPE_UP */ | 
| #define | ZTYPE_NONE 0 | 
| #define | ZTYPE_UP 1 /* should be equal to -ZTYPE_DOWN */ | 
| #define | ZTYPE_3D 3 | 
| #define | ZTYPE_EITHER 9999 | 
| #define | ARR_DIM 3 /* djb-rwth: default dimension of arrays */ | 
| #define | MIN_ANGLE 0.10 /* 5.73 degrees */ /* treshold for proximity to in-line angle of 180 deg */ | 
| #define | MIN_SINE 0.03 /*min edge/plane angle in case the tetrahedra has significantly different edge length */ | 
| #define | MIN_ANGLE_RELAXED 0.001 | 
| #define | MIN_SINE_RELAXED 0.001 | 
| #define | MIN_ANGLE_DBOND 0.087156 /* 5 degrees = max angle considered as too small for unambiguous double bond stereo */ | 
| #define | MIN_SINE_OUTSIDE 0.06 /* min edge/plane angle to determine whether the central atom is outside of the tetrahedra */ | 
| #define | MIN_SINE_SQUARE 0.125 /* min edge/plane angle in case the tetrahedra is somewhat close to a parallelogram */ | 
| #define | MIN_SINE_EDGE 0.167 /* min sine/(min.edge) ratio to avoid undefined in case of long edges */ | 
| #define | MIN_LEN_STRAIGHT 1.900 /* min length of two normalized to 1 bonds in a straight line */ | 
| #define | MAX_SINE 0.70710678118654752440084436210485 /* 1/sqrt(2)=sin(pi/4) */ | 
| #define | MIN_BOND_LEN 0.000001 | 
| #define | ZERO_LENGTH MIN_BOND_LEN | 
| #define | ZERO_FLOAT 1.0e-12 | 
| #define | BOND_PARITY_UNDEFINED 64 | 
| #define | MPY_SINE 1.00 /* was 3.0 */ | 
| #define | MAX_EDGE_RATIO 2.50 /* max max/min edge ratio for a tetrahedra close to a parallelogram */ | 
| #define | T2D_OKAY 1 | 
| #define | T2D_WARN 2 | 
| #define | T2D_UNDF 4 | 
| #define | ZERO_ANGLE 0.000001 | 
| #define | SZELEM1 "C\000","Si", "Ge", "Sn", "As", "B\000", | 
| #define | CCHARGE1 0, 0, 0, 0, 1, -1, | 
| #define | CNUMBONDSANDH1 4, 4, 4, 4, 4, 4, | 
| #define | CCHEMVALENCEH1 4, 4, 4, 4, 4, 4, | 
| #define | CHAS3MEMBRING1 0, 0, 0, 0, 0, 0, | 
| #define | CREQUIRDNEIGH1 0, 0, 0, 0, 3, 0, | 
| #define | SZELEM2 "S\000","S\000","S\000","S\000","Se", "Se", "Se", "Se", | 
| #define | CCHARGE2 0, 0, 1, 1, 0, 0, 1, 1, | 
| #define | CNUMBONDSANDH2 3, 4, 3, 4, 3, 4, 3, 4, | 
| #define | CCHEMVALENCEH2 4, 6, 3, 5, 4, 6, 3, 5, | 
| #define | CHAS3MEMBRING2 0, 0, 0, 0, 0, 0, 0, 0, | 
| #define | CREQUIRDNEIGH2 3, 3, 3, 3, 3, 3, 3, 3, | 
| #define | SZELEM3 "N\000","N\000","N\000","P\000","P\000","P\000", "As", | 
| #define | CCHARGE3 0, 1, 0, 1, 0, 0, 0, | 
| #define | CNUMBONDSANDH3 4, 4, 3, 4, 4, 3, 3, | 
| #define | CCHEMVALENCEH3 5, 4, 3, 4, 5, 3, 3, | 
| #define | CHAS3MEMBRING3 0, 0, 1, 0, 0, 0, 0, | 
| #define | CREQUIRDNEIGH3 3, 3, 1, 3, 3, 2, 2, | 
| #define | PHOSPHINE_STEREO 19 /* the number must match Phosphine number in the comments, see above */ | 
| #define | ARSINE_STEREO 20 /* the number must match Arsine number in the comments, see above */ | 
| #define | AB_NEGATIVE 0x10 | 
| #define | AB_UNKNOWN 0x20 | 
| #define | ADD_EXPLICIT_HYDROGEN_NEIGH 1 | 
| #define | ADD_EXPLICIT_LONE_PAIR_NEIGH 2 | 
Functions | |
| static int | save_a_stereo_bond (int z_prod, int result_action, int at1, int ord1, AT_NUMB *stereo_bond_neighbor1, S_CHAR *stereo_bond_ord1, S_CHAR *stereo_bond_z_prod1, S_CHAR *stereo_bond_parity1, int at2, int ord2, AT_NUMB *stereo_bond_neighbor2, S_CHAR *stereo_bond_ord2, S_CHAR *stereo_bond_z_prod2, S_CHAR *stereo_bond_parity2) | 
| static double | get_z_coord (inp_ATOM *at, int cur_atom, int neigh_no, int *nType, int bPointedEdgeStereo) | 
| static double | len3 (const double c[]) | 
| static double | len2 (const double c[]) | 
| static void * | diff3 (const double a[], const double b[], double result[]) | 
| static void | add3 (const double a[], const double b[], double result[]) | 
| static void | mult3 (const double a[], double b, double result[]) | 
| static void | change_sign3 (const double a[], double result[]) | 
| double | dot_prod3 (const double a[], const double b[]) | 
| static int | dot_prodchar3 (const S_CHAR a[], const S_CHAR b[]) | 
| static double | triple_prod (double a[], double b[], double c[], double *sine_value) | 
| static double | triple_prod_and_min_abs_sine (double at_coord[][3], double *min_sine) | 
| static int | are_3_vect_in_one_plane (double at_coord[][3], double min_sine) | 
| static int | triple_prod_char (inp_ATOM *at, int at_1, int i_next_at_1, S_CHAR *z_dir1, int at_2, int i_next_at_2, S_CHAR *z_dir2) | 
| static int | CompDble (const void *a1, const void *a2, void *) | 
| static int | Get2DTetrahedralAmbiguity (CANON_GLOBALS *pCG, double at_coord[][3], int bAddExplicitNeighbor, int bFix2DstereoBorderCase, double vMinAngle) | 
| static double | triple_prod_and_min_abs_sine2 (double at_coord[][3], double central_at_coord[], int bAddedExplicitNeighbor, double *min_sine, int *bAmbiguous, double vMinSine) | 
| static int | are_4at_in_one_plane (double at_coord[][3], double min_sine) | 
| static int | bInpAtomHasRequirdNeigh (inp_ATOM *at, int cur_at, int RequirdNeighType, int NumDbleBonds, int bStereoAtZz) | 
| static int | bIsSuitableHeteroInpAtom (inp_ATOM *at) | 
| static int | bIsOxide (inp_ATOM *at, int cur_at) | 
| static int | half_stereo_bond_parity (inp_ATOM *at, int cur_at, inp_ATOM *at_removed_H, int num_removed_H, S_CHAR *z_dir, int bPointedEdgeStereo, int vABParityUnknown) | 
| static int | get_allowed_stereo_bond_type (int bond_type) | 
| static int | can_be_a_stereo_bond_with_isotopic_H (inp_ATOM *at, int cur_at, INCHI_MODE nMode) | 
| static int | half_stereo_bond_action (int nParity, int bUnknown, int bIsotopic, int vABParityUnknown) | 
| static int | set_stereo_bonds_parity (sp_ATOM *out_at, inp_ATOM *at, int at_1, inp_ATOM *at_removed_H, int num_removed_H, INCHI_MODE nMode, QUEUE *q, AT_RANK *nAtomLevel, S_CHAR *cSource, AT_RANK min_sb_ring_size, int bPointedEdgeStereo, int vABParityUnknown) | 
| static int | can_be_a_stereo_atom_with_isotopic_H (inp_ATOM *at, int cur_at, int bPointedEdgeStereo, int bStereoAtZz) | 
| static int | set_stereo_atom_parity (CANON_GLOBALS *pCG, sp_ATOM *out_at, inp_ATOM *at, int cur_at, inp_ATOM *at_removed_H, int num_removed_H, int bPointedEdgeStereo, int vABParityUnknown, int LooseTSACheck, int bStereoAtZz) | 
| int | ReconcileCmlIncidentBondParities (inp_ATOM *at, int cur_atom, int prev_atom, S_CHAR *visited, int bDisconnected) | 
| int | comp_AT_NUMB (const void *a1, const void *a2, void *) | 
| int | GetHalfStereobond0DParity (inp_ATOM *at, int cur_at, AT_NUMB nSbNeighOrigAtNumb[], int nNumExplictAttachments, int bond_parity, int nFlag) | 
| int | GetStereocenter0DParity (CANON_GLOBALS *pCG, inp_ATOM *at, int cur_at, int j1, AT_NUMB nSbNeighOrigAtNumb[], int nFlag) | 
| int | GetSbNeighOrigAtNumb (inp_ATOM *at, int cur_at, inp_ATOM *at_removed_H, int num_removed_H, AT_NUMB nSbNeighOrigAtNumb[]) | 
| int | FixSb0DParities (inp_ATOM *at, int chain_length, int at_1, int i_next_at_1, S_CHAR z_dir1[], int at_2, int i_next_at_2, S_CHAR z_dir2[], int *pparity1, int *pparity2) | 
| void * | cross_prod3 (const double a[], const double b[], double result[]) | 
| int | bCanInpAtomBeAStereoCenter (inp_ATOM *at, int cur_at, int bPointedEdgeStereo, int bStereoAtZz) | 
| int | bAtomHasValence3 (char *elname, S_CHAR charge, S_CHAR radical) | 
| int | bCanAtomHaveAStereoBond (char *elname, S_CHAR charge, S_CHAR radical) | 
| int | bCanAtomBeMiddleAllene (char *elname, S_CHAR charge, S_CHAR radical) | 
| int | bCanAtomBeTerminalAllene (char *elname, S_CHAR charge, S_CHAR radical) | 
| int | FixUnkn0DStereoBonds (inp_ATOM *at, int num_at) | 
| Fix unknown stereo bonds in the input atoms.   | |
| int | set_stereo_parity (CANON_GLOBALS *pCG, inp_ATOM *at, sp_ATOM *at_output, int num_at, int num_removed_H, int *nMaxNumStereoAtoms, int *nMaxNumStereoBonds, INCHI_MODE nMode, int bPointedEdgeStereo, int vABParityUnknown, int bLooseTSACheck, int bStereoAtZz) | 
| int | ReconcileAllCmlBondParities (inp_ATOM *at, int num_atoms, int bDisconnected) | 
| Reconcile all CML bond parities in the input atoms.   | |
| int | get_opposite_sb_atom (inp_ATOM *at, int cur_atom, int icur2nxt, int *pnxt_atom, int *pinxt2cur, int *pinxt_sb_parity_ord) | 
| #define AB_NEGATIVE 0x10 | 
| #define AB_UNKNOWN 0x20 | 
| #define ADD_EXPLICIT_HYDROGEN_NEIGH 1 | 
| #define ADD_EXPLICIT_LONE_PAIR_NEIGH 2 | 
| #define ARR_DIM 3 /* djb-rwth: default dimension of arrays */ | 
| #define ARSINE_STEREO 20 /* the number must match Arsine number in the comments, see above */ | 
| #define BOND_PARITY_UNDEFINED 64 | 
| #define CCHARGE1 0, 0, 0, 0, 1, -1, | 
| #define CCHARGE2 0, 0, 1, 1, 0, 0, 1, 1, | 
| #define CCHARGE3 0, 1, 0, 1, 0, 0, 0, | 
| #define CCHEMVALENCEH1 4, 4, 4, 4, 4, 4, | 
| #define CCHEMVALENCEH2 4, 6, 3, 5, 4, 6, 3, 5, | 
| #define CCHEMVALENCEH3 5, 4, 3, 4, 5, 3, 3, | 
| #define CHAS3MEMBRING1 0, 0, 0, 0, 0, 0, | 
| #define CHAS3MEMBRING2 0, 0, 0, 0, 0, 0, 0, 0, | 
| #define CHAS3MEMBRING3 0, 0, 1, 0, 0, 0, 0, | 
| #define CNUMBONDSANDH1 4, 4, 4, 4, 4, 4, | 
| #define CNUMBONDSANDH2 3, 4, 3, 4, 3, 4, 3, 4, | 
| #define CNUMBONDSANDH3 4, 4, 3, 4, 4, 3, 3, | 
| #define CREQUIRDNEIGH1 0, 0, 0, 0, 3, 0, | 
| #define CREQUIRDNEIGH2 3, 3, 3, 3, 3, 3, 3, 3, | 
| #define CREQUIRDNEIGH3 3, 3, 1, 3, 3, 2, 2, | 
| #define MAX_EDGE_RATIO 2.50 /* max max/min edge ratio for a tetrahedra close to a parallelogram */ | 
| #define MAX_SINE 0.70710678118654752440084436210485 /* 1/sqrt(2)=sin(pi/4) */ | 
| #define MIN_ANGLE 0.10 /* 5.73 degrees */ /* treshold for proximity to in-line angle of 180 deg */ | 
| #define MIN_ANGLE_DBOND 0.087156 /* 5 degrees = max angle considered as too small for unambiguous double bond stereo */ | 
| #define MIN_ANGLE_RELAXED 0.001 | 
| #define MIN_BOND_LEN 0.000001 | 
| #define MIN_LEN_STRAIGHT 1.900 /* min length of two normalized to 1 bonds in a straight line */ | 
| #define MIN_SINE 0.03 /*min edge/plane angle in case the tetrahedra has significantly different edge length */ | 
| #define MIN_SINE_EDGE 0.167 /* min sine/(min.edge) ratio to avoid undefined in case of long edges */ | 
| #define MIN_SINE_OUTSIDE 0.06 /* min edge/plane angle to determine whether the central atom is outside of the tetrahedra */ | 
| #define MIN_SINE_RELAXED 0.001 | 
| #define MIN_SINE_SQUARE 0.125 /* min edge/plane angle in case the tetrahedra is somewhat close to a parallelogram */ | 
| #define MPY_SINE 1.00 /* was 3.0 */ | 
| #define PHOSPHINE_STEREO 19 /* the number must match Phosphine number in the comments, see above */ | 
| #define SZELEM1 "C\000","Si", "Ge", "Sn", "As", "B\000", | 
| #define SZELEM2 "S\000","S\000","S\000","S\000","Se", "Se", "Se", "Se", | 
| #define SZELEM3 "N\000","N\000","N\000","P\000","P\000","P\000", "As", | 
| #define T2D_OKAY 1 | 
| #define T2D_UNDF 4 | 
| #define T2D_WARN 2 | 
| #define ZERO_ANGLE 0.000001 | 
| #define ZERO_FLOAT 1.0e-12 | 
| #define ZERO_LENGTH MIN_BOND_LEN | 
| #define ZTYPE_3D 3 | 
| #define ZTYPE_DOWN (-1) /* should be equal to -ZTYPE_UP */ | 
| #define ZTYPE_EITHER 9999 | 
| #define ZTYPE_NONE 0 | 
| #define ZTYPE_UP 1 /* should be equal to -ZTYPE_DOWN */ | 
      
  | 
  static | 
 Here is the caller graph for this function:
      
  | 
  static | 
 Here is the call graph for this function:
 Here is the caller graph for this function:
      
  | 
  static | 
 Here is the call graph for this function:
 Here is the caller graph for this function:
 Here is the caller graph for this function:
 Here is the caller graph for this function:
 Here is the caller graph for this function:
 Here is the caller graph for this function:| int bCanInpAtomBeAStereoCenter | ( | inp_ATOM * | at, | 
| int | cur_at, | ||
| int | bPointedEdgeStereo, | ||
| int | bStereoAtZz | ||
| ) | 
 Here is the call graph for this function:
 Here is the caller graph for this function:
      
  | 
  static | 
 Here is the call graph for this function:
 Here is the caller graph for this function:
      
  | 
  static | 
 Here is the call graph for this function:
 Here is the caller graph for this function:
      
  | 
  static | 
 Here is the call graph for this function:
 Here is the caller graph for this function:
      
  | 
  static | 
 Here is the call graph for this function:
 Here is the caller graph for this function:
      
  | 
  static | 
 Here is the call graph for this function:
 Here is the caller graph for this function:
      
  | 
  static | 
 Here is the caller graph for this function:| int comp_AT_NUMB | ( | const void * | a1, | 
| const void * | a2, | ||
| void * | p | ||
| ) | 
 Here is the caller graph for this function:
      
  | 
  static | 
 Here is the caller graph for this function:| void * cross_prod3 | ( | const double | a[], | 
| const double | b[], | ||
| double | result[] | ||
| ) | 
 Here is the caller graph for this function:
      
  | 
  static | 
 Here is the caller graph for this function:| double dot_prod3 | ( | const double | a[], | 
| const double | b[] | ||
| ) | 
 Here is the caller graph for this function:
 Here is the caller graph for this function:| int FixSb0DParities | ( | inp_ATOM * | at, | 
| int | chain_length, | ||
| int | at_1, | ||
| int | i_next_at_1, | ||
| S_CHAR | z_dir1[], | ||
| int | at_2, | ||
| int | i_next_at_2, | ||
| S_CHAR | z_dir2[], | ||
| int * | pparity1, | ||
| int * | pparity2 | ||
| ) | 
 Here is the call graph for this function:
 Here is the caller graph for this function:| int FixUnkn0DStereoBonds | ( | inp_ATOM * | at, | 
| int | num_at | ||
| ) | 
Fix unknown stereo bonds in the input atoms.
| at | Pointer to the atom data | 
| num_at | Pointer to the number of atoms | 
 Here is the caller graph for this function:
      
  | 
  static | 
 Here is the call graph for this function:
 Here is the caller graph for this function:
      
  | 
  static | 
 Here is the caller graph for this function:| int get_opposite_sb_atom | ( | inp_ATOM * | at, | 
| int | cur_atom, | ||
| int | icur2nxt, | ||
| int * | pnxt_atom, | ||
| int * | pinxt2cur, | ||
| int * | pinxt_sb_parity_ord | ||
| ) | 
 Here is the caller graph for this function:
      
  | 
  static | 
 Here is the caller graph for this function:| int GetHalfStereobond0DParity | ( | inp_ATOM * | at, | 
| int | cur_at, | ||
| AT_NUMB | nSbNeighOrigAtNumb[], | ||
| int | nNumExplictAttachments, | ||
| int | bond_parity, | ||
| int | nFlag | ||
| ) | 
 Here is the caller graph for this function:| int GetSbNeighOrigAtNumb | ( | inp_ATOM * | at, | 
| int | cur_at, | ||
| inp_ATOM * | at_removed_H, | ||
| int | num_removed_H, | ||
| AT_NUMB | nSbNeighOrigAtNumb[] | ||
| ) | 
| int GetStereocenter0DParity | ( | CANON_GLOBALS * | pCG, | 
| inp_ATOM * | at, | ||
| int | cur_at, | ||
| int | j1, | ||
| AT_NUMB | nSbNeighOrigAtNumb[], | ||
| int | nFlag | ||
| ) | 
 Here is the call graph for this function:
 Here is the caller graph for this function:
      
  | 
  static | 
 Here is the caller graph for this function:
      
  | 
  static | 
 Here is the call graph for this function:
 Here is the caller graph for this function:
      
  | 
  static | 
 Here is the caller graph for this function:
      
  | 
  static | 
 Here is the caller graph for this function:
      
  | 
  static | 
 Here is the caller graph for this function:| int ReconcileAllCmlBondParities | ( | inp_ATOM * | at, | 
| int | num_atoms, | ||
| int | bDisconnected | ||
| ) | 
Reconcile all CML bond parities in the input atoms.
| at | Pointer to the atom data | 
| num_atoms | Number of atoms | 
| bDisconnected | Flag for disconnected atoms | 
 Here is the call graph for this function:
 Here is the caller graph for this function:| int ReconcileCmlIncidentBondParities | ( | inp_ATOM * | at, | 
| int | cur_atom, | ||
| int | prev_atom, | ||
| S_CHAR * | visited, | ||
| int | bDisconnected | ||
| ) | 
 Here is the call graph for this function:
 Here is the caller graph for this function:
      
  | 
  static | 
 Here is the caller graph for this function:
      
  | 
  static | 
 Here is the call graph for this function:
 Here is the caller graph for this function:
      
  | 
  static | 
 Here is the call graph for this function:
 Here is the caller graph for this function:| int set_stereo_parity | ( | CANON_GLOBALS * | pCG, | 
| inp_ATOM * | at, | ||
| sp_ATOM * | at_output, | ||
| int | num_at, | ||
| int | num_removed_H, | ||
| int * | nMaxNumStereoAtoms, | ||
| int * | nMaxNumStereoBonds, | ||
| INCHI_MODE | nMode, | ||
| int | bPointedEdgeStereo, | ||
| int | vABParityUnknown, | ||
| int | bLooseTSACheck, | ||
| int | bStereoAtZz | ||
| ) | 
 Here is the call graph for this function:
 Here is the caller graph for this function:
      
  | 
  static | 
 Here is the call graph for this function:
 Here is the caller graph for this function:
      
  | 
  static | 
 Here is the call graph for this function:
 Here is the caller graph for this function:
      
  | 
  static | 
 Here is the call graph for this function:
 Here is the caller graph for this function: