InChI
 
Loading...
Searching...
No Matches
ichitaut.h
Go to the documentation of this file.
1/*
2 * International Chemical Identifier (InChI)
3 * Version 1
4 * Software version 1.07
5 * April 30, 2024
6 *
7 * MIT License
8 *
9 * Copyright (c) 2024 IUPAC and InChI Trust
10 *
11 * Permission is hereby granted, free of charge, to any person obtaining a copy
12 * of this software and associated documentation files (the "Software"), to deal
13 * in the Software without restriction, including without limitation the rights
14 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15 * copies of the Software, and to permit persons to whom the Software is
16 * furnished to do so, subject to the following conditions:
17 *
18 * The above copyright notice and this permission notice shall be included in all
19 * copies or substantial portions of the Software.
20 *
21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27 * SOFTWARE.
28*
29* The InChI library and programs are free software developed under the
30 * auspices of the International Union of Pure and Applied Chemistry (IUPAC).
31 * Originally developed at NIST.
32 * Modifications and additions by IUPAC and the InChI Trust.
33 * Some portions of code were developed/changed by external contributors
34 * (either contractor or volunteer) which are listed in the file
35 * 'External-contributors' included in this distribution.
36 *
37 * info@inchi-trust.org
38 *
39*/
40
41
42#ifndef _ICHITAUT_H_
43#define _ICHITAUT_H_
44
45#include "ichi_bns.h"
46#include "extr_ct.h"
47
48/*******************************************************
49 --- Header of tautomers groups ---
50 --- Each entry is AT_TAUTOMER_HDR type ---
51 number of tautomer groups (nNumTautGroups)
52 index of the first tautomer group (#1)
53 ...
54 index of the last tautomer group (#nNumTautGroups)
55 --- end of the Header of tautomers groups description ---
56
57 --- One endpoint group description ---
58 --- Each entry has AT_TAUTOMER type members ---
59 <fixed portion (6 entries)>
60 number of endpoints (0=end of list)
61 number of mobile groups, including number of negative charges (=num(H)+num(-))
62 number of negative charges
63 number of 1H atoms
64 number of 2H (deuterium) atoms
65 number of 3H (tritium) atoms
66 <variable portion, sorted in ascending order>
67 atom rank #1 (ascending order)
68 ...
69 atom rank #endpoints
70 --- end of the endpoint group description ----
71
72 ----------------------------------------------
73 Note:
74 In the following Linear CT Tautomer descriptions
75 we assume the tautomeric groups and the endpoints
76 within them have been properly sorted
77
78 --------- Linear CT Tautomer description -----
79 <for each tautomeric group>
80 -- fixed length part, non-isotopic --
81 number of endpoints = t_group->nNumEndpoints
82 number of mobile atoms = t_group->num[0]
83 ...
84 number of negative charges = t_group->num[T_NUM_NO_ISOTOPIC-1]
85 -- fixed length part, isotopic --
86 number of T (3H) = t_group->num[T_NUM_NO_ISOTOPIC]
87 ...
88 number of 1H = t_group->num[T_NUM_NO_ISOTOPIC+T_NUM_ISOTOPIC-1]
89 -- variable length part --
90 rank of the first endpoint = nRank[t_group_info->nEndpointAtomNumber[t_group->nFirstEndpointAtNoPos]];
91 ...
92 rank of the last endpoint = nRank[t_group_info->nEndpointAtomNumber[t_group->nFirstEndpointAtNoPos+t_group->nNumEndpoints-1]];
93
94 --------- Linear CT Isotopic Tautomer description -----
95 <for each isotopic tautomeric group>
96 number of T (3H) = t_group->num[T_NUM_NO_ISOTOPIC]
97 ...
98 number of 1H = t_group->num[T_NUM_NO_ISOTOPIC+T_NUM_ISOTOPIC-1]
99 t-group ordering number in the Linear CT Tautomer, starts from 1
100
101***************************************************************/
102
103
104#define T_NUM_NO_ISOTOPIC 2
105#define T_NUM_ISOTOPIC NUM_H_ISOTOPES /* was 2, now 3 */
106
107#define T_GROUP_HDR_LEN (1+T_NUM_NO_ISOTOPIC /*+T_NUM_ISOTOPIC*/) /* LinearCTTautomer */
108
109typedef AT_NUMB AT_TAUTOMER; /* LinearCTTautomer */
110
111typedef AT_ISO_SORT_KEY T_GROUP_ISOWT; /* must hold value up to T_GROUP_ISOWT_MULT^3-1 */
112 /* similar to AT_ISO_SORT_KEY */
113/* = num_1H + T_GROUP_ISOWT_MULT*(num_D + T_GROUP_ISOWT_MULT*num_T) */
114
115
116#define T_GROUP_ISOWT_MULT 1024 /* (max. number of identical isotopic hydrogens in a taut. group) + 1 */
117 /* changed from 256U 9-12-2003 */
118 /* (similar to AT_ISO_SORT_KEY_MULT ) */
119/* note: (long)T_GROUP_ISOWT should always be positive (have zero sign bit) */
120
122 AT_NUMB tgroup_num; /* ordering number of a tautomer group with isotopes > 0 */
123 /*
124 union {
125 struct {
126 AT_NUMB num_T;
127 AT_NUMB num_D;
128 AT_NUMB num_1H;
129 };
130 AT_NUMB num[T_NUM_ISOTOPIC];
131 };
132 */
133 AT_NUMB num[T_NUM_ISOTOPIC]; /* inverted order: num_T, num_D, num_1H */
135
136typedef enum tagTG_NumDA { /* 2004-02-26 */
137 TG_Num_dH, /* number of H donors that have only H (all single bonds) */
138 TG_Num_dM, /* number of H donors that have (-) (all single bonds) */
139 TG_Num_aH, /* number of H acceptors that have H and no (-) (+a double bond) */
140 TG_Num_aM, /* number of H acceptors that have (-) and possibly H (+ one double bond) */
141 TG_Num_dO, /* number of H donors =C-OH or =C-O(-) */
142 TG_Num_aO, /* number of H acceptors -C=O */
143 TG_NUM_DA /* number of elements in an array */
145
146typedef struct tagTautomerGroup {
147#if 0
148union {
149 struct {
150 /*T_NUM_NO_ISOTOPIC = 2 elements:*/
151 AT_RANK num_Mobile; /*Num_H+num_D+num_T+num_NegCharges*/
152 AT_RANK num_NegCharges;
153 /* T_NUM_ISOTOPIC = 3 elements*/
154 AT_RANK num_T; /*here the isotopic part (num+T_NUM_NO_ISOTOPIC) starts*/
155 AT_RANK num_D;
156 AT_RANK num_1H;
157 };
158 AT_RANK num[T_NUM_NO_ISOTOPIC+T_NUM_ISOTOPIC]; /*same size and meaning as num[] in T_ENDPOINT*/
159};
160#endif /* 0 */
161
162 AT_RANK num[T_NUM_NO_ISOTOPIC + T_NUM_ISOTOPIC]; /* same size and meaning as num[] in T_ENDPOINT */
163 /* isotopic inv. order: num_T, num_D, num_1H */
165 T_GROUP_ISOWT iWeight; /* isotopic "weight" = T_GROUP_ISOWT_MULT*(T_GROUP_ISOWT_MULT*num_T + num_D)+num_1H; */
166 AT_NUMB nGroupNumber; /* positive tautomer group ID = atom->endpoint */
167 AT_NUMB nNumEndpoints; /* number of the atom numbers in T_GROUP_INFO::nEndpointAtomNumber[] */
168 AT_NUMB nFirstEndpointAtNoPos; /* the first index of the atom number in T_GROUP_INFO::nEndpointAtomNumber[] */
170
171/* offsets/num_t_groups within T_GROUP_INFO::tGroupNumber */
172#define TGSO_CURR_ORDER 0 /* tGroupNumber: current sorting order */
173#define TGSO_SYMM_RANK 1 /* tSymmRank: symmetry ranks (no isotopes) = min. ordering number > 0. */
174#define TGSO_SYMM_IORDER 2 /* tiGroupNumber: isotopic symmetry rank sorting order */
175#define TGSO_SYMM_IRANK 3 /* tiSymmRank: isotopic symmetry ranks */
176#define TGSO_TOTAL_LEN 4
177
178/***************************************************/
179/* flags for t_group_info->tni.bNormalizationFlags */
180/***************************************************/
181#define FLAG_PROTON_NPO_SIMPLE_REMOVED 0x0001
182#define FLAG_PROTON_NP_HARD_REMOVED 0x0002
183#define FLAG_PROTON_AC_SIMPLE_ADDED 0x0004
184#define FLAG_PROTON_AC_SIMPLE_REMOVED 0x0008
185#define FLAG_PROTON_AC_HARD_REMOVED 0x0010
186#define FLAG_PROTON_AC_HARD_ADDED 0x0020
187#define FLAG_PROTON_CHARGE_CANCEL 0x0040
188#define FLAG_PROTON_SINGLE_REMOVED 0x0080
189
190/* signifies tautomeric structure even though no t-group discovered */
191#define FLAG_NORM_CONSIDER_TAUT ( FLAG_PROTON_NPO_SIMPLE_REMOVED | \
192 FLAG_PROTON_NP_HARD_REMOVED | \
193 FLAG_PROTON_AC_SIMPLE_ADDED | \
194 FLAG_PROTON_AC_SIMPLE_REMOVED | \
195 FLAG_PROTON_AC_HARD_REMOVED | \
196 FLAG_PROTON_AC_HARD_ADDED | \
197 FLAG_PROTON_SINGLE_REMOVED | \
198 FLAG_PROTON_CHARGE_CANCEL )
199
200#if ( FIX_N_MINUS_NORN_BUG == 1 )
201#define FLAG_FORCE_SALT_TAUT ( FLAG_PROTON_NP_HARD_REMOVED | \
202 FLAG_PROTON_AC_HARD_REMOVED | \
203 FLAG_PROTON_AC_HARD_ADDED | \
204 FLAG_PROTON_CHARGE_CANCEL )
205#else
206/* force salt tautomerism exploration */
207#define FLAG_FORCE_SALT_TAUT ( FLAG_PROTON_NP_HARD_REMOVED | \
208 FLAG_PROTON_AC_HARD_REMOVED | \
209 FLAG_PROTON_AC_HARD_ADDED )
210#endif
211
218
219/***************************************************/
220/* t_group_info definition */
221/***************************************************/
222typedef struct tagTautomerGroupsInfo {
223 T_GROUP *t_group; /* max_num_t_groups elements */
224 AT_NUMB *nEndpointAtomNumber; /* nNumEndpoints elements; also see comments to T_GROUP */
230
231 AT_NUMB *nIsotopicEndpointAtomNumber; /* [0]: number of the following atoms; [1...]: non-tautomeric atoms that may have isotopic H */
232 int nNumIsotopicEndpoints; /* allocated length of nIsotopicEndpointAtomNumber */
233 NUM_H num_iso_H[NUM_H_ISOTOPES]; /* isotopic H on tautomeric atoms and those in nIsotopicEndpointAtomNumber */
234
236
240
241#define CANON_FLAG_NO_H_RECANON 0x0001 /* iOther: second canonicalization of the no H structure */
242#define CANON_FLAG_NO_TAUT_H_DIFF 0x0002 /* iOther: NoTautH eq. partition differs from NoH */
243#define CANON_FLAG_ISO_ONLY_NON_TAUT_DIFF 0x0004 /* iOther: eq. partition in isotopic only non-taut differs from non-isotopic */
244#define CANON_FLAG_ISO_TAUT_DIFF 0x0008 /* iBase: isotopic eq. partition in isotopic taut differs from non-isotopic taut */
245#define CANON_FLAG_ISO_FIXED_H_DIFF 0x0010 /* iOther: isotopic eq. partition in fixed H non-taut differs from non-isotopic fixed H */
246
247/* Note: rank of tautomer atom #i = Rank[nEndpointAtomNumber[i]] */
248/* for each tautomer atom group (t_group) t_group.nFirstEndpointAtNoPos */
249/* is the first index of the atom number in nEndpointAtomNumber[] */
250
251typedef struct tagTautomerEndpoint {
252 /*
253 union {
254 struct {
255 AT_RANK num_Mobile; // Num_H+num_D+num_T+num_NegCharges
256 AT_RANK num_NegCharges;
257 AT_RANK num_T;
258 AT_RANK num_D;
259 };
260 AT_RANK num[T_NUM_NO_ISOTOPIC+T_NUM_ISOTOPIC]; // same size and meaning as num[] in T_GROUP
261 };
262 */
263 AT_RANK num[T_NUM_NO_ISOTOPIC + T_NUM_ISOTOPIC]; /* same size and meaning as num[] in T_GROUP */
266 AT_NUMB nEquNumber; /* same for endpoints connected by alt paths */
268 /*AT_NUMB neighbor_index; */
270
275
284
285
286/* positive charge group (extended onium) */
287
288#define CHARGED_CPOINT(X,i) ((X)[i].charge==1)
289
295
296typedef struct tagChargeGroup {
297 AT_RANK num[2]; /* [0]: number of (+), [1]: number atoms that have H, including H accessible through tautomerism */
302
312
313/* salts */
318 AT_NUMB endpoint; /* MAX_ATOMS+1 => found alt path to the candidate */
320
321typedef struct tagSaltGroupInfo {
324 int num_candidates; /* 0=>unimitialized, -1=>no candidates found */
325 int num_other_candidates; /* num. non-"acidic O" candidates */
326 int num_p_only_candidates; /* num. non-tautomeric p-donor/acceptor candidates like -CH2-SH */
328
329/********************* ATOM_SIZES *******************************/
330/* sizes of a component */
331typedef struct tagAtomSizes {
332 /* for tautomeric and non-tautomeric structures */
333 int nMaxNumStereoAtoms; /* max. number of stereo atoms in isotopic case */
334 int nMaxNumStereoBonds; /* max. number of stereo bonds in isotopic case */
335 int num_isotopic_atoms; /* includes atoms that have isotopic tautomeric H */
340 int nLenLinearCTStereoDble; /* max. number of stereo bonds in non-isotopic case */
341 int nLenLinearCTStereoCarb; /* max. number of stereo atoms in non-isotopic case */
342 /* int bHasIsotopicAtoms; */
344
346
347 /* tautomeric structure only; zeroes in non-tautomeric */
353
354
355typedef struct tagDfsPath {
357 /*AT_RANK nDfsLevel;*/
361
362
363#ifndef COMPILE_ALL_CPP
364#ifdef __cplusplus
365extern "C" {
366#endif
367#endif
368
369 int is_centerpoint_elem( U_CHAR el_number );
370 int is_centerpoint_elem_strict( U_CHAR el_number );
371#if ( KETO_ENOL_TAUT == 1 )
372 int is_centerpoint_elem_KET( U_CHAR el_number );
373#endif
374 int bIsCenterPointStrict( inp_ATOM *atom, int iat );
375 int nGetEndpointInfo( inp_ATOM *atom, int iat, ENDPOINT_INFO *eif );
376
377#if ( TAUT_PT_22_00 == 1 )
378 int nGetEndpointInfo_PT_22_00(inp_ATOM *atom, int iat, ENDPOINT_INFO *eif);
379#endif
380#if ( TAUT_PT_16_00 == 1 )
381 int nGetEndpointInfo_PT_16_00(inp_ATOM *atom, int iat, ENDPOINT_INFO *eif);
382#endif
383#if ( TAUT_PT_06_00 == 1 )
384 int nGetEndpointInfo_PT_06_00(inp_ATOM *atom, int iat, ENDPOINT_INFO *eif);
385#endif
386#if ( TAUT_PT_39_00 == 1 )
387 int nGetEndpointInfo_PT_39_00(inp_ATOM *atom, int iat, ENDPOINT_INFO *eif);
388#endif
389#if ( TAUT_PT_13_00 == 1 )
390 int nGetEndpointInfo_PT_13_00(inp_ATOM *atom, int iat, ENDPOINT_INFO *eif);
391#endif
392#if ( TAUT_PT_18_00 == 1 )
393 int nGetEndpointInfo_PT_18_00(inp_ATOM *atom, int iat, ENDPOINT_INFO *eif);
394#endif
395
396#if ( KETO_ENOL_TAUT == 1 )
397 int nGetEndpointInfo_KET( inp_ATOM *atom, int iat, ENDPOINT_INFO *eif );
398#endif
399 void AddAtom2DA( AT_RANK num_DA[], inp_ATOM *atom, int at_no, int bSubtract );
400 int AddAtom2num( AT_RANK num[], inp_ATOM *atom, int at_no, int bSubtract );
401 int AddEndPoint( T_ENDPOINT *pEndPoint, inp_ATOM *at, int iat );
402 int bHasAcidicHydrogen( inp_ATOM *at, int i );
403 int bHasOtherExchangableH( inp_ATOM *at, int i );
404 int bHasAcidicMinus( inp_ATOM *at, int i );
405
406
408 inp_ATOM *atom,
409 int nStartAtom,
410 AT_RANK *nBfsTreePos,
411 DFS_PATH *DfsPath,
412 int nMaxLenBfsTree,
413 T_ENDPOINT *EndPoint,
414 int nMaxNumEndPoint,
415 T_BONDPOS *BondPos,
416 int nMaxNumBondPos,
417 int *pnNumEndPoint,
418 int *pnNumBondPos,
419 struct BalancedNetworkStructure *pBNS,
420 struct BalancedNetworkData *pBD,
421 int num_atoms );
422
424 inp_ATOM *atom, int nStartAtom,
425 int nStartAtomNeighbor,
426 AT_RANK *nBfsTreePos,
427 DFS_PATH *DfsPath,
428 int nMaxLenBfsTree,
429 T_ENDPOINT *EndPoint,
430 int nMaxNumEndPoint,
431 T_BONDPOS *BondPos,
432 int nMaxNumBondPos,
433 int *pnNumEndPoint,
434 int *pnNumBondPos,
435 struct BalancedNetworkStructure *pBNS,
436 struct BalancedNetworkData *pBD,
437 int num_atoms );
438
440 inp_ATOM *atom,
441 int nStartAtom,
442 int nStartAtomNeighbor,
443 int nStartAtomNeighborEndpoint,
444 int nStartAtomNeighborNeighborEndpoint,
445 AT_RANK *nDfsPathPos,
446 DFS_PATH *DfsPath,
447 int nMaxLenDfsPath,
448 T_ENDPOINT *EndPoint,
449 int nMaxNumEndPoint,
450 T_BONDPOS *BondPos,
451 int nMaxNumBondPos,
452 int *pnNumEndPoint,
453 int *pnNumBondPos,
454 struct BalancedNetworkStructure *pBNS,
455 struct BalancedNetworkData *pBD,
456 int num_atoms );
457
459 inp_ATOM *atom,
460 int nStartAtom,
461 int nStartAtomNeighbor,
462 int nStartAtomNeighborEndpoint,
463 int nStartAtomNeighborNeighborEndpoint,
464 AT_RANK *nDfsPathPos,
465 DFS_PATH *DfsPath,
466 int nMaxLenDfsPath,
467 T_ENDPOINT *EndPoint,
468 int nMaxNumEndPoint,
469 T_BONDPOS *BondPos,
470 int nMaxNumBondPos,
471 int *pnNumEndPoint,
472 int *pnNumBondPos,
473 struct BalancedNetworkStructure *pBNS,
474 struct BalancedNetworkData *pBD,
475 int num_atoms );
476
477 int nGet15TautInAltPath( struct tagCANON_GLOBALS *pCG,
478 inp_ATOM *atom,
479 int nStartAtom, AT_RANK *nDfsPathPos,
480 DFS_PATH *DfsPath,
481 int nMaxLenDfsPath,
482 T_ENDPOINT *EndPoint,
483 int nMaxNumEndPoint,
484 T_BONDPOS *BondPos,
485 int nMaxNumBondPos,
486 int *pnNumEndPoint,
487 int *pnNumBondPos,
488 struct BalancedNetworkStructure *pBNS,
489 struct BalancedNetworkData *pBD,
490 int num_atoms );
491
492
493#ifndef COMPILE_ALL_CPP
494#ifdef __cplusplus
495}
496#endif
497#endif
498
499
500#endif /* _ICHITAUT_H_ */
long AT_ISO_SORT_KEY
Definition extr_ct.h:69
unsigned short AT_NUMB
Definition ichisize.h:45
unsigned short AT_RANK
Definition ichisize.h:46
signed short NUM_H
Definition ichisize.h:49
unsigned long INCHI_MODE
Definition ichisize.h:60
int nGet15TautInAltPath(struct tagCANON_GLOBALS *pCG, inp_ATOM *atom, int nStartAtom, AT_RANK *nDfsPathPos, DFS_PATH *DfsPath, int nMaxLenDfsPath, T_ENDPOINT *EndPoint, int nMaxNumEndPoint, T_BONDPOS *BondPos, int nMaxNumBondPos, int *pnNumEndPoint, int *pnNumBondPos, struct BalancedNetworkStructure *pBNS, struct BalancedNetworkData *pBD, int num_atoms)
Definition ichiqueu.c:407
struct tagDfsPath DFS_PATH
struct tagTautomerGroupsInfo T_GROUP_INFO
int AddAtom2num(AT_RANK num[], inp_ATOM *atom, int at_no, int bSubtract)
Definition ichitaut.c:211
int bHasAcidicHydrogen(inp_ATOM *at, int i)
Definition ichi_bns.c:4196
struct tagTautomerEndpoint T_ENDPOINT
struct tagIsotopicTautomerGroup AT_ISO_TGROUP
#define T_NUM_NO_ISOTOPIC
Definition ichitaut.h:104
AT_ISO_SORT_KEY T_GROUP_ISOWT
Definition ichitaut.h:111
int nGetEndpointInfo_KET(inp_ATOM *atom, int iat, ENDPOINT_INFO *eif)
Definition ichitaut.c:916
int bHasAcidicMinus(inp_ATOM *at, int i)
Definition ichi_bns.c:4320
enum tagTG_NumDA TGNUMDA
int nGetEndpointInfo_PT_22_00(inp_ATOM *atom, int iat, ENDPOINT_INFO *eif)
Definition ichitaut.c:452
int nGet12TautIn5MembAltRing(struct tagCANON_GLOBALS *pCG, inp_ATOM *atom, int nStartAtom, int nStartAtomNeighbor, AT_RANK *nBfsTreePos, DFS_PATH *DfsPath, int nMaxLenBfsTree, T_ENDPOINT *EndPoint, int nMaxNumEndPoint, T_BONDPOS *BondPos, int nMaxNumBondPos, int *pnNumEndPoint, int *pnNumBondPos, struct BalancedNetworkStructure *pBNS, struct BalancedNetworkData *pBD, int num_atoms)
Definition ichiqueu.c:322
int nGetEndpointInfo_PT_39_00(inp_ATOM *atom, int iat, ENDPOINT_INFO *eif)
Definition ichitaut.c:677
struct tagChargeCandidate C_CANDIDATE
struct tagChargeGroup C_GROUP
int nGetEndpointInfo_PT_06_00(inp_ATOM *atom, int iat, ENDPOINT_INFO *eif)
Definition ichitaut.c:600
struct tagEndpointInfo ENDPOINT_INFO
int is_centerpoint_elem_KET(U_CHAR el_number)
Definition ichitaut.c:182
struct tagChargeGroupsInfo C_GROUP_INFO
int nGet14TautIn7MembAltRing(struct tagCANON_GLOBALS *pCG, inp_ATOM *atom, int nStartAtom, int nStartAtomNeighbor, int nStartAtomNeighborEndpoint, int nStartAtomNeighborNeighborEndpoint, AT_RANK *nDfsPathPos, DFS_PATH *DfsPath, int nMaxLenDfsPath, T_ENDPOINT *EndPoint, int nMaxNumEndPoint, T_BONDPOS *BondPos, int nMaxNumBondPos, int *pnNumEndPoint, int *pnNumBondPos, struct BalancedNetworkStructure *pBNS, struct BalancedNetworkData *pBD, int num_atoms)
Definition ichiqueu.c:240
struct tagSaltChargeCandidate S_CANDIDATE
int nGetEndpointInfo_PT_16_00(inp_ATOM *atom, int iat, ENDPOINT_INFO *eif)
Definition ichitaut.c:524
struct tagTautomerGroup T_GROUP
int nGet14TautIn5MembAltRing(struct tagCANON_GLOBALS *pCG, inp_ATOM *atom, int nStartAtom, int nStartAtomNeighbor, int nStartAtomNeighborEndpoint, int nStartAtomNeighborNeighborEndpoint, AT_RANK *nDfsPathPos, DFS_PATH *DfsPath, int nMaxLenDfsPath, T_ENDPOINT *EndPoint, int nMaxNumEndPoint, T_BONDPOS *BondPos, int nMaxNumBondPos, int *pnNumEndPoint, int *pnNumBondPos, struct BalancedNetworkStructure *pBNS, struct BalancedNetworkData *pBD, int num_atoms)
Definition ichiqueu.c:283
void AddAtom2DA(AT_RANK num_DA[], inp_ATOM *atom, int at_no, int bSubtract)
Definition ichitaut.c:250
struct tagAtomSizes ATOM_SIZES
int is_centerpoint_elem_strict(U_CHAR el_number)
Definition ichitaut.c:190
#define T_NUM_ISOTOPIC
Definition ichitaut.h:105
int AddEndPoint(T_ENDPOINT *pEndPoint, inp_ATOM *at, int iat)
Definition ichitaut.c:330
struct tagSaltGroupInfo S_GROUP_INFO
tagTG_NumDA
Definition ichitaut.h:136
@ TG_Num_dH
Definition ichitaut.h:137
@ TG_Num_dM
Definition ichitaut.h:138
@ TG_Num_aO
Definition ichitaut.h:142
@ TG_Num_aM
Definition ichitaut.h:140
@ TG_NUM_DA
Definition ichitaut.h:143
@ TG_Num_dO
Definition ichitaut.h:141
@ TG_Num_aH
Definition ichitaut.h:139
int nGet15TautIn6MembAltRing(struct tagCANON_GLOBALS *pCG, inp_ATOM *atom, int nStartAtom, AT_RANK *nBfsTreePos, DFS_PATH *DfsPath, int nMaxLenBfsTree, T_ENDPOINT *EndPoint, int nMaxNumEndPoint, T_BONDPOS *BondPos, int nMaxNumBondPos, int *pnNumEndPoint, int *pnNumBondPos, struct BalancedNetworkStructure *pBNS, struct BalancedNetworkData *pBD, int num_atoms)
Definition ichiqueu.c:361
AT_NUMB AT_TAUTOMER
Definition ichitaut.h:109
int is_centerpoint_elem(U_CHAR el_number)
Definition ichitaut.c:157
int bIsCenterPointStrict(inp_ATOM *atom, int iat)
Definition ichiqueu.c:215
struct tagTautomerNormInfo TNI
int nGetEndpointInfo(inp_ATOM *atom, int iat, ENDPOINT_INFO *eif)
Definition ichitaut.c:359
int nGetEndpointInfo_PT_18_00(inp_ATOM *atom, int iat, ENDPOINT_INFO *eif)
Definition ichitaut.c:832
struct tagTautomerBondLocation T_BONDPOS
int bHasOtherExchangableH(inp_ATOM *at, int i)
Definition ichi_bns.c:4216
int nGetEndpointInfo_PT_13_00(inp_ATOM *atom, int iat, ENDPOINT_INFO *eif)
Definition ichitaut.c:756
signed char S_CHAR
Definition inchi_api.h:113
#define NUM_H_ISOTOPES
Definition inchi_api.h:107
unsigned char U_CHAR
Definition inchi_api.h:114
Definition ichi_bns.h:286
Definition ichi_bns.h:233
Definition ichitaut.h:331
int nLenBonds
Definition ichitaut.h:337
int bMayHaveStereo
Definition ichitaut.h:343
int nLenLinearCTIsotopicTautomer
Definition ichitaut.h:349
int nLenIsotopicEndpoints
Definition ichitaut.h:351
int nLenCT
Definition ichitaut.h:336
int nLenLinearCTStereoDble
Definition ichitaut.h:340
int nMaxNumStereoBonds
Definition ichitaut.h:334
int nMaxNumStereoAtoms
Definition ichitaut.h:333
int bHasIsotopicTautGroups
Definition ichitaut.h:350
int nLenIsotopic
Definition ichitaut.h:338
int bIgnoreIsotopic
Definition ichitaut.h:345
int nLenLinearCTTautomer
Definition ichitaut.h:348
int nLenCTAtOnly
Definition ichitaut.h:339
int nLenLinearCTStereoCarb
Definition ichitaut.h:341
int num_isotopic_atoms
Definition ichitaut.h:335
Definition ichicant.h:338
Definition ichitaut.h:290
S_CHAR subtype
Definition ichitaut.h:293
S_CHAR type
Definition ichitaut.h:292
AT_NUMB atnumber
Definition ichitaut.h:291
Definition ichitaut.h:296
AT_RANK num_CPoints
Definition ichitaut.h:298
AT_RANK num[2]
Definition ichitaut.h:297
AT_NUMB nGroupNumber
Definition ichitaut.h:299
U_CHAR cGroupType
Definition ichitaut.h:300
Definition ichitaut.h:303
int num_candidates
Definition ichitaut.h:310
C_CANDIDATE * c_candidate
Definition ichitaut.h:308
int num_c_groups
Definition ichitaut.h:305
int max_num_c_groups
Definition ichitaut.h:306
C_GROUP * c_group
Definition ichitaut.h:304
int max_num_candidates
Definition ichitaut.h:309
Definition ichitaut.h:355
U_CHAR bond_type
Definition ichitaut.h:358
AT_RANK at_no
Definition ichitaut.h:356
S_CHAR bond_pos
Definition ichitaut.h:359
Definition ichitaut.h:276
S_CHAR cAcceptor
Definition ichitaut.h:281
S_CHAR cMobile
Definition ichitaut.h:279
S_CHAR cKetoEnolCode
Definition ichitaut.h:282
S_CHAR cNeutralBondsValence
Definition ichitaut.h:278
S_CHAR cDonor
Definition ichitaut.h:280
S_CHAR cMoveableCharge
Definition ichitaut.h:277
Definition inpdef.h:110
Definition ichitaut.h:121
AT_NUMB num[T_NUM_ISOTOPIC]
Definition ichitaut.h:133
AT_NUMB tgroup_num
Definition ichitaut.h:122
Definition ichitaut.h:314
S_CHAR type
Definition ichitaut.h:316
S_CHAR subtype
Definition ichitaut.h:317
AT_NUMB endpoint
Definition ichitaut.h:318
AT_NUMB atnumber
Definition ichitaut.h:315
Definition ichitaut.h:321
int max_num_candidates
Definition ichitaut.h:323
S_CANDIDATE * s_candidate
Definition ichitaut.h:322
int num_candidates
Definition ichitaut.h:324
int num_other_candidates
Definition ichitaut.h:325
int num_p_only_candidates
Definition ichitaut.h:326
Definition ichitaut.h:271
AT_NUMB nAtomNumber
Definition ichitaut.h:272
AT_NUMB neighbor_index
Definition ichitaut.h:273
Definition ichitaut.h:251
AT_NUMB nAtomNumber
Definition ichitaut.h:267
AT_RANK num_DA[TG_NUM_DA]
Definition ichitaut.h:264
AT_RANK num[T_NUM_NO_ISOTOPIC+T_NUM_ISOTOPIC]
Definition ichitaut.h:263
AT_NUMB nEquNumber
Definition ichitaut.h:266
AT_NUMB nGroupNumber
Definition ichitaut.h:265
Definition ichitaut.h:146
AT_NUMB nNumEndpoints
Definition ichitaut.h:167
AT_RANK num_DA[TG_NUM_DA]
Definition ichitaut.h:164
T_GROUP_ISOWT iWeight
Definition ichitaut.h:165
AT_NUMB nFirstEndpointAtNoPos
Definition ichitaut.h:168
AT_RANK num[T_NUM_NO_ISOTOPIC+T_NUM_ISOTOPIC]
Definition ichitaut.h:162
AT_NUMB nGroupNumber
Definition ichitaut.h:166
Definition ichitaut.h:222
int max_num_t_groups
Definition ichitaut.h:228
AT_NUMB * tGroupNumber
Definition ichitaut.h:225
int bIgnoreIsotopic
Definition ichitaut.h:229
int num_t_groups
Definition ichitaut.h:227
AT_NUMB * nIsotopicEndpointAtomNumber
Definition ichitaut.h:231
INCHI_MODE bTautFlagsDone
Definition ichitaut.h:238
T_GROUP * t_group
Definition ichitaut.h:223
TNI tni
Definition ichitaut.h:235
NUM_H num_iso_H[NUM_H_ISOTOPES]
Definition ichitaut.h:233
INCHI_MODE bTautFlags
Definition ichitaut.h:237
int nNumIsotopicEndpoints
Definition ichitaut.h:232
AT_NUMB * nEndpointAtomNumber
Definition ichitaut.h:224
int nNumEndpoints
Definition ichitaut.h:226
Definition ichitaut.h:212
NUM_H nNumRemovedExplicitH
Definition ichitaut.h:213
INCHI_MODE bNormalizationFlags
Definition ichitaut.h:216
NUM_H nNumRemovedProtonsIsotopic[NUM_H_ISOTOPES]
Definition ichitaut.h:215
NUM_H nNumRemovedProtons
Definition ichitaut.h:214