InChI
 
Loading...
Searching...
No Matches
ichicomn.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 _INCHICOMN_H_
8#define _INCHICOMN_H_
9
10
11#include "ichierr.h"
12#include "ichicano.h"
13
14/*
15 Globals for sorting
16 */
17
18#define tsort insertions_sort
19
20typedef struct tagEquNeigh {
21 int num_to; /* number of neighbors with equal mapping ranks; one of them has min. canon. number */
22 AT_RANK to_at[4]; /* to_atom neighbors #s with equal mapping ranks */
23 AT_RANK from_at; /* from_at neighbor # which has min. canon. number and can be mapped on any of the above to_at[] */
24 AT_RANK rank; /* equal mapping rank value */
25 AT_RANK canon_rank; /* min. canon. number */
27
28struct tagINCHI_CLOCK;
29#ifndef COMPILE_ALL_CPP
30#ifdef __cplusplus
31extern "C" {
32#endif
33#endif
34
35
36 struct tagINCHI_CLOCK;
37
38
39
40 /*******************************************************************/
41 /* ichiisot.c */
42 int unpack_iso_sort_key( AT_ISO_SORT_KEY iso_sort_key, S_CHAR *num_1H, S_CHAR *num_2H, S_CHAR *num_3H, S_CHAR *iso_atw_diff );
43 AT_ISO_SORT_KEY make_iso_sort_key( int iso_atw_diff, int num_1H, int num_2H, int num_3H );
44 int set_atom_iso_sort_keys( int num_at, sp_ATOM *at, T_GROUP_INFO* t_group_info, int *bHasIsotopicInTautomerGroups );
45 /***********************************************************************/
46 /* ichisort.c */
47
50 int insertions_sort_AT_RANK( AT_RANK *base, int num );
51 void insertions_sort_NeighListBySymmAndCanonRank( NEIGH_LIST base, const AT_RANK *nSymmRank, const AT_RANK *nCanonRank );
52 int CompareNeighListLex( NEIGH_LIST pp1, NEIGH_LIST pp2, const AT_RANK *nRank );
53 int CompareNeighListLexUpToMaxRank( NEIGH_LIST pp1, NEIGH_LIST pp2, const AT_RANK *nRank, AT_RANK nMaxAtNeighRank );
54 int compare_NeighLists( const NEIGH_LIST *op1, const NEIGH_LIST *op2, void *p );
55 int CompNeighborsAT_NUMBER( const void* a1, const void* a2, void *p );
56 int comp_AT_RANK( const void* a1, const void* a2, void * );
57 int CompRank( const void* a1, const void* a2, void *p );
58 int CompRanksOrd( const void* a1, const void* a2, void *p );
59
60 int CompAtomInvariants2Only( const void* a1, const void* a2, void *p );
61 int CompAtomInvariants2( const void* a1, const void* a2, void *p );
62
63 int CompNeighListRanks( const void* a1, const void* a2, void *p );
64 int CompNeighListRanksOrd( const void* a1, const void* a2, void *p );
65 int CompNeighLists( const void* a1, const void* a2, void *p );
66 int CompNeighListsUpToMaxRank( const void* a1, const void* a2, void *p );
67 int CompNeighborsRanksCountEql( const void* a1, const void* a2, void *p );
68 int CompRanksInvOrd( const void* a1, const void* a2, void * );
69 int CompChemElemLex( const void *a1, const void *a2 );
70 int* iisort( int *list, int num );
71
72
73 NEIGH_LIST *CreateNeighList( int num_atoms, int num_at_tg, sp_ATOM* at, int bDoubleBondSquare, T_GROUP_INFO *t_group_info );
74 NEIGH_LIST *CreateNeighListFromLinearCT( AT_NUMB *LinearCT, int nLenCT, int num_atoms );
75
76 void FreeNeighList( NEIGH_LIST *pp );
77 int BreakAllTies( CANON_GLOBALS *pCG, int num_atoms, int num_max, AT_RANK **pRankStack,
78 NEIGH_LIST *NeighList, AT_RANK *nTempRank, CANON_STAT *pCS );
79
80 /******************************************************************************/
81 /* ichimap.c */
82 void switch_ptrs( AT_RANK **p1, AT_RANK **p2 );
83
84 int SortedEquInfoToRanks( const AT_RANK* nSymmRank, AT_RANK* nRank, const AT_RANK* nAtomNumber, int num_atoms, int *bChanged );
85 int SortedRanksToEquInfo( AT_RANK* nSymmRank, const AT_RANK* nRank, const AT_RANK* nAtomNumber, int num_atoms );
86
87 int SetNewRanksFromNeighLists( CANON_GLOBALS *pCG, int num_atoms, NEIGH_LIST *NeighList, AT_RANK *nRank, AT_RANK *nNewRank,
88 AT_RANK *nAtomNumber, int bUseAltSort, int( *comp )( const void *, const void *, void * ) );
89 int SetNewRanksFromNeighLists3( CANON_GLOBALS *pCG, int num_atoms, NEIGH_LIST *NeighList, AT_RANK *nRank, AT_RANK *nNewRank,
90 AT_RANK *nAtomNumber );
91 int SetNewRanksFromNeighLists4( CANON_GLOBALS *pCG, int num_atoms, NEIGH_LIST *NeighList, AT_RANK *nRank, AT_RANK *nNewRank,
92 AT_RANK *nAtomNumber, AT_RANK nMaxAtRank );
93 void SortNeighListsBySymmAndCanonRank( int num_atoms, NEIGH_LIST *NeighList, const AT_RANK *nSymmRank, const AT_RANK *nCanonRank );
94 int SortNeighLists2( int num_atoms, AT_RANK *nRank, NEIGH_LIST *NeighList, AT_RANK *nAtomNumber );
95 int DifferentiateRanks2( CANON_GLOBALS *pCG, int num_atoms, NEIGH_LIST *NeighList,
96 int nNumCurrRanks, AT_RANK *pnCurrRank, AT_RANK *pnPrevRank,
97 AT_RANK *nAtomNumber, long *lNumIter, int bUseAltSort );
98
99 int DifferentiateRanks3( CANON_GLOBALS *pCG, int num_atoms, NEIGH_LIST *NeighList,
100 int nNumCurrRanks, AT_RANK *pnCurrRank, AT_RANK *pnPrevRank,
101 AT_RANK *nAtomNumber, long *lNumIter );
102 int DifferentiateRanks4( CANON_GLOBALS *pCG, int num_atoms, NEIGH_LIST *NeighList,
103 int nNumCurrRanks, AT_RANK *pnCurrRank, AT_RANK *pnPrevRank,
104 AT_RANK *nAtomNumber, AT_RANK nMaxAtRank, long *lNumIter );
105 int DifferentiateRanksBasic( CANON_GLOBALS *pCG, int num_atoms, NEIGH_LIST *NeighList,
106 int nNumCurrRanks, AT_RANK *pnCurrRank, AT_RANK *pnPrevRank,
107 AT_RANK *nAtomNumber, long *lNumIter, int bUseAltSort );
108
109 int parity_of_mapped_atom2( CANON_GLOBALS *pCG, int from_at, int to_at, const sp_ATOM *at, EQ_NEIGH *pEN,
110 const AT_RANK *nCanonRankFrom, const AT_RANK *nRankFrom, const AT_RANK *nRankTo );
111
112 int parity_of_mapped_half_bond( int from_at, int to_at, int from_neigh, int to_neigh,
113 sp_ATOM *at, EQ_NEIGH *pEN,
114 const AT_RANK *nCanonRankFrom, const AT_RANK *nRankFrom, const AT_RANK *nRankTo );
115
116 int HalfStereoBondParity( sp_ATOM *at, int at_no1, int i_sb_neigh, const AT_RANK *nRank );
117
118 int NumberOfTies( AT_RANK **pRankStack1, AT_RANK **pRankStack2, int length, int at_no1, int at_no2, AT_RANK *nNewRank, int *bAddStack, int *bMapped1 );
119
120 int map_an_atom2( CANON_GLOBALS *pCG, int num_atoms, int num_max, int at_no1/*from*/, int at_no2/*to*/,
121 AT_RANK *nTempRank,
122 int nNumMappedRanks, int *pnNewNumMappedRanks,
123 CANON_STAT *pCS,
124 NEIGH_LIST *NeighList,
125 AT_RANK **pRankStack1, AT_RANK **pRankStack2, int *bAddStack );
126 int ClearPreviousMappings( AT_RANK **pRankStack1 );
127
128 int SetOneStereoBondIllDefParity( sp_ATOM *at, int jc, /* atom number*/ int k /* stereo bond ord. number*/, int new_parity );
129 int RemoveOneStereoBond( sp_ATOM *at, int jc, /* atom number*/ int k /* stereo bond number*/ );
130 int RemoveOneStereoCenter( sp_ATOM *at, int jc /* atom number*/ );
131 int RemoveCalculatedNonStereo( CANON_GLOBALS *pCG, sp_ATOM *at, int num_atoms, int num_at_tg,
132 AT_RANK **pRankStack1, AT_RANK **pRankStack2, AT_RANK *nTempRank, NEIGH_LIST *NeighList,
133 const AT_RANK *nSymmRank, AT_RANK *nCanonRank,
134 AT_RANK *nAtomNumberCanon, CANON_STAT *pCS,
135 int vABParityUnknown );
136
137
138 int might_change_other_atom_parity( sp_ATOM *at, int num_atoms, int at_no, AT_RANK *nRank2, AT_RANK *nRank1 );
139
141 struct tagINCHI_CLOCK *ic, CANON_GLOBALS *pCG, sp_ATOM *at, int num_atoms, int num_at_tg, int num_max, int bAllene,
142 const AT_RANK *nCanonRankFrom, const AT_RANK *nAtomNumberCanonFrom, /* non-stereo canon ranking */
143 AT_RANK *nCanonRankTo, /* output canonical numbering*/
144 const AT_RANK *nSymmRank, AT_RANK **pRankStack1/*from*/, AT_RANK **pRankStack2/*to*/,
145 AT_RANK *nTempRank, int nNumMappedRanksInput,
146 AT_RANK *nSymmStereo, NEIGH_LIST *NeighList,
147 CANON_STAT *pCS, CUR_TREE *cur_tree, int nNumMappedBonds,
148 int vABParityUnknown );
149
150 int map_stereo_atoms4( struct tagINCHI_CLOCK *ic, CANON_GLOBALS *pCG,
151 sp_ATOM *at, int num_atoms, int num_at_tg, int num_max,
152 const AT_RANK *nCanonRankFrom, const AT_RANK *nAtomNumberCanonFrom, AT_RANK *nCanonRankTo, /* canonical numbering to be mapped */
153 const AT_RANK *nSymmRank, AT_RANK **pRankStack1/*from*/, AT_RANK **pRankStack2/*to*/,
154 AT_RANK *nTempRank, int nNumMappedRanksInput,
155 AT_RANK *nSymmStereo, NEIGH_LIST *NeighList,
156 CANON_STAT *pCS, CUR_TREE *cur_tree, int nNumMappedAtoms,
157 int vABParityUnknown );
158
159 int CurTreeAlloc( CUR_TREE *cur_tree, int num_atoms );
160 int CurTreeReAlloc( CUR_TREE *cur_tree );
161 void CurTreeFree( CUR_TREE *cur_tree );
162 int CurTreeAddRank( CUR_TREE *cur_tree, AT_NUMB rank );
163 int CurTreeRemoveLastRank( CUR_TREE *cur_tree );
165 int CurTreeFindTheRankPos( CUR_TREE *cur_tree, AT_NUMB rank );
166 int CurTreeGetPos( CUR_TREE *cur_tree );
167 int CurTreeSetPos( CUR_TREE *cur_tree, int len );
168 int CurTreeAddAtom( CUR_TREE *cur_tree, int at_no );
170 int CurTreeIsLastRank( CUR_TREE *cur_tree, AT_NUMB rank );
171 int CurTreeIsLastAtomEqu( CUR_TREE *cur_tree, int at_no, AT_NUMB *nSymmStereo );
172 int CurTreeRemoveIfLastAtom( CUR_TREE *cur_tree, int at_no );
174 void CurTreeKeepLastAtomsOnly( CUR_TREE *cur_tree, int tpos, int shift );
175
176
177 void SetUseAtomForStereo( S_CHAR *bAtomUsedForStereo, sp_ATOM *at, int num_atoms );
178
179 int nJoin2Mcrs( AT_RANK *nEqArray, AT_RANK n1, AT_RANK n2 );
180 AT_RANK nGetMcr( AT_RANK *nEqArray, AT_RANK n );
181 int bUniqueAtNbrFromMappingRank( AT_RANK **pRankStack, AT_RANK nAtRank, AT_NUMB *nAtNumber );
182
183 int Next_SB_At_CanonRanks2( AT_RANK *canon_rank1, AT_RANK *canon_rank2, /* canonical numbers */
184 AT_RANK *canon_rank1_min, AT_RANK *canon_rank2_min,
185 int *bFirstTime, S_CHAR *bAtomUsedForStereo,
186 const ppAT_RANK pRankStack1, const ppAT_RANK pRankStack2,
187 const AT_RANK *nCanonRankFrom, const AT_RANK *nAtomNumberCanonFrom,
188 const sp_ATOM *at, int num_atoms, int bAllene );
189
190 int Next_SC_At_CanonRank2( AT_RANK *canon_rank1, /* 1st call input: largest canon number mapped so far or 0 */
191 /* output: suggested canon. rank > than input if success */
192 AT_RANK *canon_rank1_min, /* 1st call:0 next calls: first tried canon. number */
193 int *bFirstTime, /* 1 at the time of the 1st call */
194 S_CHAR *bAtomUsedForStereo, /* STEREO_AT_MARK if the atom has not been mapped yet */
195 const ppAT_RANK pRankStack1, /* mapping ranks/sort order of atoms with canon. numbers (from) */
196 const ppAT_RANK pRankStack2, /* mapping ranks/sort order of atoms with stereo (to) */
197 const AT_RANK *nAtomNumberCanonFrom, /* sorted order of the canon. numbers */
198 int num_atoms );
199
200 int NextStereoParity2Test( int *stereo_bond_parity, int *sb_parity_calc,
201 int nNumBest, int nNumWorse, int nNumUnkn, int nNumUndf, int nNumCalc,
202 int vABParityUnknown );
203
204 int All_SB_Same( AT_RANK canon_rank1, AT_RANK canon_rank2, /* canonical numbers */
205 const ppAT_RANK pRankStack1, const ppAT_RANK pRankStack2,
206 const AT_RANK *nAtomNumberCanonFrom,
207 sp_ATOM *at );
208
209 int All_SC_Same( AT_RANK canon_rank1, /* canonical number */
210 const ppAT_RANK pRankStack1, const ppAT_RANK pRankStack2,
211 const AT_RANK *nAtomNumberCanonFrom,
212 const sp_ATOM *at );
213
214
215 int CompareLinCtStereoDoubleToValues( AT_STEREO_DBLE *LinearCTStereoDble,
216 AT_RANK at_rank_canon1, AT_RANK at_rank_canon2, U_CHAR bond_parity );
217
218 int CompareLinCtStereoAtomToValues( AT_STEREO_CARB *LinearCTStereoCarb,
219 AT_RANK at_rank_canon1, U_CHAR parity );
220 int CompareLinCtStereoDble( AT_STEREO_DBLE *LinearCTStereoDble1, int nLenLinearCTStereoDble1,
221 AT_STEREO_DBLE *LinearCTStereoDble2, int nLenLinearCTStereoDble2 );
222 int CompareLinCtStereoCarb( AT_STEREO_CARB *LinearCTStereoCarb1, int nLenLinearCTStereoCarb1,
223 AT_STEREO_CARB *LinearCTStereoCarb2, int nLenLinearCTStereoCarb2 );
224 int CompareLinCtStereo( AT_STEREO_DBLE *LinearCTStereoDble1, int nLenLinearCTStereoDble1,
225 AT_STEREO_CARB *LinearCTStereoCarb1, int nLenLinearCTStereoCarb1,
226 AT_STEREO_DBLE *LinearCTStereoDble2, int nLenLinearCTStereoDble2,
227 AT_STEREO_CARB *LinearCTStereoCarb2, int nLenLinearCTStereoCarb2 );
228 /***************************************************************************/
229 /* ichicans.c */
230 int UnmarkNonStereo( CANON_GLOBALS *pCG, sp_ATOM *at, int num_atoms, const AT_RANK *nRank, const AT_RANK *nAtomNumber, int bIsotopic );
231 int FillSingleStereoDescriptors( CANON_GLOBALS *pCG, sp_ATOM *at, int i, int num_trans, const AT_RANK *nRank
232 , AT_STEREO_CARB *LinearCTStereoCarb, int *nStereoCarbLen, int nMaxStereoCarbLen
233 , AT_STEREO_DBLE *LinearCTStereoDble, int *nStereoDbleLen, int nMaxStereoDbleLen
234 , int bAllene );
235 void SwitchAtomStereoAndIsotopicStereo( sp_ATOM *at, int num_atoms, int *bSwitched );
236 void SetCtToIsotopicStereo( CANON_STAT *pCS, CANON_STAT *pCS2 );
238 int FillAllStereoDescriptors( CANON_GLOBALS *pCG, sp_ATOM *at, int num_atoms, const AT_RANK *nCanonRank, const AT_RANK *nAtomNumberCanon, CANON_STAT *pCS );
239 int FillOutStereoParities( sp_ATOM *at, int num_atoms, const AT_RANK *nCanonRank, const AT_RANK *nAtomNumberCanon,
240 const AT_RANK *nRank, const AT_RANK *nAtomNumber, CANON_STAT *pCS, CANON_GLOBALS *pCG, int bIsotopic );
241 int InvertStereo( sp_ATOM *at, int num_at_tg,
242 AT_RANK *nCanonRank, AT_RANK *nAtomNumberCanon,
243 CANON_STAT *pCS, int bInvertLinearCTStereo );
244 int find_atoms_with_parity( sp_ATOM *at, S_CHAR *visited, int from_atom, int cur_atom );
245 int GetStereoNeighborPos( sp_ATOM *at, int iAt1, int iAt2 );
246 int GetStereoBondParity( sp_ATOM *at, int i, int n, AT_RANK *nRank );
247 int GetStereoCenterParity( CANON_GLOBALS *pCG, sp_ATOM *at, int i, AT_RANK *nRank );
248 int GetPermutationParity( CANON_GLOBALS *pCG, sp_ATOM *at, AT_RANK nAvoidNeighbor, AT_RANK *nCanonRank );
249
250#ifndef COMPILE_ALL_CPP
251#ifdef __cplusplus
252}
253#endif
254#endif
255
256
257#endif /* _INCHICOMN_H_ */
long AT_ISO_SORT_KEY
Definition extr_ct.h:34
AT_RANK * NEIGH_LIST
Definition ichicant.h:39
int CompareNeighListLex(NEIGH_LIST pp1, NEIGH_LIST pp2, const AT_RANK *nRank)
Definition ichisort.c:525
void CurTreeKeepLastAtomsOnly(CUR_TREE *cur_tree, int tpos, int shift)
Definition ichimap1.c:925
int CurTreeAlloc(CUR_TREE *cur_tree, int num_atoms)
Definition ichimap1.c:788
int SetNewRanksFromNeighLists4(CANON_GLOBALS *pCG, int num_atoms, NEIGH_LIST *NeighList, AT_RANK *nRank, AT_RANK *nNewRank, AT_RANK *nAtomNumber, AT_RANK nMaxAtRank)
Definition ichimap2.c:273
int nJoin2Mcrs(AT_RANK *nEqArray, AT_RANK n1, AT_RANK n2)
Definition ichimap1.c:331
int CompRanksInvOrd(const void *a1, const void *a2, void *)
Definition ichisort.c:635
int set_atom_iso_sort_keys(int num_at, sp_ATOM *at, T_GROUP_INFO *t_group_info, int *bHasIsotopicInTautomerGroups)
Definition ichiisot.c:32
int CurTreeRemoveIfLastAtom(CUR_TREE *cur_tree, int at_no)
Definition ichimap1.c:958
int CompareLinCtStereoCarb(AT_STEREO_CARB *LinearCTStereoCarb1, int nLenLinearCTStereoCarb1, AT_STEREO_CARB *LinearCTStereoCarb2, int nLenLinearCTStereoCarb2)
Definition ichimap1.c:188
int CompareLinCtStereoAtomToValues(AT_STEREO_CARB *LinearCTStereoCarb, AT_RANK at_rank_canon1, U_CHAR parity)
Definition ichimap1.c:252
int DifferentiateRanks2(CANON_GLOBALS *pCG, int num_atoms, NEIGH_LIST *NeighList, int nNumCurrRanks, AT_RANK *pnCurrRank, AT_RANK *pnPrevRank, AT_RANK *nAtomNumber, long *lNumIter, int bUseAltSort)
Definition ichimap2.c:483
int insertions_sort_NeighList_AT_NUMBERS3(NEIGH_LIST base, AT_RANK *nRank)
Definition ichisort.c:361
int DifferentiateRanks3(CANON_GLOBALS *pCG, int num_atoms, NEIGH_LIST *NeighList, int nNumCurrRanks, AT_RANK *pnCurrRank, AT_RANK *pnPrevRank, AT_RANK *nAtomNumber, long *lNumIter)
Definition ichimap2.c:526
int CompareLinCtStereo(AT_STEREO_DBLE *LinearCTStereoDble1, int nLenLinearCTStereoDble1, AT_STEREO_CARB *LinearCTStereoCarb1, int nLenLinearCTStereoCarb1, AT_STEREO_DBLE *LinearCTStereoDble2, int nLenLinearCTStereoDble2, AT_STEREO_CARB *LinearCTStereoCarb2, int nLenLinearCTStereoCarb2)
Definition ichimap1.c:227
int CurTreeIsLastRank(CUR_TREE *cur_tree, AT_NUMB rank)
Definition ichimap1.c:867
int CompNeighListRanksOrd(const void *a1, const void *a2, void *p)
Definition ichisort.c:622
int compare_NeighLists(const NEIGH_LIST *op1, const NEIGH_LIST *op2, void *p)
Definition ichisort.c:572
NEIGH_LIST * CreateNeighListFromLinearCT(AT_NUMB *LinearCT, int nLenCT, int num_atoms)
Definition ichisort.c:666
struct tagEquNeigh EQ_NEIGH
void SetCtToIsotopicStereo(CANON_STAT *pCS, CANON_STAT *pCS2)
Definition ichicans.c:694
AT_RANK nGetMcr(AT_RANK *nEqArray, AT_RANK n)
Definition ichimap1.c:301
int GetStereoBondParity(sp_ATOM *at, int i, int n, AT_RANK *nRank)
Definition ichicans.c:2184
void FreeNeighList(NEIGH_LIST *pp)
Definition ichisort.c:906
int bUniqueAtNbrFromMappingRank(AT_RANK **pRankStack, AT_RANK nAtRank, AT_NUMB *nAtNumber)
Definition ichimap1.c:281
int RemoveCalculatedNonStereo(CANON_GLOBALS *pCG, sp_ATOM *at, int num_atoms, int num_at_tg, AT_RANK **pRankStack1, AT_RANK **pRankStack2, AT_RANK *nTempRank, NEIGH_LIST *NeighList, const AT_RANK *nSymmRank, AT_RANK *nCanonRank, AT_RANK *nAtomNumberCanon, CANON_STAT *pCS, int vABParityUnknown)
Definition ichimap2.c:3637
int CurTreeIsLastAtomEqu(CUR_TREE *cur_tree, int at_no, AT_NUMB *nSymmStereo)
Definition ichimap1.c:1019
int unpack_iso_sort_key(AT_ISO_SORT_KEY iso_sort_key, S_CHAR *num_1H, S_CHAR *num_2H, S_CHAR *num_3H, S_CHAR *iso_atw_diff)
int SortedRanksToEquInfo(AT_RANK *nSymmRank, const AT_RANK *nRank, const AT_RANK *nAtomNumber, int num_atoms)
Definition ichimap2.c:164
int ClearPreviousMappings(AT_RANK **pRankStack1)
Definition ichimap2.c:1299
int CurTreeAddRank(CUR_TREE *cur_tree, AT_NUMB rank)
Definition ichimap1.c:846
int InvertStereo(sp_ATOM *at, int num_at_tg, AT_RANK *nCanonRank, AT_RANK *nAtomNumberCanon, CANON_STAT *pCS, int bInvertLinearCTStereo)
Definition ichicans.c:1981
int CompRank(const void *a1, const void *a2, void *p)
Definition ichisort.c:440
void CurTreeFree(CUR_TREE *cur_tree)
Definition ichimap1.c:836
int BreakAllTies(CANON_GLOBALS *pCG, int num_atoms, int num_max, AT_RANK **pRankStack, NEIGH_LIST *NeighList, AT_RANK *nTempRank, CANON_STAT *pCS)
Definition ichisort.c:921
int parity_of_mapped_half_bond(int from_at, int to_at, int from_neigh, int to_neigh, sp_ATOM *at, EQ_NEIGH *pEN, const AT_RANK *nCanonRankFrom, const AT_RANK *nRankFrom, const AT_RANK *nRankTo)
Definition ichimap2.c:923
int might_change_other_atom_parity(sp_ATOM *at, int num_atoms, int at_no, AT_RANK *nRank2, AT_RANK *nRank1)
Definition ichimap2.c:1426
int HalfStereoBondParity(sp_ATOM *at, int at_no1, int i_sb_neigh, const AT_RANK *nRank)
Definition ichimap2.c:767
int RemoveOneStereoCenter(sp_ATOM *at, int jc)
Definition ichicans.c:265
void switch_ptrs(AT_RANK **p1, AT_RANK **p2)
Definition ichimap2.c:195
int All_SB_Same(AT_RANK canon_rank1, AT_RANK canon_rank2, const ppAT_RANK pRankStack1, const ppAT_RANK pRankStack2, const AT_RANK *nAtomNumberCanonFrom, sp_ATOM *at)
Definition ichimap1.c:358
int CurTreeSetPos(CUR_TREE *cur_tree, int len)
Definition ichimap1.c:988
int CompRanksOrd(const void *a1, const void *a2, void *p)
Definition ichisort.c:451
int * iisort(int *list, int num)
Definition ichisort.c:979
int Next_SB_At_CanonRanks2(AT_RANK *canon_rank1, AT_RANK *canon_rank2, AT_RANK *canon_rank1_min, AT_RANK *canon_rank2_min, int *bFirstTime, S_CHAR *bAtomUsedForStereo, const ppAT_RANK pRankStack1, const ppAT_RANK pRankStack2, const AT_RANK *nCanonRankFrom, const AT_RANK *nAtomNumberCanonFrom, const sp_ATOM *at, int num_atoms, int bAllene)
Definition ichimap1.c:483
void SwitchAtomStereoAndIsotopicStereo(sp_ATOM *at, int num_atoms, int *bSwitched)
Definition ichicans.c:670
int FillAllStereoDescriptors(CANON_GLOBALS *pCG, sp_ATOM *at, int num_atoms, const AT_RANK *nCanonRank, const AT_RANK *nAtomNumberCanon, CANON_STAT *pCS)
Definition ichicans.c:731
int CurTreeRemoveLastRank(CUR_TREE *cur_tree)
Definition ichimap1.c:1001
int SetNewRanksFromNeighLists3(CANON_GLOBALS *pCG, int num_atoms, NEIGH_LIST *NeighList, AT_RANK *nRank, AT_RANK *nNewRank, AT_RANK *nAtomNumber)
Definition ichimap2.c:206
int find_atoms_with_parity(sp_ATOM *at, S_CHAR *visited, int from_atom, int cur_atom)
Definition ichicans.c:120
int CompNeighborsAT_NUMBER(const void *a1, const void *a2, void *p)
Definition ichisort.c:418
int All_SC_Same(AT_RANK canon_rank1, const ppAT_RANK pRankStack1, const ppAT_RANK pRankStack2, const AT_RANK *nAtomNumberCanonFrom, const sp_ATOM *at)
Definition ichimap1.c:18
int CompAtomInvariants2Only(const void *a1, const void *a2, void *p)
Definition ichisort.c:467
int SetNewRanksFromNeighLists(CANON_GLOBALS *pCG, int num_atoms, NEIGH_LIST *NeighList, AT_RANK *nRank, AT_RANK *nNewRank, AT_RANK *nAtomNumber, int bUseAltSort, int(*comp)(const void *, const void *, void *))
Definition ichimap2.c:345
int SortNeighLists2(int num_atoms, AT_RANK *nRank, NEIGH_LIST *NeighList, AT_RANK *nAtomNumber)
Definition ichimap2.c:413
int CurTreeRemoveLastAtom(CUR_TREE *cur_tree)
int SetOneStereoBondIllDefParity(sp_ATOM *at, int jc, int k, int new_parity)
Definition ichicans.c:207
void insertions_sort_NeighListBySymmAndCanonRank(NEIGH_LIST base, const AT_RANK *nSymmRank, const AT_RANK *nCanonRank)
Definition ichisort.c:386
int CompNeighborsRanksCountEql(const void *a1, const void *a2, void *p)
Definition ichisort.c:642
int CompAtomInvariants2(const void *a1, const void *a2, void *p)
Definition ichisort.c:501
AT_ISO_SORT_KEY make_iso_sort_key(int iso_atw_diff, int num_1H, int num_2H, int num_3H)
Definition ichiisot.c:12
int UnmarkNonStereo(CANON_GLOBALS *pCG, sp_ATOM *at, int num_atoms, const AT_RANK *nRank, const AT_RANK *nAtomNumber, int bIsotopic)
Definition ichicans.c:287
int GetStereoNeighborPos(sp_ATOM *at, int iAt1, int iAt2)
Definition ichicans.c:2162
int map_an_atom2(CANON_GLOBALS *pCG, int num_atoms, int num_max, int at_no1, int at_no2, AT_RANK *nTempRank, int nNumMappedRanks, int *pnNewNumMappedRanks, CANON_STAT *pCS, NEIGH_LIST *NeighList, AT_RANK **pRankStack1, AT_RANK **pRankStack2, int *bAddStack)
Definition ichimap2.c:1315
int insertions_sort_AT_RANK(AT_RANK *base, int num)
Definition ichisort.c:340
int CompNeighLists(const void *a1, const void *a2, void *p)
Definition ichisort.c:597
int CompNeighListsUpToMaxRank(const void *a1, const void *a2, void *p)
Definition ichisort.c:609
int CompareNeighListLexUpToMaxRank(NEIGH_LIST pp1, NEIGH_LIST pp2, const AT_RANK *nRank, AT_RANK nMaxAtNeighRank)
Definition ichisort.c:547
int NumberOfTies(AT_RANK **pRankStack1, AT_RANK **pRankStack2, int length, int at_no1, int at_no2, AT_RANK *nNewRank, int *bAddStack, int *bMapped1)
Definition ichimap2.c:645
int CurTreeFindTheRankPos(CUR_TREE *cur_tree, AT_NUMB rank)
int FillSingleStereoDescriptors(CANON_GLOBALS *pCG, sp_ATOM *at, int i, int num_trans, const AT_RANK *nRank, AT_STEREO_CARB *LinearCTStereoCarb, int *nStereoCarbLen, int nMaxStereoCarbLen, AT_STEREO_DBLE *LinearCTStereoDble, int *nStereoDbleLen, int nMaxStereoDbleLen, int bAllene)
Definition ichicans.c:490
void SortNeighListsBySymmAndCanonRank(int num_atoms, NEIGH_LIST *NeighList, const AT_RANK *nSymmRank, const AT_RANK *nCanonRank)
Definition ichimap2.c:399
int parity_of_mapped_atom2(CANON_GLOBALS *pCG, int from_at, int to_at, const sp_ATOM *at, EQ_NEIGH *pEN, const AT_RANK *nCanonRankFrom, const AT_RANK *nRankFrom, const AT_RANK *nRankTo)
Definition ichimap2.c:1133
int RemoveOneStereoBond(sp_ATOM *at, int jc, int k)
Definition ichicans.c:236
void insertions_sort_NeighList_AT_NUMBERS(NEIGH_LIST base, AT_RANK *nRank)
Definition ichisort.c:320
int CompChemElemLex(const void *a1, const void *a2)
Definition ichisort.c:516
void SetCtToNonIsotopicStereo(CANON_STAT *pCS, CANON_STAT *pCS2)
Definition ichicans.c:711
int Next_SC_At_CanonRank2(AT_RANK *canon_rank1, AT_RANK *canon_rank1_min, int *bFirstTime, S_CHAR *bAtomUsedForStereo, const ppAT_RANK pRankStack1, const ppAT_RANK pRankStack2, const AT_RANK *nAtomNumberCanonFrom, int num_atoms)
Definition ichimap1.c:64
int CompareLinCtStereoDble(AT_STEREO_DBLE *LinearCTStereoDble1, int nLenLinearCTStereoDble1, AT_STEREO_DBLE *LinearCTStereoDble2, int nLenLinearCTStereoDble2)
Definition ichimap1.c:143
int NextStereoParity2Test(int *stereo_bond_parity, int *sb_parity_calc, int nNumBest, int nNumWorse, int nNumUnkn, int nNumUndf, int nNumCalc, int vABParityUnknown)
Definition ichimap1.c:624
int map_stereo_bonds4(struct tagINCHI_CLOCK *ic, CANON_GLOBALS *pCG, sp_ATOM *at, int num_atoms, int num_at_tg, int num_max, int bAllene, const AT_RANK *nCanonRankFrom, const AT_RANK *nAtomNumberCanonFrom, AT_RANK *nCanonRankTo, const AT_RANK *nSymmRank, AT_RANK **pRankStack1, AT_RANK **pRankStack2, AT_RANK *nTempRank, int nNumMappedRanksInput, AT_RANK *nSymmStereo, NEIGH_LIST *NeighList, CANON_STAT *pCS, CUR_TREE *cur_tree, int nNumMappedBonds, int vABParityUnknown)
Definition ichimap4.c:48
int comp_AT_RANK(const void *a1, const void *a2, void *)
Definition ichisort.c:432
int SortedEquInfoToRanks(const AT_RANK *nSymmRank, AT_RANK *nRank, const AT_RANK *nAtomNumber, int num_atoms, int *bChanged)
Definition ichimap2.c:113
int CompareLinCtStereoDoubleToValues(AT_STEREO_DBLE *LinearCTStereoDble, AT_RANK at_rank_canon1, AT_RANK at_rank_canon2, U_CHAR bond_parity)
Definition ichimap1.c:729
int CompNeighListRanks(const void *a1, const void *a2, void *p)
Definition ichisort.c:580
int CurTreeRemoveLastRankIfNoAtoms(CUR_TREE *cur_tree)
Definition ichimap1.c:885
void SetUseAtomForStereo(S_CHAR *bAtomUsedForStereo, sp_ATOM *at, int num_atoms)
Definition ichimap1.c:769
int GetStereoCenterParity(CANON_GLOBALS *pCG, sp_ATOM *at, int i, AT_RANK *nRank)
Definition ichicans.c:2305
int GetPermutationParity(CANON_GLOBALS *pCG, sp_ATOM *at, AT_RANK nAvoidNeighbor, AT_RANK *nCanonRank)
Definition ichicans.c:2261
int DifferentiateRanks4(CANON_GLOBALS *pCG, int num_atoms, NEIGH_LIST *NeighList, int nNumCurrRanks, AT_RANK *pnCurrRank, AT_RANK *pnPrevRank, AT_RANK *nAtomNumber, AT_RANK nMaxAtRank, long *lNumIter)
Definition ichimap2.c:567
NEIGH_LIST * CreateNeighList(int num_atoms, int num_at_tg, sp_ATOM *at, int bDoubleBondSquare, T_GROUP_INFO *t_group_info)
Definition ichisort.c:775
int FillOutStereoParities(sp_ATOM *at, int num_atoms, const AT_RANK *nCanonRank, const AT_RANK *nAtomNumberCanon, const AT_RANK *nRank, const AT_RANK *nAtomNumber, CANON_STAT *pCS, CANON_GLOBALS *pCG, int bIsotopic)
Definition ichicans.c:2092
int map_stereo_atoms4(struct tagINCHI_CLOCK *ic, CANON_GLOBALS *pCG, sp_ATOM *at, int num_atoms, int num_at_tg, int num_max, const AT_RANK *nCanonRankFrom, const AT_RANK *nAtomNumberCanonFrom, AT_RANK *nCanonRankTo, const AT_RANK *nSymmRank, AT_RANK **pRankStack1, AT_RANK **pRankStack2, AT_RANK *nTempRank, int nNumMappedRanksInput, AT_RANK *nSymmStereo, NEIGH_LIST *NeighList, CANON_STAT *pCS, CUR_TREE *cur_tree, int nNumMappedAtoms, int vABParityUnknown)
Definition ichimap4.c:1091
int CurTreeGetPos(CUR_TREE *cur_tree)
Definition ichimap1.c:976
int CurTreeReplaceLastRank(CUR_TREE *cur_tree, AT_NUMB rank)
int CurTreeReAlloc(CUR_TREE *cur_tree)
Definition ichimap1.c:815
int DifferentiateRanksBasic(CANON_GLOBALS *pCG, int num_atoms, NEIGH_LIST *NeighList, int nNumCurrRanks, AT_RANK *pnCurrRank, AT_RANK *pnPrevRank, AT_RANK *nAtomNumber, long *lNumIter, int bUseAltSort)
Definition ichimap2.c:602
int CurTreeAddAtom(CUR_TREE *cur_tree, int at_no)
Definition ichimap1.c:900
pAT_RANK * ppAT_RANK
Definition ichisize.h:23
unsigned short AT_NUMB
Definition ichisize.h:10
unsigned short AT_RANK
Definition ichisize.h:11
signed char S_CHAR
Definition inchi_api.h:78
unsigned char U_CHAR
Definition inchi_api.h:79
Definition extr_ct.h:75
Definition ichicant.h:303
Definition ichicant.h:169
Definition ichicant.h:389
Definition ichicomn.h:20
AT_RANK canon_rank
Definition ichicomn.h:25
AT_RANK rank
Definition ichicomn.h:24
AT_RANK from_at
Definition ichicomn.h:23
AT_RANK to_at[4]
Definition ichicomn.h:22
int num_to
Definition ichicomn.h:21
Definition ichitime.h:50
Definition extr_ct.h:42
Definition extr_ct.h:48
Definition ichitaut.h:187