InChI
 
Loading...
Searching...
No Matches
ichitaut.h
Go to the documentation of this file.
1/*
2 * SPDX-License-Identifier: MIT
3 * Copyright (c) 2024 IUPAC and InChI Trust
4 */
5
6
7#ifndef _ICHITAUT_H_
8#define _ICHITAUT_H_
9
10#include "ichi_bns.h"
11#include "extr_ct.h"
12
13/*******************************************************
14 --- Header of tautomers groups ---
15 --- Each entry is AT_TAUTOMER_HDR type ---
16 number of tautomer groups (nNumTautGroups)
17 index of the first tautomer group (#1)
18 ...
19 index of the last tautomer group (#nNumTautGroups)
20 --- end of the Header of tautomers groups description ---
21
22 --- One endpoint group description ---
23 --- Each entry has AT_TAUTOMER type members ---
24 <fixed portion (6 entries)>
25 number of endpoints (0=end of list)
26 number of mobile groups, including number of negative charges (=num(H)+num(-))
27 number of negative charges
28 number of 1H atoms
29 number of 2H (deuterium) atoms
30 number of 3H (tritium) atoms
31 <variable portion, sorted in ascending order>
32 atom rank #1 (ascending order)
33 ...
34 atom rank #endpoints
35 --- end of the endpoint group description ----
36
37 ----------------------------------------------
38 Note:
39 In the following Linear CT Tautomer descriptions
40 we assume the tautomeric groups and the endpoints
41 within them have been properly sorted
42
43 --------- Linear CT Tautomer description -----
44 <for each tautomeric group>
45 -- fixed length part, non-isotopic --
46 number of endpoints = t_group->nNumEndpoints
47 number of mobile atoms = t_group->num[0]
48 ...
49 number of negative charges = t_group->num[T_NUM_NO_ISOTOPIC-1]
50 -- fixed length part, isotopic --
51 number of T (3H) = t_group->num[T_NUM_NO_ISOTOPIC]
52 ...
53 number of 1H = t_group->num[T_NUM_NO_ISOTOPIC+T_NUM_ISOTOPIC-1]
54 -- variable length part --
55 rank of the first endpoint = nRank[t_group_info->nEndpointAtomNumber[t_group->nFirstEndpointAtNoPos]];
56 ...
57 rank of the last endpoint = nRank[t_group_info->nEndpointAtomNumber[t_group->nFirstEndpointAtNoPos+t_group->nNumEndpoints-1]];
58
59 --------- Linear CT Isotopic Tautomer description -----
60 <for each isotopic tautomeric group>
61 number of T (3H) = t_group->num[T_NUM_NO_ISOTOPIC]
62 ...
63 number of 1H = t_group->num[T_NUM_NO_ISOTOPIC+T_NUM_ISOTOPIC-1]
64 t-group ordering number in the Linear CT Tautomer, starts from 1
65
66***************************************************************/
67
68
69#define T_NUM_NO_ISOTOPIC 2
70#define T_NUM_ISOTOPIC NUM_H_ISOTOPES /* was 2, now 3 */
71
72#define T_GROUP_HDR_LEN (1+T_NUM_NO_ISOTOPIC /*+T_NUM_ISOTOPIC*/) /* LinearCTTautomer */
73
74typedef AT_NUMB AT_TAUTOMER; /* LinearCTTautomer */
75
76typedef AT_ISO_SORT_KEY T_GROUP_ISOWT; /* must hold value up to T_GROUP_ISOWT_MULT^3-1 */
77 /* similar to AT_ISO_SORT_KEY */
78/* = num_1H + T_GROUP_ISOWT_MULT*(num_D + T_GROUP_ISOWT_MULT*num_T) */
79
80
81#define T_GROUP_ISOWT_MULT 1024 /* (max. number of identical isotopic hydrogens in a taut. group) + 1 */
82 /* changed from 256U 9-12-2003 */
83 /* (similar to AT_ISO_SORT_KEY_MULT ) */
84/* note: (long)T_GROUP_ISOWT should always be positive (have zero sign bit) */
85
87 AT_NUMB tgroup_num; /* ordering number of a tautomer group with isotopes > 0 */
88 /*
89 union {
90 struct {
91 AT_NUMB num_T;
92 AT_NUMB num_D;
93 AT_NUMB num_1H;
94 };
95 AT_NUMB num[T_NUM_ISOTOPIC];
96 };
97 */
98 AT_NUMB num[T_NUM_ISOTOPIC]; /* inverted order: num_T, num_D, num_1H */
100
101typedef enum tagTG_NumDA { /* 2004-02-26 */
102 TG_Num_dH, /* number of H donors that have only H (all single bonds) */
103 TG_Num_dM, /* number of H donors that have (-) (all single bonds) */
104 TG_Num_aH, /* number of H acceptors that have H and no (-) (+a double bond) */
105 TG_Num_aM, /* number of H acceptors that have (-) and possibly H (+ one double bond) */
106 TG_Num_dO, /* number of H donors =C-OH or =C-O(-) */
107 TG_Num_aO, /* number of H acceptors -C=O */
108 TG_NUM_DA /* number of elements in an array */
110
111typedef struct tagTautomerGroup {
112#if 0
113union {
114 struct {
115 /*T_NUM_NO_ISOTOPIC = 2 elements:*/
116 AT_RANK num_Mobile; /*Num_H+num_D+num_T+num_NegCharges*/
117 AT_RANK num_NegCharges;
118 /* T_NUM_ISOTOPIC = 3 elements*/
119 AT_RANK num_T; /*here the isotopic part (num+T_NUM_NO_ISOTOPIC) starts*/
120 AT_RANK num_D;
121 AT_RANK num_1H;
122 };
123 AT_RANK num[T_NUM_NO_ISOTOPIC+T_NUM_ISOTOPIC]; /*same size and meaning as num[] in T_ENDPOINT*/
124};
125#endif /* 0 */
126
127 AT_RANK num[T_NUM_NO_ISOTOPIC + T_NUM_ISOTOPIC]; /* same size and meaning as num[] in T_ENDPOINT */
128 /* isotopic inv. order: num_T, num_D, num_1H */
130 T_GROUP_ISOWT iWeight; /* isotopic "weight" = T_GROUP_ISOWT_MULT*(T_GROUP_ISOWT_MULT*num_T + num_D)+num_1H; */
131 AT_NUMB nGroupNumber; /* positive tautomer group ID = atom->endpoint */
132 AT_NUMB nNumEndpoints; /* number of the atom numbers in T_GROUP_INFO::nEndpointAtomNumber[] */
133 AT_NUMB nFirstEndpointAtNoPos; /* the first index of the atom number in T_GROUP_INFO::nEndpointAtomNumber[] */
135
136/* offsets/num_t_groups within T_GROUP_INFO::tGroupNumber */
137#define TGSO_CURR_ORDER 0 /* tGroupNumber: current sorting order */
138#define TGSO_SYMM_RANK 1 /* tSymmRank: symmetry ranks (no isotopes) = min. ordering number > 0. */
139#define TGSO_SYMM_IORDER 2 /* tiGroupNumber: isotopic symmetry rank sorting order */
140#define TGSO_SYMM_IRANK 3 /* tiSymmRank: isotopic symmetry ranks */
141#define TGSO_TOTAL_LEN 4
142
143/***************************************************/
144/* flags for t_group_info->tni.bNormalizationFlags */
145/***************************************************/
146#define FLAG_PROTON_NPO_SIMPLE_REMOVED 0x0001
147#define FLAG_PROTON_NP_HARD_REMOVED 0x0002
148#define FLAG_PROTON_AC_SIMPLE_ADDED 0x0004
149#define FLAG_PROTON_AC_SIMPLE_REMOVED 0x0008
150#define FLAG_PROTON_AC_HARD_REMOVED 0x0010
151#define FLAG_PROTON_AC_HARD_ADDED 0x0020
152#define FLAG_PROTON_CHARGE_CANCEL 0x0040
153#define FLAG_PROTON_SINGLE_REMOVED 0x0080
154
155/* signifies tautomeric structure even though no t-group discovered */
156#define FLAG_NORM_CONSIDER_TAUT ( FLAG_PROTON_NPO_SIMPLE_REMOVED | \
157 FLAG_PROTON_NP_HARD_REMOVED | \
158 FLAG_PROTON_AC_SIMPLE_ADDED | \
159 FLAG_PROTON_AC_SIMPLE_REMOVED | \
160 FLAG_PROTON_AC_HARD_REMOVED | \
161 FLAG_PROTON_AC_HARD_ADDED | \
162 FLAG_PROTON_SINGLE_REMOVED | \
163 FLAG_PROTON_CHARGE_CANCEL )
164
165#if ( FIX_N_MINUS_NORN_BUG == 1 )
166#define FLAG_FORCE_SALT_TAUT ( FLAG_PROTON_NP_HARD_REMOVED | \
167 FLAG_PROTON_AC_HARD_REMOVED | \
168 FLAG_PROTON_AC_HARD_ADDED | \
169 FLAG_PROTON_CHARGE_CANCEL )
170#else
171/* force salt tautomerism exploration */
172#define FLAG_FORCE_SALT_TAUT ( FLAG_PROTON_NP_HARD_REMOVED | \
173 FLAG_PROTON_AC_HARD_REMOVED | \
174 FLAG_PROTON_AC_HARD_ADDED )
175#endif
176
183
184/***************************************************/
185/* t_group_info definition */
186/***************************************************/
187typedef struct tagTautomerGroupsInfo {
188 T_GROUP *t_group; /* max_num_t_groups elements */
189 AT_NUMB *nEndpointAtomNumber; /* nNumEndpoints elements; also see comments to T_GROUP */
195
196 AT_NUMB *nIsotopicEndpointAtomNumber; /* [0]: number of the following atoms; [1...]: non-tautomeric atoms that may have isotopic H */
197 int nNumIsotopicEndpoints; /* allocated length of nIsotopicEndpointAtomNumber */
198 NUM_H num_iso_H[NUM_H_ISOTOPES]; /* isotopic H on tautomeric atoms and those in nIsotopicEndpointAtomNumber */
199
201
205
206#define CANON_FLAG_NO_H_RECANON 0x0001 /* iOther: second canonicalization of the no H structure */
207#define CANON_FLAG_NO_TAUT_H_DIFF 0x0002 /* iOther: NoTautH eq. partition differs from NoH */
208#define CANON_FLAG_ISO_ONLY_NON_TAUT_DIFF 0x0004 /* iOther: eq. partition in isotopic only non-taut differs from non-isotopic */
209#define CANON_FLAG_ISO_TAUT_DIFF 0x0008 /* iBase: isotopic eq. partition in isotopic taut differs from non-isotopic taut */
210#define CANON_FLAG_ISO_FIXED_H_DIFF 0x0010 /* iOther: isotopic eq. partition in fixed H non-taut differs from non-isotopic fixed H */
211
212/* Note: rank of tautomer atom #i = Rank[nEndpointAtomNumber[i]] */
213/* for each tautomer atom group (t_group) t_group.nFirstEndpointAtNoPos */
214/* is the first index of the atom number in nEndpointAtomNumber[] */
215
216typedef struct tagTautomerEndpoint {
217 /*
218 union {
219 struct {
220 AT_RANK num_Mobile; // Num_H+num_D+num_T+num_NegCharges
221 AT_RANK num_NegCharges;
222 AT_RANK num_T;
223 AT_RANK num_D;
224 };
225 AT_RANK num[T_NUM_NO_ISOTOPIC+T_NUM_ISOTOPIC]; // same size and meaning as num[] in T_GROUP
226 };
227 */
228 AT_RANK num[T_NUM_NO_ISOTOPIC + T_NUM_ISOTOPIC]; /* same size and meaning as num[] in T_GROUP */
231 AT_NUMB nEquNumber; /* same for endpoints connected by alt paths */
233 /*AT_NUMB neighbor_index; */
235
240
249
250
251/* positive charge group (extended onium) */
252
253#define CHARGED_CPOINT(X,i) ((X)[i].charge==1)
254
260
261typedef struct tagChargeGroup {
262 AT_RANK num[2]; /* [0]: number of (+), [1]: number atoms that have H, including H accessible through tautomerism */
267
277
278/* salts */
283 AT_NUMB endpoint; /* MAX_ATOMS+1 => found alt path to the candidate */
285
286typedef struct tagSaltGroupInfo {
289 int num_candidates; /* 0=>unimitialized, -1=>no candidates found */
290 int num_other_candidates; /* num. non-"acidic O" candidates */
291 int num_p_only_candidates; /* num. non-tautomeric p-donor/acceptor candidates like -CH2-SH */
293
294/********************* ATOM_SIZES *******************************/
295/* sizes of a component */
296typedef struct tagAtomSizes {
297 /* for tautomeric and non-tautomeric structures */
298 int nMaxNumStereoAtoms; /* max. number of stereo atoms in isotopic case */
299 int nMaxNumStereoBonds; /* max. number of stereo bonds in isotopic case */
300 int num_isotopic_atoms; /* includes atoms that have isotopic tautomeric H */
305 int nLenLinearCTStereoDble; /* max. number of stereo bonds in non-isotopic case */
306 int nLenLinearCTStereoCarb; /* max. number of stereo atoms in non-isotopic case */
307 /* int bHasIsotopicAtoms; */
309
311
312 /* tautomeric structure only; zeroes in non-tautomeric */
318
319
320typedef struct tagDfsPath {
322 /*AT_RANK nDfsLevel;*/
326
327
328#ifndef COMPILE_ALL_CPP
329#ifdef __cplusplus
330extern "C" {
331#endif
332#endif
333
334 int is_centerpoint_elem( U_CHAR el_number );
335 int is_centerpoint_elem_strict( U_CHAR el_number );
336#if ( KETO_ENOL_TAUT == 1 )
337 int is_centerpoint_elem_KET( U_CHAR el_number );
338#endif
339 int bIsCenterPointStrict( inp_ATOM *atom, int iat );
340 int nGetEndpointInfo( inp_ATOM *atom, int iat, ENDPOINT_INFO *eif );
341
342#if ( TAUT_PT_22_00 == 1 )
343 int nGetEndpointInfo_PT_22_00(inp_ATOM *atom, int iat, ENDPOINT_INFO *eif);
344#endif
345#if ( TAUT_PT_16_00 == 1 )
346 int nGetEndpointInfo_PT_16_00(inp_ATOM *atom, int iat, ENDPOINT_INFO *eif);
347#endif
348#if ( TAUT_PT_06_00 == 1 )
349 int nGetEndpointInfo_PT_06_00(inp_ATOM *atom, int iat, ENDPOINT_INFO *eif);
350#endif
351#if ( TAUT_PT_39_00 == 1 )
352 int nGetEndpointInfo_PT_39_00(inp_ATOM *atom, int iat, ENDPOINT_INFO *eif);
353#endif
354#if ( TAUT_PT_13_00 == 1 )
355 int nGetEndpointInfo_PT_13_00(inp_ATOM *atom, int iat, ENDPOINT_INFO *eif);
356#endif
357#if ( TAUT_PT_18_00 == 1 )
358 int nGetEndpointInfo_PT_18_00(inp_ATOM *atom, int iat, ENDPOINT_INFO *eif);
359#endif
360
361#if ( KETO_ENOL_TAUT == 1 )
362 int nGetEndpointInfo_KET( inp_ATOM *atom, int iat, ENDPOINT_INFO *eif );
363#endif
364 void AddAtom2DA( AT_RANK num_DA[], inp_ATOM *atom, int at_no, int bSubtract );
365 int AddAtom2num( AT_RANK num[], inp_ATOM *atom, int at_no, int bSubtract );
366 int AddEndPoint( T_ENDPOINT *pEndPoint, inp_ATOM *at, int iat );
367 int bHasAcidicHydrogen( inp_ATOM *at, int i );
368 int bHasOtherExchangableH( inp_ATOM *at, int i );
369 int bHasAcidicMinus( inp_ATOM *at, int i );
370
371
373 inp_ATOM *atom,
374 int nStartAtom,
375 AT_RANK *nBfsTreePos,
376 DFS_PATH *DfsPath,
377 int nMaxLenBfsTree,
378 T_ENDPOINT *EndPoint,
379 int nMaxNumEndPoint,
380 T_BONDPOS *BondPos,
381 int nMaxNumBondPos,
382 int *pnNumEndPoint,
383 int *pnNumBondPos,
384 struct BalancedNetworkStructure *pBNS,
385 struct BalancedNetworkData *pBD,
386 int num_atoms );
387
389 inp_ATOM *atom, int nStartAtom,
390 int nStartAtomNeighbor,
391 AT_RANK *nBfsTreePos,
392 DFS_PATH *DfsPath,
393 int nMaxLenBfsTree,
394 T_ENDPOINT *EndPoint,
395 int nMaxNumEndPoint,
396 T_BONDPOS *BondPos,
397 int nMaxNumBondPos,
398 int *pnNumEndPoint,
399 int *pnNumBondPos,
400 struct BalancedNetworkStructure *pBNS,
401 struct BalancedNetworkData *pBD,
402 int num_atoms );
403
405 inp_ATOM *atom,
406 int nStartAtom,
407 int nStartAtomNeighbor,
408 int nStartAtomNeighborEndpoint,
409 int nStartAtomNeighborNeighborEndpoint,
410 AT_RANK *nDfsPathPos,
411 DFS_PATH *DfsPath,
412 int nMaxLenDfsPath,
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,
425 int nStartAtom,
426 int nStartAtomNeighbor,
427 int nStartAtomNeighborEndpoint,
428 int nStartAtomNeighborNeighborEndpoint,
429 AT_RANK *nDfsPathPos,
430 DFS_PATH *DfsPath,
431 int nMaxLenDfsPath,
432 T_ENDPOINT *EndPoint,
433 int nMaxNumEndPoint,
434 T_BONDPOS *BondPos,
435 int nMaxNumBondPos,
436 int *pnNumEndPoint,
437 int *pnNumBondPos,
438 struct BalancedNetworkStructure *pBNS,
439 struct BalancedNetworkData *pBD,
440 int num_atoms );
441
442 int nGet15TautInAltPath( struct tagCANON_GLOBALS *pCG,
443 inp_ATOM *atom,
444 int nStartAtom, AT_RANK *nDfsPathPos,
445 DFS_PATH *DfsPath,
446 int nMaxLenDfsPath,
447 T_ENDPOINT *EndPoint,
448 int nMaxNumEndPoint,
449 T_BONDPOS *BondPos,
450 int nMaxNumBondPos,
451 int *pnNumEndPoint,
452 int *pnNumBondPos,
453 struct BalancedNetworkStructure *pBNS,
454 struct BalancedNetworkData *pBD,
455 int num_atoms );
456
457
458#ifndef COMPILE_ALL_CPP
459#ifdef __cplusplus
460}
461#endif
462#endif
463
464
465#endif /* _ICHITAUT_H_ */
long AT_ISO_SORT_KEY
Definition extr_ct.h:34
unsigned short AT_NUMB
Definition ichisize.h:10
unsigned short AT_RANK
Definition ichisize.h:11
signed short NUM_H
Definition ichisize.h:14
unsigned long INCHI_MODE
Definition ichisize.h:25
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:372
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:176
int bHasAcidicHydrogen(inp_ATOM *at, int i)
Definition ichi_bns.c:4164
struct tagTautomerEndpoint T_ENDPOINT
struct tagIsotopicTautomerGroup AT_ISO_TGROUP
#define T_NUM_NO_ISOTOPIC
Definition ichitaut.h:69
AT_ISO_SORT_KEY T_GROUP_ISOWT
Definition ichitaut.h:76
int nGetEndpointInfo_KET(inp_ATOM *atom, int iat, ENDPOINT_INFO *eif)
Definition ichitaut.c:881
int bHasAcidicMinus(inp_ATOM *at, int i)
Definition ichi_bns.c:4288
enum tagTG_NumDA TGNUMDA
int nGetEndpointInfo_PT_22_00(inp_ATOM *atom, int iat, ENDPOINT_INFO *eif)
Definition ichitaut.c:417
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:287
int nGetEndpointInfo_PT_39_00(inp_ATOM *atom, int iat, ENDPOINT_INFO *eif)
Definition ichitaut.c:642
struct tagChargeCandidate C_CANDIDATE
struct tagChargeGroup C_GROUP
int nGetEndpointInfo_PT_06_00(inp_ATOM *atom, int iat, ENDPOINT_INFO *eif)
Definition ichitaut.c:565
struct tagEndpointInfo ENDPOINT_INFO
int is_centerpoint_elem_KET(U_CHAR el_number)
Definition ichitaut.c:147
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:205
struct tagSaltChargeCandidate S_CANDIDATE
int nGetEndpointInfo_PT_16_00(inp_ATOM *atom, int iat, ENDPOINT_INFO *eif)
Definition ichitaut.c:489
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:248
void AddAtom2DA(AT_RANK num_DA[], inp_ATOM *atom, int at_no, int bSubtract)
Definition ichitaut.c:215
struct tagAtomSizes ATOM_SIZES
int is_centerpoint_elem_strict(U_CHAR el_number)
Definition ichitaut.c:155
#define T_NUM_ISOTOPIC
Definition ichitaut.h:70
int AddEndPoint(T_ENDPOINT *pEndPoint, inp_ATOM *at, int iat)
Definition ichitaut.c:295
struct tagSaltGroupInfo S_GROUP_INFO
tagTG_NumDA
Definition ichitaut.h:101
@ TG_Num_dH
Definition ichitaut.h:102
@ TG_Num_dM
Definition ichitaut.h:103
@ TG_Num_aO
Definition ichitaut.h:107
@ TG_Num_aM
Definition ichitaut.h:105
@ TG_NUM_DA
Definition ichitaut.h:108
@ TG_Num_dO
Definition ichitaut.h:106
@ TG_Num_aH
Definition ichitaut.h:104
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:326
AT_NUMB AT_TAUTOMER
Definition ichitaut.h:74
int is_centerpoint_elem(U_CHAR el_number)
Definition ichitaut.c:122
int bIsCenterPointStrict(inp_ATOM *atom, int iat)
Definition ichiqueu.c:180
struct tagTautomerNormInfo TNI
int nGetEndpointInfo(inp_ATOM *atom, int iat, ENDPOINT_INFO *eif)
Definition ichitaut.c:324
int nGetEndpointInfo_PT_18_00(inp_ATOM *atom, int iat, ENDPOINT_INFO *eif)
Definition ichitaut.c:797
struct tagTautomerBondLocation T_BONDPOS
int bHasOtherExchangableH(inp_ATOM *at, int i)
Definition ichi_bns.c:4184
int nGetEndpointInfo_PT_13_00(inp_ATOM *atom, int iat, ENDPOINT_INFO *eif)
Definition ichitaut.c:721
signed char S_CHAR
Definition inchi_api.h:78
#define NUM_H_ISOTOPES
Definition inchi_api.h:72
unsigned char U_CHAR
Definition inchi_api.h:79
Definition ichi_bns.h:251
Definition ichi_bns.h:198
Definition ichitaut.h:296
int nLenBonds
Definition ichitaut.h:302
int bMayHaveStereo
Definition ichitaut.h:308
int nLenLinearCTIsotopicTautomer
Definition ichitaut.h:314
int nLenIsotopicEndpoints
Definition ichitaut.h:316
int nLenCT
Definition ichitaut.h:301
int nLenLinearCTStereoDble
Definition ichitaut.h:305
int nMaxNumStereoBonds
Definition ichitaut.h:299
int nMaxNumStereoAtoms
Definition ichitaut.h:298
int bHasIsotopicTautGroups
Definition ichitaut.h:315
int nLenIsotopic
Definition ichitaut.h:303
int bIgnoreIsotopic
Definition ichitaut.h:310
int nLenLinearCTTautomer
Definition ichitaut.h:313
int nLenCTAtOnly
Definition ichitaut.h:304
int nLenLinearCTStereoCarb
Definition ichitaut.h:306
int num_isotopic_atoms
Definition ichitaut.h:300
Definition ichicant.h:303
Definition ichitaut.h:255
S_CHAR subtype
Definition ichitaut.h:258
S_CHAR type
Definition ichitaut.h:257
AT_NUMB atnumber
Definition ichitaut.h:256
Definition ichitaut.h:261
AT_RANK num_CPoints
Definition ichitaut.h:263
AT_RANK num[2]
Definition ichitaut.h:262
AT_NUMB nGroupNumber
Definition ichitaut.h:264
U_CHAR cGroupType
Definition ichitaut.h:265
Definition ichitaut.h:268
int num_candidates
Definition ichitaut.h:275
C_CANDIDATE * c_candidate
Definition ichitaut.h:273
int num_c_groups
Definition ichitaut.h:270
int max_num_c_groups
Definition ichitaut.h:271
C_GROUP * c_group
Definition ichitaut.h:269
int max_num_candidates
Definition ichitaut.h:274
Definition ichitaut.h:320
U_CHAR bond_type
Definition ichitaut.h:323
AT_RANK at_no
Definition ichitaut.h:321
S_CHAR bond_pos
Definition ichitaut.h:324
Definition ichitaut.h:241
S_CHAR cAcceptor
Definition ichitaut.h:246
S_CHAR cMobile
Definition ichitaut.h:244
S_CHAR cKetoEnolCode
Definition ichitaut.h:247
S_CHAR cNeutralBondsValence
Definition ichitaut.h:243
S_CHAR cDonor
Definition ichitaut.h:245
S_CHAR cMoveableCharge
Definition ichitaut.h:242
Structure describing an input atom.
Definition inpdef.h:107
Definition ichitaut.h:86
AT_NUMB num[T_NUM_ISOTOPIC]
Definition ichitaut.h:98
AT_NUMB tgroup_num
Definition ichitaut.h:87
Definition ichitaut.h:279
S_CHAR type
Definition ichitaut.h:281
S_CHAR subtype
Definition ichitaut.h:282
AT_NUMB endpoint
Definition ichitaut.h:283
AT_NUMB atnumber
Definition ichitaut.h:280
Definition ichitaut.h:286
int max_num_candidates
Definition ichitaut.h:288
S_CANDIDATE * s_candidate
Definition ichitaut.h:287
int num_candidates
Definition ichitaut.h:289
int num_other_candidates
Definition ichitaut.h:290
int num_p_only_candidates
Definition ichitaut.h:291
Definition ichitaut.h:236
AT_NUMB nAtomNumber
Definition ichitaut.h:237
AT_NUMB neighbor_index
Definition ichitaut.h:238
Definition ichitaut.h:216
AT_NUMB nAtomNumber
Definition ichitaut.h:232
AT_RANK num_DA[TG_NUM_DA]
Definition ichitaut.h:229
AT_RANK num[T_NUM_NO_ISOTOPIC+T_NUM_ISOTOPIC]
Definition ichitaut.h:228
AT_NUMB nEquNumber
Definition ichitaut.h:231
AT_NUMB nGroupNumber
Definition ichitaut.h:230
Definition ichitaut.h:111
AT_NUMB nNumEndpoints
Definition ichitaut.h:132
AT_RANK num_DA[TG_NUM_DA]
Definition ichitaut.h:129
T_GROUP_ISOWT iWeight
Definition ichitaut.h:130
AT_NUMB nFirstEndpointAtNoPos
Definition ichitaut.h:133
AT_RANK num[T_NUM_NO_ISOTOPIC+T_NUM_ISOTOPIC]
Definition ichitaut.h:127
AT_NUMB nGroupNumber
Definition ichitaut.h:131
Definition ichitaut.h:187
int max_num_t_groups
Definition ichitaut.h:193
AT_NUMB * tGroupNumber
Definition ichitaut.h:190
int bIgnoreIsotopic
Definition ichitaut.h:194
int num_t_groups
Definition ichitaut.h:192
AT_NUMB * nIsotopicEndpointAtomNumber
Definition ichitaut.h:196
INCHI_MODE bTautFlagsDone
Definition ichitaut.h:203
T_GROUP * t_group
Definition ichitaut.h:188
TNI tni
Definition ichitaut.h:200
NUM_H num_iso_H[NUM_H_ISOTOPES]
Definition ichitaut.h:198
INCHI_MODE bTautFlags
Definition ichitaut.h:202
int nNumIsotopicEndpoints
Definition ichitaut.h:197
AT_NUMB * nEndpointAtomNumber
Definition ichitaut.h:189
int nNumEndpoints
Definition ichitaut.h:191
Definition ichitaut.h:177
NUM_H nNumRemovedExplicitH
Definition ichitaut.h:178
INCHI_MODE bNormalizationFlags
Definition ichitaut.h:181
NUM_H nNumRemovedProtonsIsotopic[NUM_H_ISOTOPES]
Definition ichitaut.h:180
NUM_H nNumRemovedProtons
Definition ichitaut.h:179