39#define BNS_EDGE_FORBIDDEN_MASK 1
40#define BNS_EDGE_FORBIDDEN_TEMP 2
41#define BNS_EDGE_FORBIDDEN_TEST 4
45#define BNS_VERT_TYPE_ATOM 0x0001
46#define BNS_VERT_TYPE_ENDPOINT 0x0002
47#define BNS_VERT_TYPE_TGROUP 0x0004
48#define BNS_VERT_TYPE_C_POINT 0x0008
49#define BNS_VERT_TYPE_C_GROUP 0x0010
50#define BNS_VERT_TYPE_SUPER_TGROUP 0x0020
51#define BNS_VERT_TYPE_TEMP 0x0040
53#define BNS_VERT_TYPE__AUX 0x0080
54#define BNS_VERT_TYPE_C_NEGATIVE 0x0100
55#define BNS_VERT_TYPE_ACID 0x0200
56#define BNS_VERT_TYPE_CARBON_GR 0x0400
57#define BNS_VERT_TYPE_METAL_GR 0x0800
59#define BNS_VERT_TYPE_ANY_GROUP (BNS_VERT_TYPE_TGROUP | BNS_VERT_TYPE_C_GROUP | BNS_VERT_TYPE_SUPER_TGROUP)
63#define BNS_VT_C_POS BNS_VERT_TYPE_C_GROUP
64#define BNS_VT_C_NEG (BNS_VERT_TYPE_C_GROUP | BNS_VERT_TYPE_C_NEGATIVE)
65#define BNS_VT_C_POS_C (BNS_VT_C_POS | BNS_VERT_TYPE_CARBON_GR)
66#define BNS_VT_C_NEG_C (BNS_VT_C_NEG | BNS_VERT_TYPE_CARBON_GR)
67#define BNS_VT_C_POS_M (BNS_VT_C_POS | BNS_VERT_TYPE_METAL_GR)
68#define BNS_VT_C_NEG_M (BNS_VT_C_NEG | BNS_VERT_TYPE_METAL_GR)
69#define BNS_VT_M_GROUP BNS_VERT_TYPE_METAL_GR
71#define BNS_VT_C_POS_ALL (BNS_VERT_TYPE_SUPER_TGROUP | BNS_VERT_TYPE_C_GROUP)
72#define BNS_VT_C_NEG_ALL (BNS_VT_C_POS_ALL | BNS_VERT_TYPE_C_NEGATIVE)
74#define BNS_VT_CHRG_STRUCT (BNS_VERT_TYPE__AUX | BNS_VERT_TYPE_TEMP)
75#define BNS_VT_YVCONNECTOR BNS_VERT_TYPE__AUX
77#define IS_BNS_VT_C_OR_CSUPER_GR(X) ((X) & BNS_VT_C_POS)
78#define IS_BNS_VT_C_GR(X) (((X) & BNS_VT_C_POS_ALL) == BNS_VERT_TYPE_C_GROUP)
79#define IS_BNS_VT_CM_GR(X) (((X) & BNS_VT_C_POS_M) == BNS_VT_C_POS_M)
80#define IS_BNS_VT_M_GR(X) ((X) == BNS_VERT_TYPE_METAL_GR )
81#define IS_BNS_VT_YVCONNECTOR(X) (((X) & BNS_VERT_TYPE__AUX) && !((X) & BNS_VERT_TYPE_TEMP))
82#define IS_BNS_VT_CHRG_STRUCT(X) (((X) & BNS_VERT_TYPE__AUX) && ((X) & BNS_VERT_TYPE_TEMP))
83#define IS_BNS_VT_ATOM(X) ((X) & BNS_VERT_TYPE_ATOM)
85#define BNS_ADD_SUPER_TGROUP 1
86#define NUM_KINDS_OF_GROUPS 2
88#define BNS_ADD_ATOMS 2
89#define BNS_ADD_EDGES 1
101#define ALTP_PATH_LEN(altp) (altp)[iALTP_PATH_LEN].number
102#define ALTP_END_ATOM(altp) (altp)[iALTP_END_ATOM].number
103#define ALTP_START_ATOM(altp) (altp)[iALTP_START_ATOM].number
104#define ALTP_THIS_ATOM_NEIGHBOR(altp,X) (altp)[iALTP_NEIGHBOR+(X)].ineigh[0]
105#define ALTP_NEXT_ATOM_NEIGHBOR(altp,X) (altp)[iALTP_NEIGHBOR+(X)].ineigh[1]
106#define ALTP_CUR_THIS_ATOM_NEIGHBOR(altp) (altp)[iALTP_NEIGHBOR+ALTP_PATH_LEN(altp)].ineigh[0]
107#define ALTP_CUR_NEXT_ATOM_NEIGHBOR(altp) (altp)[iALTP_NEIGHBOR+ALTP_PATH_LEN(altp)].ineigh[1]
108#define ALTP_NEXT(altp) (++ALTP_PATH_LEN(altp))
109#define ALTP_PREV(altp) (--ALTP_PATH_LEN(altp))
110#define ALTP_MAY_ADD(altp) (iALTP_NEIGHBOR + (altp)[iALTP_PATH_LEN].number < (altp)[iALTP_MAX_LEN].number)
111#define ALTP_ALLOCATED_LEN(altp) (altp)[iALTP_MAX_LEN].number
112#define ALTP_DELTA(altp) (altp)[iALTP_FLOW].flow[0]
113#define ALTP_OVERFLOW(altp) (altp)[iALTP_FLOW].flow[1]
119#define BLOSSOM_BASE -1
121#define ADD_CAPACITY_RADICAL 1
123#define MAX_BOND_EDGE_CAP 2
124#define AROM_BOND_EDGE_CAP 1
125#define MAX_TGROUP_EDGE_CAP 2
128#define EDGE_FLOW_ST_MASK 0x3fff
129#define EDGE_FLOW_ST_PATH 0x4000
133#define EDGE_FLOW_MASK 0x3fff
134#define EDGE_FLOW_PATH 0x4000
137#if ( ADD_CAPACITY_RADICAL == 1 )
143#define MAX_AT_FLOW(X) (((X).chem_bonds_valence - (X).valence)+\
144 ((is_centerpoint_elem((X).el_number)||get_endpoint_valence((X).el_number))?\
145 (((X).radical==RADICAL_DOUBLET)):0))
150#define MAX_AT_FLOW(X) (((X).chem_bonds_valence - (X).valence)
261#if ( BNS_RAD_SEARCH == 1 )
272#define MAX_ALT_AATG_ARRAY_LEN 127
274#define AATG_MARK_IN_PATH 1
275#define AATG_MARK_WAS_IN_PATH 2
277#define AATG_MARK_MAIN_TYPE 4
278#define AATG_MARK_OTHER_TYPE 8
310#define ALT_PATH_MODE_TAUTOM 1
311#define ALT_PATH_MODE_CHARGE 2
312#define ALT_PATH_MODE_4_SALT 3
313#define ALT_PATH_MODE_4_SALT2 4
314#define ALT_PATH_MODE_REM2H_CHG 5
315#define ALT_PATH_MODE_ADD2H_CHG 6
316#define ALT_PATH_MODE_REM2H_TST 7
317#define ALT_PATH_MODE_ADD2H_TST 8
318#define ALT_PATH_MODE_REM_PROTON 9
319#if ( KETO_ENOL_TAUT == 1 )
320#define ALT_PATH_MODE_TAUTOM_KET 10
323#if ( TAUT_PT_22_00 == 1 )
324#define ALT_PATH_MODE_TAUTOM_PT_22_00 11
326#if ( TAUT_PT_16_00 == 1 )
327#define ALT_PATH_MODE_TAUTOM_PT_16_00 12
329#if ( TAUT_PT_06_00 == 1 )
330#define ALT_PATH_MODE_TAUTOM_PT_06_00 13
332#if ( TAUT_PT_39_00 == 1 )
333#define ALT_PATH_MODE_TAUTOM_PT_39_00 14
335#if ( TAUT_PT_13_00 == 1 )
336#define ALT_PATH_MODE_TAUTOM_PT_13_00 15
338#if ( TAUT_PT_18_00 == 1 )
339#define ALT_PATH_MODE_TAUTOM_PT_18_00 16
343#define BIT_WORD_MASK ((bitWord)~0)
352#ifndef COMPILE_ALL_CPP
370#define BNS_EF_CHNG_FLOW 1
371#define BNS_EF_RSTR_FLOW 2
372#define BNS_EF_CHNG_RSTR (BNS_EF_CHNG_FLOW | BNS_EF_RSTR_FLOW)
373#define BNS_EF_CHNG_BONDS 4
374#define BNS_EF_ALTR_BONDS 8
375#define BNS_EF_UPD_RAD_ORI 16
377#define BNS_EF_SET_NOSTEREO 32
379#define BNS_EF_UPD_H_CHARGE 64
381#define BNS_EF_SAVE_ALL (BNS_EF_CHNG_FLOW | BNS_EF_CHNG_BONDS | BNS_EF_UPD_RAD_ORI)
382#define BNS_EF_ALTR_NS (BNS_EF_ALTR_BONDS | BNS_EF_SET_NOSTEREO)
384#define BNS_EF_RAD_SRCH 128
403 AT_NUMB *nForbiddenAtom,
int nNumForbiddenAtoms );
415 inp_ATOM *at,
int num_atoms,
int nVertDoubleBond,
int nVertSingleBond,
int path_type );
447 int nebend,
int *ebend );
456 int nNumProtAddedByRestr,
INCHI_MODE bNormalizationFlags,
457 int num_tg,
int nChargeRevrs,
int nChargeInChI );
461#ifndef COMPILE_ALL_CPP
int IsNodeSetEmpty(NodeSet *cur_nodes, int k)
Definition ichican2.c:1166
int nExists2AtMoveAltPath(struct BalancedNetworkStructure *pBNS, struct BalancedNetworkData *pBD, struct BN_AtomsAtTautGroup *pAATG, inp_ATOM *at, int num_atoms, int jj2, int jj1, struct tagSaltChargeCandidate *s_candidate, int nNumCandidates, AT_NUMB *nForbiddenAtom, int nNumForbiddenAtoms)
int NodeSetCreate(struct tagCANON_GLOBALS *pCG, NodeSet *pSet, int n, int L)
Definition ichican2.c:683
int ReInitBnStruct(struct BalancedNetworkStructure *pBNS, inp_ATOM *at, int num_at, int bRemoveGroupsFromAtoms)
Definition ichi_bns.c:9066
BN_STRUCT * DeAllocateBnStruct(BN_STRUCT *pBNS)
Definition ichi_bns.c:8974
int EdgeIndex
Definition ichi_bns.h:32
int AddRemoveProtonsRestr(inp_ATOM *at, int num_atoms, int *num_protons_to_add, int nNumProtAddedByRestr, INCHI_MODE bNormalizationFlags, int num_tg, int nChargeRevrs, int nChargeInChI)
Definition ichi_bns.c:12020
#define BN_MAX_ALTP
Definition ichi_bns.h:17
struct BnsStEdge BNS_ST_EDGE
union BnsAltPath BNS_ALT_PATH
struct tagBNS_FLOW_CHANGES BNS_FLOW_CHANGES
int BalancedNetworkSearch(BN_STRUCT *pBNS, BN_DATA *pBD, int bChangeFlow)
Definition ichi_bns.c:10743
int AddTGroups2BnStruct(struct tagCANON_GLOBALS *pCG, struct BalancedNetworkStructure *pBNS, inp_ATOM *at, int num_atoms, struct tagTautomerGroupsInfo *tgi)
Definition ichi_bns.c:9173
int VertexFlow
Definition ichi_bns.h:36
struct BalancedNetworkStructure BN_STRUCT
void AddNodeSet2ToNodeSet1(NodeSet *cur_nodes, int k1, int k2)
Definition ichican2.c:1188
int EdgeFlow
Definition ichi_bns.h:35
int AddSuperTGroup2BnStruct(struct BalancedNetworkStructure *pBNS, inp_ATOM *at, int num_atoms, struct tagTautomerGroupsInfo *tgi)
void NodeSetFree(struct tagCANON_GLOBALS *pCG, NodeSet *pSet)
Definition ichican2.c:719
BN_DATA * DeAllocateBnData(BN_DATA *pBD)
Definition ichi_bns.c:9595
BN_DATA * AllocateAndInitBnData(int max_num_vertices)
Definition ichi_bns.c:9641
struct BalancedNetworkData BN_DATA
int AddRemoveIsoProtonsRestr(inp_ATOM *at, int num_atoms, NUM_H num_protons_to_add[], int num_tg)
Definition ichi_bns.c:12324
int bExistsAnyAltPath(struct tagCANON_GLOBALS *pCG, struct BalancedNetworkStructure *pBNS, struct BalancedNetworkData *pBD, inp_ATOM *at, int num_atoms, int nVertDoubleBond, int nVertSingleBond, int path_type)
Definition ichi_bns.c:7482
int RemoveRadEndpoints(BN_STRUCT *pBNS, BN_DATA *pBD, inp_ATOM *at)
Definition ichi_bns.c:7776
int SetRadEndpoints(BN_STRUCT *pBNS, BN_DATA *pBD, BRS_MODE bRadSrchMode)
Definition ichi_bns.c:7933
U_SHORT bitWord
Definition ichi_bns.h:342
void NodeSetFromRadEndpoints(struct tagCANON_GLOBALS *pCG, NodeSet *cur_nodes, int k, Vertex RadEndpoints[], int num_v)
Definition ichican2.c:1103
int RunBalancedNetworkSearch(BN_STRUCT *pBNS, BN_DATA *pBD, int bChangeFlow)
Definition ichi_bns.c:653
int ReconnectTestAtomToTGroup(struct BalancedNetworkStructure *pBNS, int v1, int v2, int ie, BNS_FLOW_CHANGES *fcd)
int DoNodeSetsIntersect(NodeSet *cur_nodes, int k1, int k2)
Definition ichican2.c:1143
int SetRadEndpoints2(struct tagCANON_GLOBALS *pCG, BN_STRUCT *pBNS, BN_DATA *pBD, BRS_MODE bRadSrchMode)
Definition ichi_bns.c:8028
int bIsHardRemHCandidate(inp_ATOM *at, int i, int *cSubType)
Definition ichi_bns.c:3546
int ReInitBnData(BN_DATA *pBD)
Definition ichi_bns.c:9682
int DisconnectTestAtomFromTGroup(struct BalancedNetworkStructure *pBNS, int v1, int *pv2, BNS_FLOW_CHANGES *fcd)
enum tagAltPathConst ALT_CONST
int AddNodesToRadEndpoints(struct tagCANON_GLOBALS *pCG, NodeSet *cur_nodes, int k, Vertex RadEndpoints[], Vertex vRad, int nStart, int nLen)
Definition ichican2.c:1206
struct tagNodeSet NodeSet
struct BN_AtomsAtTautGroup BN_AATG
int SetForbiddenEdges(BN_STRUCT *pBNS, inp_ATOM *at, int num_atoms, int edge_forbidden_mask, int nebend, int *ebend)
Definition ichi_bns.c:1966
int Vertex
Definition ichi_bns.h:31
tagAltPathConst
Definition ichi_bns.h:91
@ iALTP_PATH_LEN
Definition ichi_bns.h:94
@ iALTP_MAX_LEN
Definition ichi_bns.h:92
@ iALTP_NEIGHBOR
Definition ichi_bns.h:97
@ iALTP_HDR_LEN
Definition ichi_bns.h:98
@ iALTP_END_ATOM
Definition ichi_bns.h:96
@ iALTP_FLOW
Definition ichi_bns.h:93
@ iALTP_START_ATOM
Definition ichi_bns.h:95
int bExistsAltPath(struct tagCANON_GLOBALS *pCG, struct BalancedNetworkStructure *pBNS, struct BalancedNetworkData *pBD, struct BN_AtomsAtTautGroup *pAATG, inp_ATOM *at, int num_atoms, int nVertDoubleBond, int nVertSingleBond, int path_type)
Definition ichi_bns.c:8357
void ClearAllBnDataVertices(Vertex *v, Vertex value, int size)
Definition ichi_bns.c:9573
int Edge[2]
Definition ichi_bns.h:33
int BNS_IEDGE
Definition ichi_bns.h:34
int AddCGroups2BnStruct(struct tagCANON_GLOBALS *pCG, struct BalancedNetworkStructure *pBNS, inp_ATOM *at, int num_atoms, struct tagChargeGroupsInfo *cgi)
Definition ichi_bns.c:9370
int ReInitBnStructForMoveableAltBondTest(BN_STRUCT *pBNS, inp_ATOM *at, int num_atoms)
int ReInitBnStructAltPaths(BN_STRUCT *pBNS)
Definition ichi_bns.c:9006
void RemoveFromNodeSet(struct tagCANON_GLOBALS *pCG, NodeSet *cur_nodes, int k, Vertex v[], int num_v)
Definition ichican2.c:1124
tagBnsRadSrchMode
Definition ichi_bns.h:247
@ RAD_SRCH_NORM
Definition ichi_bns.h:248
@ RAD_SRCH_FROM_FICT
Definition ichi_bns.h:249
struct BnsVertex BNS_VERTEX
enum tagBnsRadSrchMode BRS_MODE
void ClearAllBnDataEdges(Edge *e, Vertex value, int size)
Definition ichi_bns.c:9584
int DisconnectTGroupFromSuperTGroup(struct BalancedNetworkStructure *pBNS, int v1, int *pv1, int *pv2, BNS_FLOW_CHANGES *fcd)
int ReInitBnStructAddGroups(struct tagCANON_GLOBALS *pCG, struct BalancedNetworkStructure *pBNS, inp_ATOM *at, int num_atoms, struct tagTautomerGroupsInfo *tgi, struct tagChargeGroupsInfo *cgi)
Definition ichi_bns.c:9026
BN_STRUCT * AllocateAndInitBnStruct(inp_ATOM *at, int num_atoms, int nMaxAddAtoms, int nMaxAddEdges, int max_altp, int *num_changed_bonds)
Definition ichi_bns.c:8747
unsigned short AT_NUMB
Definition ichisize.h:10
signed short NUM_H
Definition ichisize.h:14
unsigned long INCHI_MODE
Definition ichisize.h:25
signed char S_CHAR
Definition inchi_api.h:78
unsigned short U_SHORT
Definition inchi_api.h:85
Definition ichi_bns.h:283
int nNumOthersAdj2Tgroup
Definition ichi_bns.h:287
AT_NUMB * nEndPoint
Definition ichi_bns.h:288
struct tagTautomerGroupsInfo * t_group_info
Definition ichi_bns.h:291
int nAllocLen
Definition ichi_bns.h:284
S_CHAR * nMarkedAtom
Definition ichi_bns.h:289
int nNumMainAdj2Tgroup
Definition ichi_bns.h:286
int nNumFound
Definition ichi_bns.h:285
int * nAtTypeTotals
Definition ichi_bns.h:290
Definition ichi_bns.h:251
int nNumRadEndpoints
Definition ichi_bns.h:263
Vertex * BasePtr
Definition ichi_bns.h:252
S_CHAR * Tree
Definition ichi_bns.h:254
int max_num_vertices
Definition ichi_bns.h:259
int nNumRadEdges
Definition ichi_bns.h:265
int max_len_Pu_Pv
Definition ichi_bns.h:260
Vertex * RadEndpoints
Definition ichi_bns.h:262
Vertex * Pv
Definition ichi_bns.h:258
Edge * SwitchEdge
Definition ichi_bns.h:253
BRS_MODE bRadSrchMode
Definition ichi_bns.h:267
int QSize
Definition ichi_bns.h:256
EdgeIndex * RadEdges
Definition ichi_bns.h:264
Vertex * Pu
Definition ichi_bns.h:257
int nNumRadicals
Definition ichi_bns.h:266
Vertex * ScanQ
Definition ichi_bns.h:255
Definition ichi_bns.h:198
int num_iedges
Definition ichi_bns.h:210
int bNotASimplePath
Definition ichi_bns.h:223
int num_added_atoms
Definition ichi_bns.h:202
INCHI_MODE * pbTautFlagsDone
Definition ichi_bns.h:236
int num_t_groups
Definition ichi_bns.h:205
BNS_IEDGE * iedge
Definition ichi_bns.h:228
int num_bonds
Definition ichi_bns.h:208
int bChangeFlow
Definition ichi_bns.h:224
AT_NUMB type_T
Definition ichi_bns.h:238
int max_iedges
Definition ichi_bns.h:216
int tot_st_cap
Definition ichi_bns.h:218
int num_edges
Definition ichi_bns.h:209
int max_vertices
Definition ichi_bns.h:214
BNS_ALT_PATH * alt_path
Definition ichi_bns.h:229
int num_vertices
Definition ichi_bns.h:206
BNS_ALT_PATH * altp[BN_MAX_ALTP]
Definition ichi_bns.h:230
int num_c_groups
Definition ichi_bns.h:204
int tot_st_flow
Definition ichi_bns.h:219
BNS_EDGE * edge
Definition ichi_bns.h:227
struct tagINCHI_CLOCK * ic
Definition ichi_bns.h:242
AT_NUMB type_CN
Definition ichi_bns.h:239
int num_atoms
Definition ichi_bns.h:200
BNS_VERTEX * vert
Definition ichi_bns.h:226
int num_altp
Definition ichi_bns.h:233
S_CHAR edge_forbidden_mask
Definition ichi_bns.h:240
struct tagInchiTime * ulTimeOutTime
Definition ichi_bns.h:243
int nMaxAddAtoms
Definition ichi_bns.h:203
int len_alt_path
Definition ichi_bns.h:221
int max_edges
Definition ichi_bns.h:215
int num_added_edges
Definition ichi_bns.h:211
INCHI_MODE * pbTautFlags
Definition ichi_bns.h:235
AT_NUMB type_TACN
Definition ichi_bns.h:237
int nMaxAddEdges
Definition ichi_bns.h:212
int max_altp
Definition ichi_bns.h:232
Definition ichi_bns.h:155
EdgeFlow cap0
Definition ichi_bns.h:160
EdgeFlow cap
Definition ichi_bns.h:159
AT_NUMB neighbor1
Definition ichi_bns.h:156
AT_NUMB neigh_ord[2]
Definition ichi_bns.h:158
AT_NUMB neighbor12
Definition ichi_bns.h:157
EdgeFlow flow
Definition ichi_bns.h:161
EdgeFlow flow0
Definition ichi_bns.h:162
S_CHAR forbidden
Definition ichi_bns.h:165
S_CHAR pass
Definition ichi_bns.h:164
Definition ichi_bns.h:169
S_CHAR pass
Definition ichi_bns.h:174
VertexFlow cap
Definition ichi_bns.h:170
VertexFlow cap0
Definition ichi_bns.h:171
VertexFlow flow0
Definition ichi_bns.h:173
VertexFlow flow
Definition ichi_bns.h:172
Definition ichi_bns.h:179
AT_NUMB type
Definition ichi_bns.h:182
BNS_IEDGE * iedge
Definition ichi_bns.h:187
BNS_ST_EDGE st_edge
Definition ichi_bns.h:181
AT_NUMB num_adj_edges
Definition ichi_bns.h:183
AT_NUMB max_adj_edges
Definition ichi_bns.h:184
Definition ichi_bns.h:297
VertexFlow cap_st1
Definition ichi_bns.h:302
EdgeFlow flow
Definition ichi_bns.h:299
VertexFlow cap_st2
Definition ichi_bns.h:305
Vertex v2
Definition ichi_bns.h:304
VertexFlow flow_st2
Definition ichi_bns.h:306
VertexFlow flow_st1
Definition ichi_bns.h:303
BNS_IEDGE iedge
Definition ichi_bns.h:298
EdgeFlow cap
Definition ichi_bns.h:300
Vertex v1
Definition ichi_bns.h:301
Definition ichicant.h:303
Definition ichitaut.h:268
Definition ichi_bns.h:345
int len_set
Definition ichi_bns.h:348
bitWord ** bitword
Definition ichi_bns.h:346
int num_set
Definition ichi_bns.h:347
Definition ichitaut.h:187
Definition ichi_bns.h:191
VertexFlow flow[2]
Definition ichi_bns.h:192
AT_NUMB ineigh[2]
Definition ichi_bns.h:194
Vertex number
Definition ichi_bns.h:193