rino 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +44 -0
- data/Rakefile +123 -0
- data/ext/extconf.rb +26 -0
- data/ext/ruby_inchi_main.so +0 -0
- data/ext/src/aux2atom.h +2786 -0
- data/ext/src/comdef.h +148 -0
- data/ext/src/e_0dstereo.c +3014 -0
- data/ext/src/e_0dstereo.h +31 -0
- data/ext/src/e_comdef.h +57 -0
- data/ext/src/e_ctl_data.h +147 -0
- data/ext/src/e_ichi_io.c +498 -0
- data/ext/src/e_ichi_io.h +40 -0
- data/ext/src/e_ichi_parms.c +37 -0
- data/ext/src/e_ichi_parms.h +41 -0
- data/ext/src/e_ichicomp.h +50 -0
- data/ext/src/e_ichierr.h +40 -0
- data/ext/src/e_ichimain.c +593 -0
- data/ext/src/e_ichisize.h +43 -0
- data/ext/src/e_inchi_atom.c +75 -0
- data/ext/src/e_inchi_atom.h +33 -0
- data/ext/src/e_inpdef.h +41 -0
- data/ext/src/e_mode.h +706 -0
- data/ext/src/e_mol2atom.c +649 -0
- data/ext/src/e_readinch.c +58 -0
- data/ext/src/e_readmol.c +54 -0
- data/ext/src/e_readmol.h +180 -0
- data/ext/src/e_readstru.c +251 -0
- data/ext/src/e_readstru.h +33 -0
- data/ext/src/e_util.c +284 -0
- data/ext/src/e_util.h +61 -0
- data/ext/src/extr_ct.h +251 -0
- data/ext/src/ichi.h +206 -0
- data/ext/src/ichi_bns.c +7999 -0
- data/ext/src/ichi_bns.h +231 -0
- data/ext/src/ichican2.c +5000 -0
- data/ext/src/ichicano.c +2195 -0
- data/ext/src/ichicano.h +49 -0
- data/ext/src/ichicans.c +1625 -0
- data/ext/src/ichicant.h +379 -0
- data/ext/src/ichicomn.h +260 -0
- data/ext/src/ichicomp.h +50 -0
- data/ext/src/ichidrp.h +119 -0
- data/ext/src/ichierr.h +124 -0
- data/ext/src/ichiisot.c +101 -0
- data/ext/src/ichilnct.c +286 -0
- data/ext/src/ichimain.h +132 -0
- data/ext/src/ichimak2.c +1189 -0
- data/ext/src/ichimake.c +3812 -0
- data/ext/src/ichimake.h +205 -0
- data/ext/src/ichimap1.c +851 -0
- data/ext/src/ichimap2.c +2856 -0
- data/ext/src/ichimap4.c +1609 -0
- data/ext/src/ichinorm.c +741 -0
- data/ext/src/ichinorm.h +67 -0
- data/ext/src/ichiparm.c +45 -0
- data/ext/src/ichiparm.h +1441 -0
- data/ext/src/ichiprt1.c +3612 -0
- data/ext/src/ichiprt2.c +1511 -0
- data/ext/src/ichiprt3.c +3011 -0
- data/ext/src/ichiqueu.c +1003 -0
- data/ext/src/ichiring.c +326 -0
- data/ext/src/ichiring.h +49 -0
- data/ext/src/ichisize.h +35 -0
- data/ext/src/ichisort.c +539 -0
- data/ext/src/ichister.c +3538 -0
- data/ext/src/ichister.h +35 -0
- data/ext/src/ichitaut.c +3843 -0
- data/ext/src/ichitaut.h +387 -0
- data/ext/src/ichitime.h +74 -0
- data/ext/src/inchi_api.h +670 -0
- data/ext/src/inchi_dll.c +1480 -0
- data/ext/src/inchi_dll.h +34 -0
- data/ext/src/inchi_dll_main.c +23 -0
- data/ext/src/inchi_dll_main.h +31 -0
- data/ext/src/inpdef.h +328 -0
- data/ext/src/lreadmol.h +1246 -0
- data/ext/src/mode.h +706 -0
- data/ext/src/ruby_inchi_main.c +558 -0
- data/ext/src/runichi.c +4179 -0
- data/ext/src/strutil.c +3861 -0
- data/ext/src/strutil.h +182 -0
- data/ext/src/util.c +1130 -0
- data/ext/src/util.h +85 -0
- data/lib/clean_tempfile.rb +220 -0
- data/lib/rino.rb +111 -0
- data/test/test.rb +386 -0
- metadata +130 -0
data/ext/src/ichi_bns.h
ADDED
@@ -0,0 +1,231 @@
|
|
1
|
+
/*
|
2
|
+
* International Union of Pure and Applied Chemistry (IUPAC)
|
3
|
+
* International Chemical Identifier (InChI)
|
4
|
+
* Version 1
|
5
|
+
* Software version 1.00
|
6
|
+
* April 13, 2005
|
7
|
+
* Developed at NIST
|
8
|
+
*/
|
9
|
+
|
10
|
+
#ifndef __INCHI_BNS_H___
|
11
|
+
#define __INCHI_BNS_H___
|
12
|
+
|
13
|
+
#define BN_MAX_ALTP 16
|
14
|
+
#define MAX_VERTEX 1024 /* including s; if vert[] has num_vert then MAX_VERTEX has (2*num_vert+2+FIRST_INDX) elements */
|
15
|
+
|
16
|
+
/* forward declarations */
|
17
|
+
|
18
|
+
struct BalancedNetworkStructure;
|
19
|
+
struct BalancedNetworkData;
|
20
|
+
struct tagTautomerGroupsInfo;
|
21
|
+
struct tagChargeGroupsInfo;
|
22
|
+
struct BN_AtomsAtTautGroup;
|
23
|
+
struct tagSaltChargeCandidate;
|
24
|
+
|
25
|
+
/* define BNS types */
|
26
|
+
|
27
|
+
typedef S_SHORT Vertex;
|
28
|
+
typedef S_SHORT EdgeIndex;
|
29
|
+
typedef S_SHORT Edge[2]; /* Edge[0] = vertex1, Edge[1] = iedge or -(1+vertex1) if vertex2 = s or t */
|
30
|
+
typedef S_SHORT BNS_IEDGE;
|
31
|
+
typedef S_SHORT EdgeFlow;
|
32
|
+
typedef S_SHORT VertexFlow;
|
33
|
+
|
34
|
+
|
35
|
+
#define BNS_EDGE_FORBIDDEN_MASK 1
|
36
|
+
#define BNS_EDGE_FORBIDDEN_TEMP 2
|
37
|
+
|
38
|
+
/**************************** BNS_EDGE ************************************/
|
39
|
+
typedef struct BnsEdge {
|
40
|
+
AT_NUMB neighbor1; /* the smaller neighbor */
|
41
|
+
AT_NUMB neighbor12; /* neighbor1 ^ neighbor2 */
|
42
|
+
AT_NUMB neigh_ord[2]; /* ordering number of the neighbor: [0]: at<neighbor, [1]: at>neighbor */
|
43
|
+
EdgeFlow cap; /* Edge capacity */
|
44
|
+
EdgeFlow cap0; /* Initial edge capacity */
|
45
|
+
EdgeFlow flow; /* Edge flow */
|
46
|
+
EdgeFlow flow0; /* Initial flow */
|
47
|
+
/*S_CHAR delta; */
|
48
|
+
S_CHAR pass; /* number of times changed in AugmentEdge() */
|
49
|
+
S_CHAR forbidden;
|
50
|
+
} BNS_EDGE;
|
51
|
+
|
52
|
+
/**************************** BNS_ST_EDGE ************************************/
|
53
|
+
typedef struct BnsStEdge {
|
54
|
+
VertexFlow cap; /* Edge capacity */
|
55
|
+
VertexFlow cap0; /* Initial edge capacity */
|
56
|
+
VertexFlow flow; /* Edge flow */
|
57
|
+
VertexFlow flow0; /* Initial edge flow */
|
58
|
+
S_CHAR pass; /* number of times changed in AugmentEdge() */
|
59
|
+
/*S_CHAR delta; */
|
60
|
+
} BNS_ST_EDGE;
|
61
|
+
|
62
|
+
/**************************** BNS_VERTEX ************************************/
|
63
|
+
typedef struct BnsVertex {
|
64
|
+
|
65
|
+
BNS_ST_EDGE st_edge; /* 0,1 capacity and flow of the edge to s or t */
|
66
|
+
AT_NUMB type; /* 2, atom, t-group, or added atom: BNS_VERT_TYPE_TGROUP, etc. */
|
67
|
+
AT_NUMB num_adj_edges; /* 3, actual number of neighbors incl. t-groups, excl. s or t */
|
68
|
+
AT_NUMB max_adj_edges; /* 4, including reserved */
|
69
|
+
/*S_CHAR path_neigh[2];*/ /* 5 found path information */
|
70
|
+
/* indexes of Edges */
|
71
|
+
BNS_IEDGE *iedge; /* 6 a pointer to the array of edge indexes adjacent to this vertex */
|
72
|
+
}BNS_VERTEX;
|
73
|
+
|
74
|
+
/**************************** BNS_ALT_PATH ************************************/
|
75
|
+
typedef union BnsAltPath {
|
76
|
+
VertexFlow flow[2];
|
77
|
+
Vertex number;
|
78
|
+
AT_NUMB ineigh[2];
|
79
|
+
} BNS_ALT_PATH;
|
80
|
+
|
81
|
+
/**************************** BN_STRUCT ************************************/
|
82
|
+
typedef struct BalancedNetworkStructure {
|
83
|
+
|
84
|
+
int num_atoms; /* number of real atoms */
|
85
|
+
/*int len_atoms; */ /* size of filled with real atoms portion of the BNS_VERTEX data */
|
86
|
+
int num_added_atoms; /* number of added fictitious atoms */
|
87
|
+
int nMaxAddAtoms; /* max. number of atoms to add (not including t-groups) */
|
88
|
+
int num_c_groups; /* number of added c-groups */
|
89
|
+
int num_t_groups; /* number of added t-groups */
|
90
|
+
int num_vertices; /* total number currently in effect; includes t-groups and added atoms */
|
91
|
+
/*int len_vertices; */ /* allocation size for BNS_VERTEX data */
|
92
|
+
int num_bonds; /* number of real bonds/2 = number of edges between real atoms */
|
93
|
+
int num_edges; /* number of currently in effect */
|
94
|
+
int num_added_edges; /* number of added edges (not including edges to t-groups) */
|
95
|
+
int nMaxAddEdges; /* max. number edges of add to each atom (not including edges to t-groups) */
|
96
|
+
|
97
|
+
int max_vertices; /* allocation size for BNS_VERTEX structures */
|
98
|
+
int max_edges; /* allocation size for edge[]; iedge has length 2*max_edges */
|
99
|
+
int max_iedges; /* allocation size for iedge */
|
100
|
+
|
101
|
+
int tot_st_cap; /* not used, only calculated */
|
102
|
+
int tot_st_flow; /* not used, only calculated */
|
103
|
+
|
104
|
+
int len_alt_path; /* length of alt_path[] */
|
105
|
+
|
106
|
+
int bNotASimplePath; /* alternating path traversed same bond 2 times in opposite directions */
|
107
|
+
int bChangeFlow; /* actually change flow */
|
108
|
+
|
109
|
+
BNS_VERTEX *vert; /* vertices */
|
110
|
+
BNS_EDGE *edge; /* edges */
|
111
|
+
BNS_IEDGE *iedge;
|
112
|
+
BNS_ALT_PATH *alt_path; /* current altp[] element */
|
113
|
+
BNS_ALT_PATH *altp[BN_MAX_ALTP]; /* keep alt. paths */
|
114
|
+
|
115
|
+
int max_altp;
|
116
|
+
int num_altp;
|
117
|
+
|
118
|
+
INCHI_MODE *pbTautFlags; /* carry it through all functions; never NULL */
|
119
|
+
INCHI_MODE *pbTautFlagsDone; /* carry it through all functions; never NULL */
|
120
|
+
AT_NUMB type_TACN; /* BNS_VERT_TYPE_ACID: if non-zero than only for it path type_T-type_TACN-type_CN allowed */
|
121
|
+
AT_NUMB type_T; /* BNS_VERT_TYPE_TGROUP */
|
122
|
+
AT_NUMB type_CN; /* BNS_VERT_TYPE_C_GROUP | BNS_VERT_TYPE_C_NEGATIVE */
|
123
|
+
S_CHAR edge_forbidden_mask;
|
124
|
+
|
125
|
+
} BN_STRUCT;
|
126
|
+
|
127
|
+
/********************* BN_DATA *******************************************/
|
128
|
+
typedef struct BalancedNetworkData {
|
129
|
+
Vertex *BasePtr; /*[MAX_VERTEX]; pointer toward the base of C(v) */
|
130
|
+
Edge *SwitchEdge; /*[MAX_VERTEX]; a pair of vertices and an edge, implemented here as [*][2] array */
|
131
|
+
S_CHAR *Tree; /*[MAX_VERTEX]; indicates presence in ScanQ, T, T', s-reachability */
|
132
|
+
Vertex *ScanQ; /*[MAX_VERTEX]; contains the set S of s-reachable vertices */
|
133
|
+
int QSize; /* index of the last element added to ScanQ */
|
134
|
+
Vertex *Pu; /*[MAX_VERTEX/2+1] */
|
135
|
+
Vertex *Pv; /*[MAX_VERTEX/2+1] */
|
136
|
+
int max_num_vertices; /* allocation size of all except Pu, Pv */
|
137
|
+
int max_len_Pu_Pv; /* allocation size of Pu and Pv */
|
138
|
+
|
139
|
+
} BN_DATA;
|
140
|
+
|
141
|
+
/* internal array size */
|
142
|
+
#define MAX_ALT_AATG_ARRAY_LEN 127
|
143
|
+
/* detected endpoint markings */
|
144
|
+
#define AATG_MARK_IN_PATH 1 /* atom in path detected by the BNS */
|
145
|
+
#define AATG_MARK_WAS_IN_PATH 2 /* found to be in path before next level */
|
146
|
+
/* output */
|
147
|
+
#define AATG_MARK_MAIN_TYPE 4 /* atom O-"salt" */
|
148
|
+
#define AATG_MARK_OTHER_TYPE 8 /* other atom to be tested */
|
149
|
+
|
150
|
+
struct tagTautomerGroupsInfo; /* forward declaration */
|
151
|
+
|
152
|
+
/******************** atoms in alt path through taut group ****************/
|
153
|
+
typedef struct BN_AtomsAtTautGroup {
|
154
|
+
int nAllocLen;
|
155
|
+
int nNumFound;
|
156
|
+
int nNumMainAdj2Tgroup;
|
157
|
+
int nNumOthersAdj2Tgroup;
|
158
|
+
AT_NUMB *nEndPoint; /* original t-group number */
|
159
|
+
S_CHAR *nMarkedAtom; /* atom mark, see AATG_MARK_* */
|
160
|
+
int *nAtTypeTotals;
|
161
|
+
struct tagTautomerGroupsInfo *t_group_info;
|
162
|
+
} BN_AATG;
|
163
|
+
|
164
|
+
|
165
|
+
/************ store changes in flow and capacity to test a bond ****************/
|
166
|
+
|
167
|
+
typedef struct tagBNS_FLOW_CHANGES {
|
168
|
+
BNS_IEDGE iedge;
|
169
|
+
EdgeFlow flow;
|
170
|
+
EdgeFlow cap;
|
171
|
+
Vertex v1;
|
172
|
+
VertexFlow cap_st1;
|
173
|
+
VertexFlow flow_st1;
|
174
|
+
Vertex v2;
|
175
|
+
VertexFlow cap_st2;
|
176
|
+
VertexFlow flow_st2;
|
177
|
+
} BNS_FLOW_CHANGES;
|
178
|
+
|
179
|
+
|
180
|
+
#define ALT_PATH_MODE_TAUTOM 1
|
181
|
+
#define ALT_PATH_MODE_CHARGE 2
|
182
|
+
#define ALT_PATH_MODE_4_SALT 3 /* mark alt bonds along the path */
|
183
|
+
#define ALT_PATH_MODE_4_SALT2 4 /* mark alt bonds along the path, path to taut. group fict. vertex if exists */
|
184
|
+
#define ALT_PATH_MODE_REM2H_CHG 5 /* remove 2 H along alt. path AH-=-BH => A=-=B and change bonds to alternating */
|
185
|
+
#define ALT_PATH_MODE_ADD2H_CHG 6 /* add 2 H along alt. path A=-=B => AH-=-BH and change bonds to alternating */
|
186
|
+
#define ALT_PATH_MODE_REM2H_TST 7 /* test-remove 2 H along alt. path AH-=-BH => A=-=B; restore changed bonds */
|
187
|
+
#define ALT_PATH_MODE_ADD2H_TST 8 /* test-add 2 H along alt. path A=-=B => AH-=-BH; restore changed bonds */
|
188
|
+
#define ALT_PATH_MODE_REM_PROTON 9 /* remove proton, adjust bonds, charges, H-counts 2004-03-05 */
|
189
|
+
|
190
|
+
#ifndef INCHI_ALL_CPP
|
191
|
+
#ifdef __cplusplus
|
192
|
+
extern "C" {
|
193
|
+
#endif
|
194
|
+
#endif
|
195
|
+
|
196
|
+
|
197
|
+
int nExists2AtMoveAltPath( struct BalancedNetworkStructure *pBNS, struct BalancedNetworkData *pBD,
|
198
|
+
struct BN_AtomsAtTautGroup *pAATG, inp_ATOM *at, int num_atoms,
|
199
|
+
int jj2, int jj1, struct tagSaltChargeCandidate *s_candidate, int nNumCandidates,
|
200
|
+
AT_NUMB *nForbiddenAtom, int nNumForbiddenAtoms);
|
201
|
+
int bExistsAltPath( struct BalancedNetworkStructure *pBNS, struct BalancedNetworkData *pBD,
|
202
|
+
struct BN_AtomsAtTautGroup *pAATG, inp_ATOM *at, int num_atoms, int nVertDoubleBond, int nVertSingleBond, int path_type );
|
203
|
+
int bExistsAnyAltPath( struct BalancedNetworkStructure *pBNS, struct BalancedNetworkData *pBD,
|
204
|
+
inp_ATOM *at, int num_atoms, int nVertDoubleBond, int nVertSingleBond, int path_type );
|
205
|
+
int AddTGroups2BnStruct( struct BalancedNetworkStructure *pBNS, inp_ATOM *at, int num_atoms,
|
206
|
+
struct tagTautomerGroupsInfo *tgi );
|
207
|
+
int AddSuperTGroup2BnStruct( struct BalancedNetworkStructure *pBNS, inp_ATOM *at, int num_atoms,
|
208
|
+
struct tagTautomerGroupsInfo *tgi );
|
209
|
+
int AddCGroups2BnStruct( struct BalancedNetworkStructure *pBNS, inp_ATOM *at, int num_atoms,
|
210
|
+
struct tagChargeGroupsInfo *cgi );
|
211
|
+
|
212
|
+
int ReInitBnStruct( struct BalancedNetworkStructure *pBNS, inp_ATOM *at, int num_at, int bRemoveGroupsFromAtoms );
|
213
|
+
int ReInitBnStructAddGroups( struct BalancedNetworkStructure *pBNS, inp_ATOM *at, int num_atoms,
|
214
|
+
struct tagTautomerGroupsInfo *tgi, struct tagChargeGroupsInfo *cgi );
|
215
|
+
|
216
|
+
|
217
|
+
int DisconnectTestAtomFromTGroup( struct BalancedNetworkStructure *pBNS, int v1, int *pv2, BNS_FLOW_CHANGES *fcd );
|
218
|
+
int DisconnectTGroupFromSuperTGroup( struct BalancedNetworkStructure *pBNS, int v1, int *pv1, int *pv2,
|
219
|
+
BNS_FLOW_CHANGES *fcd );
|
220
|
+
int ReconnectTestAtomToTGroup( struct BalancedNetworkStructure *pBNS, int v1, int v2, int ie, BNS_FLOW_CHANGES *fcd );
|
221
|
+
|
222
|
+
int bIsHardRemHCandidate( inp_ATOM *at, int i, int *cSubType );
|
223
|
+
|
224
|
+
#ifndef INCHI_ALL_CPP
|
225
|
+
#ifdef __cplusplus
|
226
|
+
}
|
227
|
+
#endif
|
228
|
+
#endif
|
229
|
+
|
230
|
+
|
231
|
+
#endif /* __INCHI_BNS_H___ */
|