InChI
 
Loading...
Searching...
No Matches
ichicomn.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 _INCHICOMN_H_
43#define _INCHICOMN_H_
44
45
46#include "ichierr.h"
47#include "ichicano.h"
48
49/*
50 Globals for sorting
51 */
52
53#define tsort insertions_sort
54
55typedef struct tagEquNeigh {
56 int num_to; /* number of neighbors with equal mapping ranks; one of them has min. canon. number */
57 AT_RANK to_at[4]; /* to_atom neighbors #s with equal mapping ranks */
58 AT_RANK from_at; /* from_at neighbor # which has min. canon. number and can be mapped on any of the above to_at[] */
59 AT_RANK rank; /* equal mapping rank value */
60 AT_RANK canon_rank; /* min. canon. number */
62
63struct tagINCHI_CLOCK;
64#ifndef COMPILE_ALL_CPP
65#ifdef __cplusplus
66extern "C" {
67#endif
68#endif
69
70
71 struct tagINCHI_CLOCK;
72
73
74
75 /*******************************************************************/
76 /* ichiisot.c */
77 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 );
78 AT_ISO_SORT_KEY make_iso_sort_key( int iso_atw_diff, int num_1H, int num_2H, int num_3H );
79 int set_atom_iso_sort_keys( int num_at, sp_ATOM *at, T_GROUP_INFO* t_group_info, int *bHasIsotopicInTautomerGroups );
80 /***********************************************************************/
81 /* ichisort.c */
82
85 int insertions_sort_AT_RANK( AT_RANK *base, int num );
86 void insertions_sort_NeighListBySymmAndCanonRank( NEIGH_LIST base, const AT_RANK *nSymmRank, const AT_RANK *nCanonRank );
87 int CompareNeighListLex( NEIGH_LIST pp1, NEIGH_LIST pp2, const AT_RANK *nRank );
88 int CompareNeighListLexUpToMaxRank( NEIGH_LIST pp1, NEIGH_LIST pp2, const AT_RANK *nRank, AT_RANK nMaxAtNeighRank );
89 int compare_NeighLists( const NEIGH_LIST *op1, const NEIGH_LIST *op2, void *p );
90 int CompNeighborsAT_NUMBER( const void* a1, const void* a2, void *p );
91 int comp_AT_RANK( const void* a1, const void* a2, void * );
92 int CompRank( const void* a1, const void* a2, void *p );
93 int CompRanksOrd( const void* a1, const void* a2, void *p );
94
95 int CompAtomInvariants2Only( const void* a1, const void* a2, void *p );
96 int CompAtomInvariants2( const void* a1, const void* a2, void *p );
97
98 int CompNeighListRanks( const void* a1, const void* a2, void *p );
99 int CompNeighListRanksOrd( const void* a1, const void* a2, void *p );
100 int CompNeighLists( const void* a1, const void* a2, void *p );
101 int CompNeighListsUpToMaxRank( const void* a1, const void* a2, void *p );
102 int CompNeighborsRanksCountEql( const void* a1, const void* a2, void *p );
103 int CompRanksInvOrd( const void* a1, const void* a2, void * );
104 int CompChemElemLex( const void *a1, const void *a2 );
105 int* iisort( int *list, int num );
106
107
108 NEIGH_LIST *CreateNeighList( int num_atoms, int num_at_tg, sp_ATOM* at, int bDoubleBondSquare, T_GROUP_INFO *t_group_info );
109 NEIGH_LIST *CreateNeighListFromLinearCT( AT_NUMB *LinearCT, int nLenCT, int num_atoms );
110
111 void FreeNeighList( NEIGH_LIST *pp );
112 int BreakAllTies( CANON_GLOBALS *pCG, int num_atoms, int num_max, AT_RANK **pRankStack,
113 NEIGH_LIST *NeighList, AT_RANK *nTempRank, CANON_STAT *pCS );
114
115 /******************************************************************************/
116 /* ichimap.c */
117 void switch_ptrs( AT_RANK **p1, AT_RANK **p2 );
118
119 int SortedEquInfoToRanks( const AT_RANK* nSymmRank, AT_RANK* nRank, const AT_RANK* nAtomNumber, int num_atoms, int *bChanged );
120 int SortedRanksToEquInfo( AT_RANK* nSymmRank, const AT_RANK* nRank, const AT_RANK* nAtomNumber, int num_atoms );
121
122 int SetNewRanksFromNeighLists( CANON_GLOBALS *pCG, int num_atoms, NEIGH_LIST *NeighList, AT_RANK *nRank, AT_RANK *nNewRank,
123 AT_RANK *nAtomNumber, int bUseAltSort, int( *comp )( const void *, const void *, void * ) );
124 int SetNewRanksFromNeighLists3( CANON_GLOBALS *pCG, int num_atoms, NEIGH_LIST *NeighList, AT_RANK *nRank, AT_RANK *nNewRank,
125 AT_RANK *nAtomNumber );
126 int SetNewRanksFromNeighLists4( CANON_GLOBALS *pCG, int num_atoms, NEIGH_LIST *NeighList, AT_RANK *nRank, AT_RANK *nNewRank,
127 AT_RANK *nAtomNumber, AT_RANK nMaxAtRank );
128 void SortNeighListsBySymmAndCanonRank( int num_atoms, NEIGH_LIST *NeighList, const AT_RANK *nSymmRank, const AT_RANK *nCanonRank );
129 int SortNeighLists2( int num_atoms, AT_RANK *nRank, NEIGH_LIST *NeighList, AT_RANK *nAtomNumber );
130 int DifferentiateRanks2( CANON_GLOBALS *pCG, int num_atoms, NEIGH_LIST *NeighList,
131 int nNumCurrRanks, AT_RANK *pnCurrRank, AT_RANK *pnPrevRank,
132 AT_RANK *nAtomNumber, long *lNumIter, int bUseAltSort );
133
134 int DifferentiateRanks3( CANON_GLOBALS *pCG, int num_atoms, NEIGH_LIST *NeighList,
135 int nNumCurrRanks, AT_RANK *pnCurrRank, AT_RANK *pnPrevRank,
136 AT_RANK *nAtomNumber, long *lNumIter );
137 int DifferentiateRanks4( CANON_GLOBALS *pCG, int num_atoms, NEIGH_LIST *NeighList,
138 int nNumCurrRanks, AT_RANK *pnCurrRank, AT_RANK *pnPrevRank,
139 AT_RANK *nAtomNumber, AT_RANK nMaxAtRank, long *lNumIter );
140 int DifferentiateRanksBasic( CANON_GLOBALS *pCG, int num_atoms, NEIGH_LIST *NeighList,
141 int nNumCurrRanks, AT_RANK *pnCurrRank, AT_RANK *pnPrevRank,
142 AT_RANK *nAtomNumber, long *lNumIter, int bUseAltSort );
143
144 int parity_of_mapped_atom2( CANON_GLOBALS *pCG, int from_at, int to_at, const sp_ATOM *at, EQ_NEIGH *pEN,
145 const AT_RANK *nCanonRankFrom, const AT_RANK *nRankFrom, const AT_RANK *nRankTo );
146
147 int parity_of_mapped_half_bond( int from_at, int to_at, int from_neigh, int to_neigh,
148 sp_ATOM *at, EQ_NEIGH *pEN,
149 const AT_RANK *nCanonRankFrom, const AT_RANK *nRankFrom, const AT_RANK *nRankTo );
150
151 int HalfStereoBondParity( sp_ATOM *at, int at_no1, int i_sb_neigh, const AT_RANK *nRank );
152
153 int NumberOfTies( AT_RANK **pRankStack1, AT_RANK **pRankStack2, int length, int at_no1, int at_no2, AT_RANK *nNewRank, int *bAddStack, int *bMapped1 );
154
155 int map_an_atom2( CANON_GLOBALS *pCG, int num_atoms, int num_max, int at_no1/*from*/, int at_no2/*to*/,
156 AT_RANK *nTempRank,
157 int nNumMappedRanks, int *pnNewNumMappedRanks,
158 CANON_STAT *pCS,
159 NEIGH_LIST *NeighList,
160 AT_RANK **pRankStack1, AT_RANK **pRankStack2, int *bAddStack );
161 int ClearPreviousMappings( AT_RANK **pRankStack1 );
162
163 int SetOneStereoBondIllDefParity( sp_ATOM *at, int jc, /* atom number*/ int k /* stereo bond ord. number*/, int new_parity );
164 int RemoveOneStereoBond( sp_ATOM *at, int jc, /* atom number*/ int k /* stereo bond number*/ );
165 int RemoveOneStereoCenter( sp_ATOM *at, int jc /* atom number*/ );
166 int RemoveCalculatedNonStereo( CANON_GLOBALS *pCG, sp_ATOM *at, int num_atoms, int num_at_tg,
167 AT_RANK **pRankStack1, AT_RANK **pRankStack2, AT_RANK *nTempRank, NEIGH_LIST *NeighList,
168 const AT_RANK *nSymmRank, AT_RANK *nCanonRank,
169 AT_RANK *nAtomNumberCanon, CANON_STAT *pCS,
170 int vABParityUnknown );
171
172
173 int might_change_other_atom_parity( sp_ATOM *at, int num_atoms, int at_no, AT_RANK *nRank2, AT_RANK *nRank1 );
174
176 struct tagINCHI_CLOCK *ic, CANON_GLOBALS *pCG, sp_ATOM *at, int num_atoms, int num_at_tg, int num_max, int bAllene,
177 const AT_RANK *nCanonRankFrom, const AT_RANK *nAtomNumberCanonFrom, /* non-stereo canon ranking */
178 AT_RANK *nCanonRankTo, /* output canonical numbering*/
179 const AT_RANK *nSymmRank, AT_RANK **pRankStack1/*from*/, AT_RANK **pRankStack2/*to*/,
180 AT_RANK *nTempRank, int nNumMappedRanksInput,
181 AT_RANK *nSymmStereo, NEIGH_LIST *NeighList,
182 CANON_STAT *pCS, CUR_TREE *cur_tree, int nNumMappedBonds,
183 int vABParityUnknown );
184
185 int map_stereo_atoms4( struct tagINCHI_CLOCK *ic, CANON_GLOBALS *pCG,
186 sp_ATOM *at, int num_atoms, int num_at_tg, int num_max,
187 const AT_RANK *nCanonRankFrom, const AT_RANK *nAtomNumberCanonFrom, AT_RANK *nCanonRankTo, /* canonical numbering to be mapped */
188 const AT_RANK *nSymmRank, AT_RANK **pRankStack1/*from*/, AT_RANK **pRankStack2/*to*/,
189 AT_RANK *nTempRank, int nNumMappedRanksInput,
190 AT_RANK *nSymmStereo, NEIGH_LIST *NeighList,
191 CANON_STAT *pCS, CUR_TREE *cur_tree, int nNumMappedAtoms,
192 int vABParityUnknown );
193
194 int CurTreeAlloc( CUR_TREE *cur_tree, int num_atoms );
195 int CurTreeReAlloc( CUR_TREE *cur_tree );
196 void CurTreeFree( CUR_TREE *cur_tree );
197 int CurTreeAddRank( CUR_TREE *cur_tree, AT_NUMB rank );
198 int CurTreeRemoveLastRank( CUR_TREE *cur_tree );
200 int CurTreeFindTheRankPos( CUR_TREE *cur_tree, AT_NUMB rank );
201 int CurTreeGetPos( CUR_TREE *cur_tree );
202 int CurTreeSetPos( CUR_TREE *cur_tree, int len );
203 int CurTreeAddAtom( CUR_TREE *cur_tree, int at_no );
205 int CurTreeIsLastRank( CUR_TREE *cur_tree, AT_NUMB rank );
206 int CurTreeIsLastAtomEqu( CUR_TREE *cur_tree, int at_no, AT_NUMB *nSymmStereo );
207 int CurTreeRemoveIfLastAtom( CUR_TREE *cur_tree, int at_no );
209 void CurTreeKeepLastAtomsOnly( CUR_TREE *cur_tree, int tpos, int shift );
210
211
212 void SetUseAtomForStereo( S_CHAR *bAtomUsedForStereo, sp_ATOM *at, int num_atoms );
213
214 int nJoin2Mcrs( AT_RANK *nEqArray, AT_RANK n1, AT_RANK n2 );
215 AT_RANK nGetMcr( AT_RANK *nEqArray, AT_RANK n );
216 int bUniqueAtNbrFromMappingRank( AT_RANK **pRankStack, AT_RANK nAtRank, AT_NUMB *nAtNumber );
217
218 int Next_SB_At_CanonRanks2( AT_RANK *canon_rank1, AT_RANK *canon_rank2, /* canonical numbers */
219 AT_RANK *canon_rank1_min, AT_RANK *canon_rank2_min,
220 int *bFirstTime, S_CHAR *bAtomUsedForStereo,
221 const ppAT_RANK pRankStack1, const ppAT_RANK pRankStack2,
222 const AT_RANK *nCanonRankFrom, const AT_RANK *nAtomNumberCanonFrom,
223 const sp_ATOM *at, int num_atoms, int bAllene );
224
225 int Next_SC_At_CanonRank2( AT_RANK *canon_rank1, /* 1st call input: largest canon number mapped so far or 0 */
226 /* output: suggested canon. rank > than input if success */
227 AT_RANK *canon_rank1_min, /* 1st call:0 next calls: first tried canon. number */
228 int *bFirstTime, /* 1 at the time of the 1st call */
229 S_CHAR *bAtomUsedForStereo, /* STEREO_AT_MARK if the atom has not been mapped yet */
230 const ppAT_RANK pRankStack1, /* mapping ranks/sort order of atoms with canon. numbers (from) */
231 const ppAT_RANK pRankStack2, /* mapping ranks/sort order of atoms with stereo (to) */
232 const AT_RANK *nAtomNumberCanonFrom, /* sorted order of the canon. numbers */
233 int num_atoms );
234
235 int NextStereoParity2Test( int *stereo_bond_parity, int *sb_parity_calc,
236 int nNumBest, int nNumWorse, int nNumUnkn, int nNumUndf, int nNumCalc,
237 int vABParityUnknown );
238
239 int All_SB_Same( AT_RANK canon_rank1, AT_RANK canon_rank2, /* canonical numbers */
240 const ppAT_RANK pRankStack1, const ppAT_RANK pRankStack2,
241 const AT_RANK *nAtomNumberCanonFrom,
242 sp_ATOM *at );
243
244 int All_SC_Same( AT_RANK canon_rank1, /* canonical number */
245 const ppAT_RANK pRankStack1, const ppAT_RANK pRankStack2,
246 const AT_RANK *nAtomNumberCanonFrom,
247 const sp_ATOM *at );
248
249
250 int CompareLinCtStereoDoubleToValues( AT_STEREO_DBLE *LinearCTStereoDble,
251 AT_RANK at_rank_canon1, AT_RANK at_rank_canon2, U_CHAR bond_parity );
252
253 int CompareLinCtStereoAtomToValues( AT_STEREO_CARB *LinearCTStereoCarb,
254 AT_RANK at_rank_canon1, U_CHAR parity );
255 int CompareLinCtStereoDble( AT_STEREO_DBLE *LinearCTStereoDble1, int nLenLinearCTStereoDble1,
256 AT_STEREO_DBLE *LinearCTStereoDble2, int nLenLinearCTStereoDble2 );
257 int CompareLinCtStereoCarb( AT_STEREO_CARB *LinearCTStereoCarb1, int nLenLinearCTStereoCarb1,
258 AT_STEREO_CARB *LinearCTStereoCarb2, int nLenLinearCTStereoCarb2 );
259 int CompareLinCtStereo( AT_STEREO_DBLE *LinearCTStereoDble1, int nLenLinearCTStereoDble1,
260 AT_STEREO_CARB *LinearCTStereoCarb1, int nLenLinearCTStereoCarb1,
261 AT_STEREO_DBLE *LinearCTStereoDble2, int nLenLinearCTStereoDble2,
262 AT_STEREO_CARB *LinearCTStereoCarb2, int nLenLinearCTStereoCarb2 );
263 /***************************************************************************/
264 /* ichicans.c */
265 int UnmarkNonStereo( CANON_GLOBALS *pCG, sp_ATOM *at, int num_atoms, const AT_RANK *nRank, const AT_RANK *nAtomNumber, int bIsotopic );
266 int FillSingleStereoDescriptors( CANON_GLOBALS *pCG, sp_ATOM *at, int i, int num_trans, const AT_RANK *nRank
267 , AT_STEREO_CARB *LinearCTStereoCarb, int *nStereoCarbLen, int nMaxStereoCarbLen
268 , AT_STEREO_DBLE *LinearCTStereoDble, int *nStereoDbleLen, int nMaxStereoDbleLen
269 , int bAllene );
270 void SwitchAtomStereoAndIsotopicStereo( sp_ATOM *at, int num_atoms, int *bSwitched );
271 void SetCtToIsotopicStereo( CANON_STAT *pCS, CANON_STAT *pCS2 );
273 int FillAllStereoDescriptors( CANON_GLOBALS *pCG, sp_ATOM *at, int num_atoms, const AT_RANK *nCanonRank, const AT_RANK *nAtomNumberCanon, CANON_STAT *pCS );
274 int FillOutStereoParities( sp_ATOM *at, int num_atoms, const AT_RANK *nCanonRank, const AT_RANK *nAtomNumberCanon,
275 const AT_RANK *nRank, const AT_RANK *nAtomNumber, CANON_STAT *pCS, CANON_GLOBALS *pCG, int bIsotopic );
276 int InvertStereo( sp_ATOM *at, int num_at_tg,
277 AT_RANK *nCanonRank, AT_RANK *nAtomNumberCanon,
278 CANON_STAT *pCS, int bInvertLinearCTStereo );
279 int find_atoms_with_parity( sp_ATOM *at, S_CHAR *visited, int from_atom, int cur_atom );
280 int GetStereoNeighborPos( sp_ATOM *at, int iAt1, int iAt2 );
281 int GetStereoBondParity( sp_ATOM *at, int i, int n, AT_RANK *nRank );
282 int GetStereoCenterParity( CANON_GLOBALS *pCG, sp_ATOM *at, int i, AT_RANK *nRank );
283 int GetPermutationParity( CANON_GLOBALS *pCG, sp_ATOM *at, AT_RANK nAvoidNeighbor, AT_RANK *nCanonRank );
284
285#ifndef COMPILE_ALL_CPP
286#ifdef __cplusplus
287}
288#endif
289#endif
290
291
292#endif /* _INCHICOMN_H_ */
long AT_ISO_SORT_KEY
Definition extr_ct.h:69
AT_RANK * NEIGH_LIST
Definition ichicant.h:74
int CompareNeighListLex(NEIGH_LIST pp1, NEIGH_LIST pp2, const AT_RANK *nRank)
Definition ichisort.c:560
void CurTreeKeepLastAtomsOnly(CUR_TREE *cur_tree, int tpos, int shift)
Definition ichimap1.c:960
int CurTreeAlloc(CUR_TREE *cur_tree, int num_atoms)
Definition ichimap1.c:823
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:308
int nJoin2Mcrs(AT_RANK *nEqArray, AT_RANK n1, AT_RANK n2)
Definition ichimap1.c:366
int CompRanksInvOrd(const void *a1, const void *a2, void *)
Definition ichisort.c:670
int set_atom_iso_sort_keys(int num_at, sp_ATOM *at, T_GROUP_INFO *t_group_info, int *bHasIsotopicInTautomerGroups)
Definition ichiisot.c:67
int CurTreeRemoveIfLastAtom(CUR_TREE *cur_tree, int at_no)
Definition ichimap1.c:993
int CompareLinCtStereoCarb(AT_STEREO_CARB *LinearCTStereoCarb1, int nLenLinearCTStereoCarb1, AT_STEREO_CARB *LinearCTStereoCarb2, int nLenLinearCTStereoCarb2)
Definition ichimap1.c:223
int CompareLinCtStereoAtomToValues(AT_STEREO_CARB *LinearCTStereoCarb, AT_RANK at_rank_canon1, U_CHAR parity)
Definition ichimap1.c:287
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:518
int insertions_sort_NeighList_AT_NUMBERS3(NEIGH_LIST base, AT_RANK *nRank)
Definition ichisort.c:396
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:561
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:262
int CurTreeIsLastRank(CUR_TREE *cur_tree, AT_NUMB rank)
Definition ichimap1.c:902
int CompNeighListRanksOrd(const void *a1, const void *a2, void *p)
Definition ichisort.c:657
int compare_NeighLists(const NEIGH_LIST *op1, const NEIGH_LIST *op2, void *p)
Definition ichisort.c:607
NEIGH_LIST * CreateNeighListFromLinearCT(AT_NUMB *LinearCT, int nLenCT, int num_atoms)
Definition ichisort.c:701
struct tagEquNeigh EQ_NEIGH
void SetCtToIsotopicStereo(CANON_STAT *pCS, CANON_STAT *pCS2)
Definition ichicans.c:729
AT_RANK nGetMcr(AT_RANK *nEqArray, AT_RANK n)
Definition ichimap1.c:336
int GetStereoBondParity(sp_ATOM *at, int i, int n, AT_RANK *nRank)
Definition ichicans.c:2219
void FreeNeighList(NEIGH_LIST *pp)
Definition ichisort.c:941
int bUniqueAtNbrFromMappingRank(AT_RANK **pRankStack, AT_RANK nAtRank, AT_NUMB *nAtNumber)
Definition ichimap1.c:316
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:3672
int CurTreeIsLastAtomEqu(CUR_TREE *cur_tree, int at_no, AT_NUMB *nSymmStereo)
Definition ichimap1.c:1054
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:199
int ClearPreviousMappings(AT_RANK **pRankStack1)
Definition ichimap2.c:1334
int CurTreeAddRank(CUR_TREE *cur_tree, AT_NUMB rank)
Definition ichimap1.c:881
int InvertStereo(sp_ATOM *at, int num_at_tg, AT_RANK *nCanonRank, AT_RANK *nAtomNumberCanon, CANON_STAT *pCS, int bInvertLinearCTStereo)
Definition ichicans.c:2016
int CompRank(const void *a1, const void *a2, void *p)
Definition ichisort.c:475
void CurTreeFree(CUR_TREE *cur_tree)
Definition ichimap1.c:871
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:956
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:958
int might_change_other_atom_parity(sp_ATOM *at, int num_atoms, int at_no, AT_RANK *nRank2, AT_RANK *nRank1)
Definition ichimap2.c:1461
int HalfStereoBondParity(sp_ATOM *at, int at_no1, int i_sb_neigh, const AT_RANK *nRank)
Definition ichimap2.c:802
int RemoveOneStereoCenter(sp_ATOM *at, int jc)
Definition ichicans.c:300
void switch_ptrs(AT_RANK **p1, AT_RANK **p2)
Definition ichimap2.c:230
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:393
int CurTreeSetPos(CUR_TREE *cur_tree, int len)
Definition ichimap1.c:1023
int CompRanksOrd(const void *a1, const void *a2, void *p)
Definition ichisort.c:486
int * iisort(int *list, int num)
Definition ichisort.c:1014
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:518
void SwitchAtomStereoAndIsotopicStereo(sp_ATOM *at, int num_atoms, int *bSwitched)
Definition ichicans.c:705
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:766
int CurTreeRemoveLastRank(CUR_TREE *cur_tree)
Definition ichimap1.c:1036
int SetNewRanksFromNeighLists3(CANON_GLOBALS *pCG, int num_atoms, NEIGH_LIST *NeighList, AT_RANK *nRank, AT_RANK *nNewRank, AT_RANK *nAtomNumber)
Definition ichimap2.c:241
int find_atoms_with_parity(sp_ATOM *at, S_CHAR *visited, int from_atom, int cur_atom)
Definition ichicans.c:155
int CompNeighborsAT_NUMBER(const void *a1, const void *a2, void *p)
Definition ichisort.c:453
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:53
int CompAtomInvariants2Only(const void *a1, const void *a2, void *p)
Definition ichisort.c:502
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:380
int SortNeighLists2(int num_atoms, AT_RANK *nRank, NEIGH_LIST *NeighList, AT_RANK *nAtomNumber)
Definition ichimap2.c:448
int CurTreeRemoveLastAtom(CUR_TREE *cur_tree)
int SetOneStereoBondIllDefParity(sp_ATOM *at, int jc, int k, int new_parity)
Definition ichicans.c:242
void insertions_sort_NeighListBySymmAndCanonRank(NEIGH_LIST base, const AT_RANK *nSymmRank, const AT_RANK *nCanonRank)
Definition ichisort.c:421
int CompNeighborsRanksCountEql(const void *a1, const void *a2, void *p)
Definition ichisort.c:677
int CompAtomInvariants2(const void *a1, const void *a2, void *p)
Definition ichisort.c:536
AT_ISO_SORT_KEY make_iso_sort_key(int iso_atw_diff, int num_1H, int num_2H, int num_3H)
Definition ichiisot.c:47
int UnmarkNonStereo(CANON_GLOBALS *pCG, sp_ATOM *at, int num_atoms, const AT_RANK *nRank, const AT_RANK *nAtomNumber, int bIsotopic)
Definition ichicans.c:322
int GetStereoNeighborPos(sp_ATOM *at, int iAt1, int iAt2)
Definition ichicans.c:2197
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:1350
int insertions_sort_AT_RANK(AT_RANK *base, int num)
Definition ichisort.c:375
int CompNeighLists(const void *a1, const void *a2, void *p)
Definition ichisort.c:632
int CompNeighListsUpToMaxRank(const void *a1, const void *a2, void *p)
Definition ichisort.c:644
int CompareNeighListLexUpToMaxRank(NEIGH_LIST pp1, NEIGH_LIST pp2, const AT_RANK *nRank, AT_RANK nMaxAtNeighRank)
Definition ichisort.c:582
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:680
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:525
void SortNeighListsBySymmAndCanonRank(int num_atoms, NEIGH_LIST *NeighList, const AT_RANK *nSymmRank, const AT_RANK *nCanonRank)
Definition ichimap2.c:434
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:1168
int RemoveOneStereoBond(sp_ATOM *at, int jc, int k)
Definition ichicans.c:271
void insertions_sort_NeighList_AT_NUMBERS(NEIGH_LIST base, AT_RANK *nRank)
Definition ichisort.c:355
int CompChemElemLex(const void *a1, const void *a2)
Definition ichisort.c:551
void SetCtToNonIsotopicStereo(CANON_STAT *pCS, CANON_STAT *pCS2)
Definition ichicans.c:746
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:99
int CompareLinCtStereoDble(AT_STEREO_DBLE *LinearCTStereoDble1, int nLenLinearCTStereoDble1, AT_STEREO_DBLE *LinearCTStereoDble2, int nLenLinearCTStereoDble2)
Definition ichimap1.c:178
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:659
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:83
int comp_AT_RANK(const void *a1, const void *a2, void *)
Definition ichisort.c:467
int SortedEquInfoToRanks(const AT_RANK *nSymmRank, AT_RANK *nRank, const AT_RANK *nAtomNumber, int num_atoms, int *bChanged)
Definition ichimap2.c:148
int CompareLinCtStereoDoubleToValues(AT_STEREO_DBLE *LinearCTStereoDble, AT_RANK at_rank_canon1, AT_RANK at_rank_canon2, U_CHAR bond_parity)
Definition ichimap1.c:764
int CompNeighListRanks(const void *a1, const void *a2, void *p)
Definition ichisort.c:615
int CurTreeRemoveLastRankIfNoAtoms(CUR_TREE *cur_tree)
Definition ichimap1.c:920
void SetUseAtomForStereo(S_CHAR *bAtomUsedForStereo, sp_ATOM *at, int num_atoms)
Definition ichimap1.c:804
int GetStereoCenterParity(CANON_GLOBALS *pCG, sp_ATOM *at, int i, AT_RANK *nRank)
Definition ichicans.c:2340
int GetPermutationParity(CANON_GLOBALS *pCG, sp_ATOM *at, AT_RANK nAvoidNeighbor, AT_RANK *nCanonRank)
Definition ichicans.c:2296
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:602
NEIGH_LIST * CreateNeighList(int num_atoms, int num_at_tg, sp_ATOM *at, int bDoubleBondSquare, T_GROUP_INFO *t_group_info)
Definition ichisort.c:813
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:2127
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:1129
int CurTreeGetPos(CUR_TREE *cur_tree)
Definition ichimap1.c:1011
int CurTreeReplaceLastRank(CUR_TREE *cur_tree, AT_NUMB rank)
int CurTreeReAlloc(CUR_TREE *cur_tree)
Definition ichimap1.c:850
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:637
int CurTreeAddAtom(CUR_TREE *cur_tree, int at_no)
Definition ichimap1.c:935
pAT_RANK * ppAT_RANK
Definition ichisize.h:58
unsigned short AT_NUMB
Definition ichisize.h:45
unsigned short AT_RANK
Definition ichisize.h:46
signed char S_CHAR
Definition inchi_api.h:113
unsigned char U_CHAR
Definition inchi_api.h:114
Definition extr_ct.h:110
Definition ichicant.h:338
Definition ichicant.h:204
Definition ichicant.h:424
Definition ichicomn.h:55
AT_RANK canon_rank
Definition ichicomn.h:60
AT_RANK rank
Definition ichicomn.h:59
AT_RANK from_at
Definition ichicomn.h:58
AT_RANK to_at[4]
Definition ichicomn.h:57
int num_to
Definition ichicomn.h:56
Definition ichitime.h:85
Definition extr_ct.h:77
Definition extr_ct.h:83
Definition ichitaut.h:222