Mercurial > repos > deepakjadmin > mayatool3_test2
comparison lib/Fingerprints/MACCSKeys.pm @ 0:4816e4a8ae95 draft default tip
Uploaded
author | deepakjadmin |
---|---|
date | Wed, 20 Jan 2016 09:23:18 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4816e4a8ae95 |
---|---|
1 package Fingerprints::MACCSKeys; | |
2 # | |
3 # $RCSfile: MACCSKeys.pm,v $ | |
4 # $Date: 2015/02/28 20:48:54 $ | |
5 # $Revision: 1.33 $ | |
6 # | |
7 # Author: Manish Sud <msud@san.rr.com> | |
8 # | |
9 # Copyright (C) 2015 Manish Sud. All rights reserved. | |
10 # | |
11 # This file is part of MayaChemTools. | |
12 # | |
13 # MayaChemTools is free software; you can redistribute it and/or modify it under | |
14 # the terms of the GNU Lesser General Public License as published by the Free | |
15 # Software Foundation; either version 3 of the License, or (at your option) any | |
16 # later version. | |
17 # | |
18 # MayaChemTools is distributed in the hope that it will be useful, but without | |
19 # any warranty; without even the implied warranty of merchantability of fitness | |
20 # for a particular purpose. See the GNU Lesser General Public License for more | |
21 # details. | |
22 # | |
23 # You should have received a copy of the GNU Lesser General Public License | |
24 # along with MayaChemTools; if not, see <http://www.gnu.org/licenses/> or | |
25 # write to the Free Software Foundation Inc., 59 Temple Place, Suite 330, | |
26 # Boston, MA, 02111-1307, USA. | |
27 # | |
28 | |
29 use strict; | |
30 use Carp; | |
31 use Exporter; | |
32 use Fingerprints::Fingerprints; | |
33 use TextUtil (); | |
34 use Molecule; | |
35 use PeriodicTable; | |
36 | |
37 use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); | |
38 | |
39 @ISA = qw(Fingerprints::Fingerprints Exporter); | |
40 @EXPORT = qw(); | |
41 @EXPORT_OK = qw(); | |
42 | |
43 %EXPORT_TAGS = (all => [@EXPORT, @EXPORT_OK]); | |
44 | |
45 # Setup class variables... | |
46 my($ClassName); | |
47 _InitializeClass(); | |
48 | |
49 # Overload Perl functions... | |
50 use overload '""' => 'StringifyMACCSKeys'; | |
51 | |
52 # Class constructor... | |
53 sub new { | |
54 my($Class, %NamesAndValues) = @_; | |
55 | |
56 # Initialize object... | |
57 my $This = $Class->SUPER::new(); | |
58 bless $This, ref($Class) || $Class; | |
59 $This->_InitializeMACCSKeys(); | |
60 | |
61 $This->_InitializeMACCSKeysProperties(%NamesAndValues); | |
62 | |
63 return $This; | |
64 } | |
65 | |
66 # Initialize object data... | |
67 # | |
68 sub _InitializeMACCSKeys { | |
69 my($This) = @_; | |
70 | |
71 # Type of fingerprint to generate: | |
72 # | |
73 # MACCSKeyBits - A bit vector indicating presence/absence of keys | |
74 # MACCSKeyCount - A vector containing count of keys | |
75 # | |
76 $This->{Type} = ''; | |
77 $This->{KeyBits} = ''; | |
78 | |
79 # Size of key set: 166 or 322... | |
80 $This->{Size} = ''; | |
81 } | |
82 | |
83 # Initialize class ... | |
84 sub _InitializeClass { | |
85 #Class name... | |
86 $ClassName = __PACKAGE__; | |
87 } | |
88 | |
89 # Initialize object properties.... | |
90 sub _InitializeMACCSKeysProperties { | |
91 my($This, %NamesAndValues) = @_; | |
92 | |
93 my($Name, $Value, $MethodName); | |
94 while (($Name, $Value) = each %NamesAndValues) { | |
95 $MethodName = "Set${Name}"; | |
96 $This->$MethodName($Value); | |
97 } | |
98 | |
99 # Make sure molecule object was specified... | |
100 if (!exists $NamesAndValues{Molecule}) { | |
101 croak "Error: ${ClassName}->New: Object can't be instantiated without specifying molecule..."; | |
102 } | |
103 | |
104 # Make sure type and size were specified... | |
105 if (!exists $NamesAndValues{Type}) { | |
106 croak "Error: ${ClassName}->New: Object can't be instantiated without specifying type..."; | |
107 } | |
108 if (!exists $NamesAndValues{Size}) { | |
109 croak "Error: ${ClassName}->New: Object can't be instantiated without specifying size..."; | |
110 } | |
111 | |
112 # Make sure approriate size is specified... | |
113 if ($NamesAndValues{Size} !~ /^(166|322)$/) { | |
114 croak "Error: ${ClassName}->New: The current release of MayaChemTools doesn't support MDL MACCS $NamesAndValues{Size} keys..."; | |
115 } | |
116 | |
117 if ($This->{Type} =~ /^MACCSKeyBits$/i) { | |
118 $This->_InitializeMACCSKeyBits(); | |
119 } | |
120 elsif ($This->{Type} =~ /^MACCSKeyCount$/i) { | |
121 $This->_InitializeMACCSKeyCounts(); | |
122 } | |
123 else { | |
124 croak "Error: ${ClassName}->_InitializeMACCSKeysProperties: Unknown MACCS keys type: $This->{Type}; Supported type keys: MACCSKeyBits or MACCSKeyCount......"; | |
125 } | |
126 | |
127 return $This; | |
128 } | |
129 | |
130 # Initialize MACCS key bits... | |
131 # | |
132 sub _InitializeMACCSKeyBits { | |
133 my($This) = @_; | |
134 | |
135 $This->{KeyBits} = 1; | |
136 | |
137 # Vector type... | |
138 $This->{VectorType} = 'FingerprintsBitVector'; | |
139 | |
140 $This->_InitializeFingerprintsBitVector(); | |
141 | |
142 return $This; | |
143 } | |
144 | |
145 # Initialize MACCS key counts... | |
146 # | |
147 sub _InitializeMACCSKeyCounts { | |
148 my($This) = @_; | |
149 | |
150 $This->{KeyBits} = 0; | |
151 | |
152 # Vector type and type of values... | |
153 $This->{VectorType} = 'FingerprintsVector'; | |
154 $This->{FingerprintsVectorType} = 'OrderedNumericalValues'; | |
155 | |
156 $This->_InitializeFingerprintsVector(); | |
157 | |
158 # Initialize values to zero... | |
159 my(@Values); | |
160 @Values = (0) x $This->{Size}; | |
161 $This->{FingerprintsVector}->AddValues(\@Values); | |
162 | |
163 return $This; | |
164 } | |
165 | |
166 # Set type... | |
167 # | |
168 sub SetType { | |
169 my($This, $Type) = @_; | |
170 | |
171 if ($This->{Type}) { | |
172 croak "Error: ${ClassName}->SetType: Can't change type: It's already set..."; | |
173 } | |
174 | |
175 if ($Type =~ /^MACCSKeyBits$/i) { | |
176 $This->{Type} = 'MACCSKeyBits';; | |
177 $This->{KeyBits} = 1; | |
178 } | |
179 elsif ($Type =~ /^MACCSKeyCount$/i) { | |
180 $This->{Type} = 'MACCSKeyCount';; | |
181 $This->{KeyBits} = 0; | |
182 } | |
183 else { | |
184 croak "Error: ${ClassName}->SetType: Unknown type MACCS keys: $Type; Supported type keys: MACCSKeyBits or MACCSKeyCount..."; | |
185 } | |
186 return $This; | |
187 } | |
188 | |
189 # Set size... | |
190 # | |
191 sub SetSize { | |
192 my($This, $Value) = @_; | |
193 | |
194 if ($This->{Size}) { | |
195 croak "Error: ${ClassName}->SetSize: Can't change size: It's already set..."; | |
196 } | |
197 if (!TextUtil::IsPositiveInteger($Value)) { | |
198 croak "Error: ${ClassName}->SetSize: Size value, $Value, is not valid: It must be a positive integer..."; | |
199 } | |
200 if ($Value !~ /^(166|322)/i) { | |
201 croak "Error: ${ClassName}->Size: The current release of MayaChemTools doesn't support MDL MACCS $Value keys..."; | |
202 } | |
203 $This->{Size} = $Value; | |
204 | |
205 return $This; | |
206 } | |
207 | |
208 # Generate description... | |
209 # | |
210 sub GetDescription { | |
211 my($This) = @_; | |
212 | |
213 # Is description explicity set? | |
214 if (exists $This->{Description}) { | |
215 return $This->{Description}; | |
216 } | |
217 | |
218 return "$This->{Type}"; | |
219 } | |
220 | |
221 # Generate MDL MACCS keys.. | |
222 # | |
223 sub GenerateMACCSKeys { | |
224 my($This) = @_; | |
225 | |
226 # Cache appropriate molecule data... | |
227 $This->_SetupMoleculeDataCache(); | |
228 | |
229 if ($This->{Size} == 166) { | |
230 $This->_GenerateMACCS166Keys(); | |
231 } | |
232 elsif ($This->{Size} == 322) { | |
233 $This->_GenerateMACCS322Keys(); | |
234 } | |
235 else { | |
236 croak "Error: ${ClassName}->GenerateMACCSKeys: The current release of MayaChemTools doesn't support MDL MACCS $This->{Size} keys..."; | |
237 } | |
238 | |
239 $This->{FingerprintsGenerated} = 1; | |
240 | |
241 # Clear cached molecule data... | |
242 $This->_ClearMoleculeDataCache(); | |
243 | |
244 return $This; | |
245 } | |
246 | |
247 # Setup GenerateFingerprints method in order to be consistent with all other | |
248 # fingerprints classes implemented in the current release of MayaChemTools... | |
249 # | |
250 sub GenerateFingerprints { | |
251 my($This) = @_; | |
252 | |
253 return $This->GenerateMACCSKeys(); | |
254 } | |
255 | |
256 # Generate MDL MACCS 166 keys... | |
257 # | |
258 # Information on the 166 keys [ Ref. 45-47 ]: | |
259 # | |
260 # Atom symbols: | |
261 # | |
262 # A : Any valid perodic table element symbol | |
263 # Q : Hetro atoms; any non-C or non-H atom | |
264 # X : Halogens; F, Cl, Br, I | |
265 # Z : Others; other than H, C, N, O, Si, P, S, F, Cl, Br, I | |
266 # | |
267 # Bond types: | |
268 # | |
269 # - : Single | |
270 # = : Double | |
271 # T : Triple | |
272 # # : Triple | |
273 # ~ : Single or double query bond | |
274 # % : An aromatic query bond | |
275 # | |
276 # None : Any bond type; no explict bond specified | |
277 # | |
278 # $ : Ring bond; $ before a bond type specifies ring bond | |
279 # ! : Chain or non-ring bond; ! before a bond type specifies chain bond | |
280 # | |
281 # @ : A ring linkage and the number following it specifies the | |
282 # atoms position in the line, thus @1 means linked back to the first atom in | |
283 # the list. | |
284 # | |
285 # Aromatic: Kekule or Arom5 | |
286 # | |
287 # Kekule: Bonds in 6-membered rings with alternalte single/double bonds or perimeter | |
288 # bonds | |
289 # | |
290 # Arom5: Bonds in 5-membered rings with two double bonds and a hetro atom at | |
291 # the apex of the ring. | |
292 # | |
293 # Index Key Description | |
294 # 1 ISOTOPE | |
295 # 2 103 < ATOMIC NO. < 256 | |
296 # 3 GROUP IVA,VA,VIA PERIODS 4-6 (Ge...) | |
297 # 4 ACTINIDE | |
298 # 5 GROUP IIIB,IVB (Sc...) | |
299 # 6 LANTHANIDE | |
300 # 7 GROUP VB,VIB,VIIB (V...) | |
301 # 8 QAAA@1 | |
302 # 9 GROUP VIII (Fe...) | |
303 # 10 GROUP IIA (ALKALINE EARTH) | |
304 # 11 4M RING | |
305 # 12 GROUP IB,IIB (Cu...) | |
306 # 13 ON(C)C | |
307 # 14 S-S | |
308 # 15 OC(O)O | |
309 # 16 QAA@1 | |
310 # 17 CTC | |
311 # 18 GROUP IIIA (B...) | |
312 # 19 7M RING | |
313 # 20 SI | |
314 # 21 C=C(Q)Q | |
315 # 22 3M RING | |
316 # 23 NC(O)O | |
317 # 24 N-O | |
318 # 25 NC(N)N | |
319 # 26 C$=C($A)$A | |
320 # 27 I | |
321 # 28 QCH2Q | |
322 # 29 P | |
323 # 30 CQ(C)(C)A | |
324 # 31 QX | |
325 # 32 CSN | |
326 # 33 NS | |
327 # 34 CH2=A | |
328 # 35 GROUP IA (ALKALI METAL) | |
329 # 36 S HETEROCYCLE | |
330 # 37 NC(O)N | |
331 # 38 NC(C)N | |
332 # 39 OS(O)O | |
333 # 40 S-O | |
334 # 41 CTN | |
335 # 42 F | |
336 # 43 QHAQH | |
337 # 44 OTHER | |
338 # 45 C=CN | |
339 # 46 BR | |
340 # 47 SAN | |
341 # 48 OQ(O)O | |
342 # 49 CHARGE | |
343 # 50 C=C(C)C | |
344 # 51 CSO | |
345 # 52 NN | |
346 # 53 QHAAAQH | |
347 # 54 QHAAQH | |
348 # 55 OSO | |
349 # 56 ON(O)C | |
350 # 57 O HETEROCYCLE | |
351 # 58 QSQ | |
352 # 59 Snot%A%A | |
353 # 60 S=O | |
354 # 61 AS(A)A | |
355 # 62 A$A!A$A | |
356 # 63 N=O | |
357 # 64 A$A!S | |
358 # 65 C%N | |
359 # 66 CC(C)(C)A | |
360 # 67 QS | |
361 # 68 QHQH (&...) | |
362 # 69 QQH | |
363 # 70 QNQ | |
364 # 71 NO | |
365 # 72 OAAO | |
366 # 73 S=A | |
367 # 74 CH3ACH3 | |
368 # 75 A!N$A | |
369 # 76 C=C(A)A | |
370 # 77 NAN | |
371 # 78 C=N | |
372 # 79 NAAN | |
373 # 80 NAAAN | |
374 # 81 SA(A)A | |
375 # 82 ACH2QH | |
376 # 83 QAAAA@1 | |
377 # 84 NH2 | |
378 # 85 CN(C)C | |
379 # 86 CH2QCH2 | |
380 # 87 X!A$A | |
381 # 88 S | |
382 # 89 OAAAO | |
383 # 90 QHAACH2A | |
384 # 91 QHAAACH2A | |
385 # 92 OC(N)C | |
386 # 93 QCH3 | |
387 # 94 QN | |
388 # 95 NAAO | |
389 # 96 5M RING | |
390 # 97 NAAAO | |
391 # 98 QAAAAA@1 | |
392 # 99 C=C | |
393 # 100 ACH2N | |
394 # 101 8M RING | |
395 # 102 QO | |
396 # 103 CL | |
397 # 104 QHACH2A | |
398 # 105 A$A($A)$A | |
399 # 106 QA(Q)Q | |
400 # 107 XA(A)A | |
401 # 108 CH3AAACH2A | |
402 # 109 ACH2O | |
403 # 110 NCO | |
404 # 111 NACH2A | |
405 # 112 AA(A)(A)A | |
406 # 113 Onot%A%A | |
407 # 114 CH3CH2A | |
408 # 115 CH3ACH2A | |
409 # 116 CH3AACH2A | |
410 # 117 NAO | |
411 # 118 ACH2CH2A > 1 | |
412 # 119 N=A | |
413 # 120 HETEROCYCLIC ATOM > 1 (&...) | |
414 # 121 N HETEROCYCLE | |
415 # 122 AN(A)A | |
416 # 123 OCO | |
417 # 124 QQ | |
418 # 125 AROMATIC RING > 1 | |
419 # 126 A!O!A | |
420 # 127 A$A!O > 1 (&...) | |
421 # 128 ACH2AAACH2A | |
422 # 129 ACH2AACH2A | |
423 # 130 QQ > 1 (&...) | |
424 # 131 QH > 1 | |
425 # 132 OACH2A | |
426 # 133 A$A!N | |
427 # 134 X (HALOGEN) | |
428 # 135 Nnot%A%A | |
429 # 136 O=A > 1 | |
430 # 137 HETEROCYCLE | |
431 # 138 QCH2A > 1 (&...) | |
432 # 139 OH | |
433 # 140 O > 3 (&...) | |
434 # 141 CH3 > 2 (&...) | |
435 # 142 N > 1 | |
436 # 143 A$A!O | |
437 # 144 Anot%A%Anot%A | |
438 # 145 6M RING > 1 | |
439 # 146 O > 2 | |
440 # 147 ACH2CH2A | |
441 # 148 AQ(A)A | |
442 # 149 CH3 > 1 | |
443 # 150 A!A$A!A | |
444 # 151 NH | |
445 # 152 OC(C)C | |
446 # 153 QCH2A | |
447 # 154 C=O | |
448 # 155 A!CH2!A | |
449 # 156 NA(A)A | |
450 # 157 C-O | |
451 # 158 C-N | |
452 # 159 O > 1 | |
453 # 160 CH3 | |
454 # 161 N | |
455 # 162 AROMATIC | |
456 # 163 6M RING | |
457 # 164 O | |
458 # 165 RING | |
459 # 166 FRAGMENTS | |
460 # | |
461 sub _GenerateMACCS166Keys { | |
462 my($This) = @_; | |
463 my($KeyNum, $KeyIndex, $MethodName, $KeyValue, $SkipPosCheck); | |
464 | |
465 $SkipPosCheck = 1; | |
466 | |
467 # Generate and set key values... | |
468 KEYNUM: for $KeyNum (1 .. 166) { | |
469 $MethodName = "_Generate166KeySetKey${KeyNum}"; | |
470 $KeyValue = $This->$MethodName(); | |
471 | |
472 if (!$KeyValue) { | |
473 next KEYNUM; | |
474 } | |
475 $KeyIndex = $KeyNum - 1; | |
476 if ($This->{KeyBits}) { | |
477 $This->{FingerprintsBitVector}->SetBit($KeyIndex, $SkipPosCheck); | |
478 } | |
479 else { | |
480 $This->{FingerprintsVector}->SetValue($KeyIndex, $KeyValue, $SkipPosCheck); | |
481 } | |
482 } | |
483 | |
484 # Add key labels for MACCSKeyCount... | |
485 if (!$This->{KeyBits}) { | |
486 $This->_SetMACCSKeyCountValueIDs(); | |
487 } | |
488 | |
489 return $This; | |
490 } | |
491 | |
492 # Generate MDL MACCS 322 keys... | |
493 # | |
494 # MDL MACCS 322 key set is defined in tables 1, 2 and 3 by: Joseph L. Durant; Burton A. Leland; | |
495 # Douglas R. Henry; James G. Nourse. Reoptimization of MDL Keys for Use in Drug Discovery [ Ref. 46 ]. | |
496 # | |
497 # Atom symbols: | |
498 # | |
499 # A : Any valid perodic table element symbol | |
500 # Q : Hetro atoms; any non-C or non-H atom | |
501 # X : Others; other than H, C, N, O, Si, P, S, F, Cl, Br, I | |
502 # Z is neither defined nor used | |
503 # | |
504 # Atom symbol, X, used for 322 keys [ Ref 46 ] doesn't refer to Halogens as it does for 166 keys. In | |
505 # order to keep the definition of 322 keys consistent with the published definitions, the symbol X is | |
506 # used to imply "others" atoms, but it's internally mapped to symbol X as defined for 166 keys | |
507 # during the generation of key values. | |
508 # | |
509 # The keys include: | |
510 # | |
511 # o 26 atom properties of type P, as listed in Table 1 | |
512 # o 32 one-atom environments, as listed in Table 3 | |
513 # o 264 atom-bond-atom combinations listed in Table 4 | |
514 # | |
515 # Total number of keys in three tables: 322 | |
516 # | |
517 # Removal of two rare properties in Table 1 number 21 and 22 results in a 320 keyset. | |
518 # | |
519 # Atom properties-based keys (26): | |
520 # | |
521 # Index Description | |
522 # 1 A(AAA) or AA(A)A - atom with at least three neighbors | |
523 # 2 Q - heteroatom | |
524 # 3 Anot%not-A - atom involved in one or more multiple bonds, not aromatic | |
525 # 4 A(AAAA) or AA(A)(A)A - atom with at least four neighbors | |
526 # 5 A(QQ) or QA(Q) - atom with at least two heteroatom neighbors | |
527 # 6 A(QQQ) or QA(Q)Q - atom with at least three heteroatom neighbors | |
528 # 7 QH - heteroatom with at least one hydrogen attached | |
529 # 8 CH2(AA) or ACH2A - carbon with at least two single bonds and at least two hydrogens attached | |
530 # 9 CH3(A) or ACH3 - carbon with at least one single bond and at least three hydrogens attached | |
531 # 10 Halogen | |
532 # 11 A(-A-A-A) or A-A(-A)-A - atom has at least three single bonds | |
533 # 12 AAAAAA@1 > 2 - atom is in at least two different six-membered rings | |
534 # 13 A($A$A$A) or A$A($A)$A - atom has more than two ring bonds | |
535 # 14 A$A!A$A - atom is at a ring/chain boundary. When a comparison is done | |
536 # with another atom the path passes through the chain bond. | |
537 # 15 Anot%A%Anot%A - atom is at an aromatic/nonaromatic boundary. When a | |
538 # comparison is done with another atom the path | |
539 # passes through the aromatic bond. | |
540 # 16 A!A!A - atom with more than one chain bond | |
541 # 17 A!A$A!A - atom is at a ring/chain boundary. When a comparison is done | |
542 # with another atom the path passes through the ring bond. | |
543 # 18 A%Anot%A%A - atom is at an aromatic/nonaromatic boundary. When a | |
544 # comparison is done with another atom the | |
545 # path passes through the nonaromatic bond. | |
546 # 19 HETEROCYCLE - atom is a heteroatom in a ring. | |
547 # 20 rare properties: atom with five or more neighbors, atom in | |
548 # four or more rings, or atom types other than | |
549 # H, C, N, O, S, F, Cl, Br, or I | |
550 # 21 rare properties: atom has a charge, is an isotope, has two or | |
551 # more multiple bonds, or has a triple bond. | |
552 # 22 N - nitrogen | |
553 # 23 S - sulfur | |
554 # 24 O - oxygen | |
555 # 25 A(AA)A(A)A(AA) - atom has two neighbors, each with three or more neighbors | |
556 # (including the central atom). | |
557 # 26 CHACH2 - atom has two hydrocarbon (CH2) neighbors | |
558 # | |
559 # | |
560 # Atomic environments properties-based keys (32): | |
561 # | |
562 # Index Key Description | |
563 # 27 C(CC) | |
564 # 28 C(CCC) | |
565 # 29 C(CN) | |
566 # 30 C(CCN) | |
567 # 31 C(NN) | |
568 # 32 C(NNC) | |
569 # 33 C(NNN) | |
570 # 34 C(CO) | |
571 # 35 C(CCO) | |
572 # 36 C(NO) | |
573 # 37 C(NCO) | |
574 # 38 C(NNO) | |
575 # 39 C(OO) | |
576 # 40 C(COO) | |
577 # 41 C(NOO) | |
578 # 42 C(OOO) | |
579 # 43 Q(CC) | |
580 # 44 Q(CCC) | |
581 # 45 Q(CN) | |
582 # 46 Q(CCN) | |
583 # 47 Q(NN) | |
584 # 48 Q(CNN) | |
585 # 49 Q(NNN) | |
586 # 50 Q(CO) | |
587 # 51 Q(CCO) | |
588 # 52 Q(NO) | |
589 # 53 Q(CNO) | |
590 # 54 Q(NNO) | |
591 # 55 Q(OO) | |
592 # 56 Q(COO) | |
593 # 57 Q(NOO) | |
594 # 58 Q(OOO) | |
595 # | |
596 # Note: The first symbol is the central atom, with atoms bonded to the | |
597 # central atom listed in parentheses. Q is any non-C, non-H atom. If | |
598 # only two atoms are in parentheses, there is no implication concerning | |
599 # the other atoms bonded to the central atom. | |
600 # | |
601 # Atom-Bond-Atom properties-based keys: (264) | |
602 # | |
603 # Index Key Description | |
604 # 59 C-C | |
605 # 60 C-N | |
606 # 61 C-O | |
607 # 62 C-S | |
608 # 63 C-Cl | |
609 # 64 C-P | |
610 # 65 C-F | |
611 # 66 C-Br | |
612 # 67 C-Si | |
613 # 68 C-I | |
614 # 69 C-X | |
615 # 70 N-N | |
616 # 71 N-O | |
617 # 72 N-S | |
618 # 73 N-Cl | |
619 # 74 N-P | |
620 # 75 N-F | |
621 # 76 N-Br | |
622 # 77 N-Si | |
623 # 78 N-I | |
624 # 79 N-X | |
625 # 80 O-O | |
626 # 81 O-S | |
627 # 82 O-Cl | |
628 # 83 O-P | |
629 # 84 O-F | |
630 # 85 O-Br | |
631 # 86 O-Si | |
632 # 87 O-I | |
633 # 88 O-X | |
634 # 89 S-S | |
635 # 90 S-Cl | |
636 # 91 S-P | |
637 # 92 S-F | |
638 # 93 S-Br | |
639 # 94 S-Si | |
640 # 95 S-I | |
641 # 96 S-X | |
642 # 97 Cl-Cl | |
643 # 98 Cl-P | |
644 # 99 Cl-F | |
645 # 100 Cl-Br | |
646 # 101 Cl-Si | |
647 # 102 Cl-I | |
648 # 103 Cl-X | |
649 # 104 P-P | |
650 # 105 P-F | |
651 # 106 P-Br | |
652 # 107 P-Si | |
653 # 108 P-I | |
654 # 109 P-X | |
655 # 110 F-F | |
656 # 111 F-Br | |
657 # 112 F-Si | |
658 # 113 F-I | |
659 # 114 F-X | |
660 # 115 Br-Br | |
661 # 116 Br-Si | |
662 # 117 Br-I | |
663 # 118 Br-X | |
664 # 119 Si-Si | |
665 # 120 Si-I | |
666 # 121 Si-X | |
667 # 122 I-I | |
668 # 123 I-X | |
669 # 124 X-X | |
670 # 125 C=C | |
671 # 126 C=N | |
672 # 127 C=O | |
673 # 128 C=S | |
674 # 129 C=Cl | |
675 # 130 C=P | |
676 # 131 C=F | |
677 # 132 C=Br | |
678 # 133 C=Si | |
679 # 134 C=I | |
680 # 135 C=X | |
681 # 136 N=N | |
682 # 137 N=O | |
683 # 138 N=S | |
684 # 139 N=Cl | |
685 # 140 N=P | |
686 # 141 N=F | |
687 # 142 N=Br | |
688 # 143 N=Si | |
689 # 144 N=I | |
690 # 145 N=X | |
691 # 146 O=O | |
692 # 147 O=S | |
693 # 148 O=Cl | |
694 # 149 O=P | |
695 # 150 O=F | |
696 # 151 O=Br | |
697 # 152 O=Si | |
698 # 153 O=I | |
699 # 154 O=X | |
700 # 155 S=S | |
701 # 156 S=Cl | |
702 # 157 S=P | |
703 # 158 S=F | |
704 # 159 S=Br | |
705 # 160 S=Si | |
706 # 161 S=I | |
707 # 162 S=X | |
708 # 163 Cl=Cl | |
709 # 164 Cl=P | |
710 # 165 Cl=F | |
711 # 166 Cl=Br | |
712 # 167 Cl=Si | |
713 # 168 Cl=I | |
714 # 169 Cl=X | |
715 # 170 P=P | |
716 # 171 P=F | |
717 # 172 P=Br | |
718 # 173 P=Si | |
719 # 174 P=I | |
720 # 175 P=X | |
721 # 176 F=F | |
722 # 177 F=Br | |
723 # 178 F=Si | |
724 # 179 F=I | |
725 # 180 F=X | |
726 # 181 Br=Br | |
727 # 182 Br=Si | |
728 # 183 Br=I | |
729 # 184 Br=X | |
730 # 185 Si=Si | |
731 # 186 Si=I | |
732 # 187 Si=X | |
733 # 188 I=I | |
734 # 189 I=X | |
735 # 190 X=X | |
736 # 191 C#C | |
737 # 192 C#N | |
738 # 193 C#O | |
739 # 194 C#S | |
740 # 195 C#Cl | |
741 # 196 C#P | |
742 # 197 C#F | |
743 # 198 C#Br | |
744 # 199 C#Si | |
745 # 200 C#I | |
746 # 201 C#X | |
747 # 202 N#N | |
748 # 203 N#O | |
749 # 204 N#S | |
750 # 205 N#Cl | |
751 # 206 N#P | |
752 # 207 N#F | |
753 # 208 N#Br | |
754 # 209 N#Si | |
755 # 210 N#I | |
756 # 211 N#X | |
757 # 212 O#O | |
758 # 213 O#S | |
759 # 214 O#Cl | |
760 # 215 O#P | |
761 # 216 O#F | |
762 # 217 O#Br | |
763 # 218 O#Si | |
764 # 219 O#I | |
765 # 220 O#X | |
766 # 221 S#S | |
767 # 222 S#Cl | |
768 # 223 S#P | |
769 # 224 S#F | |
770 # 225 S#Br | |
771 # 226 S#Si | |
772 # 227 S#I | |
773 # 228 S#X | |
774 # 229 Cl#Cl | |
775 # 230 Cl#P | |
776 # 231 Cl#F | |
777 # 232 Cl#Br | |
778 # 233 Cl#Si | |
779 # 234 Cl#I | |
780 # 235 Cl#X | |
781 # 236 P#P | |
782 # 237 P#F | |
783 # 238 P#Br | |
784 # 239 P#Si | |
785 # 240 P#I | |
786 # 241 P#X | |
787 # 242 F#F | |
788 # 243 F#Br | |
789 # 244 F#Si | |
790 # 245 F#I | |
791 # 246 F#X | |
792 # 247 Br#Br | |
793 # 248 Br#Si | |
794 # 249 Br#I | |
795 # 250 Br#X | |
796 # 251 Si#Si | |
797 # 252 Si#I | |
798 # 253 Si#X | |
799 # 254 I#I | |
800 # 255 I#X | |
801 # 256 X#X | |
802 # 257 C$C | |
803 # 258 C$N | |
804 # 259 C$O | |
805 # 260 C$S | |
806 # 261 C$Cl | |
807 # 262 C$P | |
808 # 263 C$F | |
809 # 264 C$Br | |
810 # 265 C$Si | |
811 # 266 C$I | |
812 # 267 C$X | |
813 # 268 N$N | |
814 # 269 N$O | |
815 # 270 N$S | |
816 # 271 N$Cl | |
817 # 272 N$P | |
818 # 273 N$F | |
819 # 274 N$Br | |
820 # 275 N$Si | |
821 # 276 N$I | |
822 # 277 N$X | |
823 # 278 O$O | |
824 # 279 O$S | |
825 # 280 O$Cl | |
826 # 281 O$P | |
827 # 282 O$F | |
828 # 283 O$Br | |
829 # 284 O$Si | |
830 # 285 O$I | |
831 # 286 O$X | |
832 # 287 S$S | |
833 # 288 S$Cl | |
834 # 289 S$P | |
835 # 290 S$F | |
836 # 291 S$Br | |
837 # 292 S$Si | |
838 # 293 S$I | |
839 # 294 S$X | |
840 # 295 Cl$Cl | |
841 # 296 Cl$P | |
842 # 297 Cl$F | |
843 # 298 Cl$Br | |
844 # 299 Cl$Si | |
845 # 300 Cl$I | |
846 # 301 Cl$X | |
847 # 302 P$P | |
848 # 303 P$F | |
849 # 304 P$Br | |
850 # 305 P$Si | |
851 # 306 P$I | |
852 # 307 P$X | |
853 # 308 F$F | |
854 # 309 F$Br | |
855 # 310 F$Si | |
856 # 311 F$I | |
857 # 312 F$X | |
858 # 313 Br$Br | |
859 # 314 Br$Si | |
860 # 315 Br$I | |
861 # 316 Br$X | |
862 # 317 Si$Si | |
863 # 318 Si$I | |
864 # 319 Si$X | |
865 # 320 I$I | |
866 # 321 I$X | |
867 # 322 X$X | |
868 # | |
869 # Note: Instead of using '%' as rind bond as mentioned in the article [ Ref. 46 ], MayaChemTools | |
870 # used '$' as a symbol for ring bond to follow conventions used for MACCS 166 keys; the symbol '%' | |
871 # is used to indicate an aromatic query bond. | |
872 # | |
873 sub _GenerateMACCS322Keys { | |
874 my($This) = @_; | |
875 my($KeyNum, $KeyIndex, $MethodName, $KeyValue, $SkipPosCheck); | |
876 | |
877 $SkipPosCheck = 1; | |
878 | |
879 # Generate and set key values... | |
880 KEYNUM: for $KeyNum (1 .. 322) { | |
881 $MethodName = "_Generate322KeySetKey${KeyNum}"; | |
882 $KeyValue = $This->$MethodName(); | |
883 | |
884 if (!$KeyValue) { | |
885 next KEYNUM; | |
886 } | |
887 $KeyIndex = $KeyNum - 1; | |
888 if ($This->{KeyBits}) { | |
889 $This->{FingerprintsBitVector}->SetBit($KeyIndex, $SkipPosCheck); | |
890 } | |
891 else { | |
892 $This->{FingerprintsVector}->SetValue($KeyIndex, $KeyValue, $SkipPosCheck); | |
893 } | |
894 } | |
895 | |
896 # Add key labels for MACCSKeyCount... | |
897 if (!$This->{KeyBits}) { | |
898 $This->_SetMACCSKeyCountValueIDs(); | |
899 } | |
900 return $This; | |
901 } | |
902 | |
903 # Set MACCS key count value IDs for fingerprint vector. The value IDs labels format | |
904 # is: Key<KeyNum>. | |
905 # | |
906 # By default, no value IDs are set for fingerprint vector values. | |
907 # | |
908 sub _SetMACCSKeyCountValueIDs { | |
909 my($This) = @_; | |
910 | |
911 if (!$This->{FingerprintsVector}) { | |
912 return; | |
913 } | |
914 my(@ValueIDs); | |
915 | |
916 @ValueIDs = map { "Key$_"; } (1 .. $This->{Size}); | |
917 $This->{FingerprintsVector}->AddValueIDs(\@ValueIDs); | |
918 | |
919 return $This; | |
920 } | |
921 | |
922 ################################## | |
923 # | |
924 # Implementation of MDL MACCS 166 keys... | |
925 # | |
926 ################################## | |
927 | |
928 # Generate key 1 value as 1/0 indicating its presence/absence or count of its | |
929 # presence in a molecule. | |
930 # | |
931 # Key 1 description: ISOTOPE | |
932 # | |
933 sub _Generate166KeySetKey1 { | |
934 my($This) = @_; | |
935 my($Atom, $KeyValue); | |
936 | |
937 $KeyValue = 0; | |
938 ATOM: for $Atom (@{$This->{Atoms}}) { | |
939 if ($Atom->IsIsotope()) { | |
940 if ($This->{KeyBits}) { | |
941 $KeyValue = 1; | |
942 last ATOM; | |
943 } | |
944 $KeyValue++; | |
945 } | |
946 } | |
947 return $KeyValue; | |
948 } | |
949 | |
950 # Generate key 2 value as 1/0 indicating its presence/absence or count of its | |
951 # presence in a molecule. | |
952 # | |
953 # Key 2 description: 103 < ATOMIC NO. < 256 | |
954 # | |
955 sub _Generate166KeySetKey2 { | |
956 my($This) = @_; | |
957 my($Atom, $AtomicNumber, $KeyValue); | |
958 | |
959 $KeyValue = 0; | |
960 ATOM: for $Atom (@{$This->{Atoms}}) { | |
961 $AtomicNumber = $Atom->GetAtomicNumber(); | |
962 if ($AtomicNumber > 103 && $AtomicNumber < 256) { | |
963 if ($This->{KeyBits}) { | |
964 $KeyValue = 1; | |
965 last ATOM; | |
966 } | |
967 $KeyValue++; | |
968 } | |
969 } | |
970 return $KeyValue; | |
971 } | |
972 | |
973 # Generate key 3 value as 1/0 indicating its presence/absence or count of its | |
974 # presence in a molecule. | |
975 # | |
976 # Key 3 description: GROUP IVA,VA,VIA (GroupNumber: 14, 15, 16) PERIODS 4-6 (Ge...) | |
977 # | |
978 sub _Generate166KeySetKey3 { | |
979 my($This) = @_; | |
980 my($Atom, $KeyValue, $AtomicNumber, $GroupNumber, $PeriodNumber); | |
981 | |
982 $KeyValue = 0; | |
983 ATOM: for $Atom (@{$This->{Atoms}}) { | |
984 $AtomicNumber = $Atom->GetAtomicNumber(); | |
985 if ($AtomicNumber) { | |
986 $GroupNumber = PeriodicTable::GetElementGroupNumber($AtomicNumber); | |
987 $PeriodNumber = PeriodicTable::GetElementPeriodNumber($AtomicNumber); | |
988 if ($PeriodNumber =~ /^(4|5|6)$/ && $GroupNumber =~ /^(14|15|16)$/) { | |
989 if ($This->{KeyBits}) { | |
990 $KeyValue = 1; | |
991 last ATOM; | |
992 } | |
993 $KeyValue++; | |
994 } | |
995 } | |
996 } | |
997 return $KeyValue; | |
998 } | |
999 | |
1000 # Generate key 4 value as 1/0 indicating its presence/absence or count of its | |
1001 # presence in a molecule. | |
1002 # | |
1003 # Key 4 description: ACTINIDE | |
1004 # | |
1005 sub _Generate166KeySetKey4 { | |
1006 my($This) = @_; | |
1007 my($Atom, $AtomicNumber, $KeyValue); | |
1008 | |
1009 $KeyValue = 0; | |
1010 ATOM: for $Atom (@{$This->{Atoms}}) { | |
1011 $AtomicNumber = $Atom->GetAtomicNumber(); | |
1012 if ($AtomicNumber >= 89 && $AtomicNumber <= 103) { | |
1013 if ($This->{KeyBits}) { | |
1014 $KeyValue = 1; | |
1015 last ATOM; | |
1016 } | |
1017 $KeyValue++; | |
1018 } | |
1019 } | |
1020 return $KeyValue; | |
1021 } | |
1022 | |
1023 # Generate key 5 value as 1/0 indicating its presence/absence or count of its | |
1024 # presence in a molecule. | |
1025 # | |
1026 # Key 5 description: GROUP IIIB,IVB (Sc...) | |
1027 # | |
1028 sub _Generate166KeySetKey5 { | |
1029 my($This) = @_; | |
1030 my($Atom, $KeyValue, $AtomicNumber, $GroupNumber); | |
1031 | |
1032 $KeyValue = 0; | |
1033 ATOM: for $Atom (@{$This->{Atoms}}) { | |
1034 $AtomicNumber = $Atom->GetAtomicNumber(); | |
1035 if ($AtomicNumber) { | |
1036 $GroupNumber = PeriodicTable::GetElementGroupNumber($AtomicNumber); | |
1037 if ($GroupNumber =~ /^(3|4)$/) { | |
1038 if ($This->{KeyBits}) { | |
1039 $KeyValue = 1; | |
1040 last ATOM; | |
1041 } | |
1042 $KeyValue++; | |
1043 } | |
1044 } | |
1045 } | |
1046 return $KeyValue; | |
1047 } | |
1048 | |
1049 # Generate key 6 value as 1/0 indicating its presence/absence or count of its | |
1050 # presence in a molecule. | |
1051 # | |
1052 # Key 6 description: LANTHANIDE | |
1053 # | |
1054 sub _Generate166KeySetKey6 { | |
1055 my($This) = @_; | |
1056 my($Atom, $AtomicNumber, $KeyValue); | |
1057 | |
1058 $KeyValue = 0; | |
1059 ATOM: for $Atom (@{$This->{Atoms}}) { | |
1060 $AtomicNumber = $Atom->GetAtomicNumber(); | |
1061 if ($AtomicNumber >= 57 && $AtomicNumber <= 71) { | |
1062 if ($This->{KeyBits}) { | |
1063 $KeyValue = 1; | |
1064 last ATOM; | |
1065 } | |
1066 $KeyValue++; | |
1067 } | |
1068 } | |
1069 return $KeyValue; | |
1070 } | |
1071 | |
1072 # Generate key 7 value as 1/0 indicating its presence/absence or count of its | |
1073 # presence in a molecule. | |
1074 # | |
1075 # Key 7 description: GROUP VB,VIB,VIIB (V...) | |
1076 # | |
1077 sub _Generate166KeySetKey7 { | |
1078 my($This) = @_; | |
1079 my($Atom, $KeyValue, $AtomicNumber, $GroupNumber); | |
1080 | |
1081 $KeyValue = 0; | |
1082 ATOM: for $Atom (@{$This->{Atoms}}) { | |
1083 $AtomicNumber = $Atom->GetAtomicNumber(); | |
1084 if ($AtomicNumber) { | |
1085 $GroupNumber = PeriodicTable::GetElementGroupNumber($AtomicNumber); | |
1086 if ($GroupNumber =~ /^(5|6|7)$/) { | |
1087 if ($This->{KeyBits}) { | |
1088 $KeyValue = 1; | |
1089 last ATOM; | |
1090 } | |
1091 $KeyValue++; | |
1092 } | |
1093 } | |
1094 } | |
1095 return $KeyValue; | |
1096 } | |
1097 | |
1098 # Generate key 8 value as 1/0 indicating its presence/absence or count of its | |
1099 # presence in a molecule. | |
1100 # | |
1101 # Key 8 description: QAAA@1 | |
1102 # | |
1103 sub _Generate166KeySetKey8 { | |
1104 my($This) = @_; | |
1105 my($Atom, $KeyValue, $RingSize); | |
1106 | |
1107 $RingSize = 4; | |
1108 $KeyValue = 0; | |
1109 ATOM: for $Atom (@{$This->{Atoms}}) { | |
1110 if ($This->_IsHeteroAtom($Atom) && $Atom->IsInRingOfSize($RingSize)) { | |
1111 if ($This->{KeyBits}) { | |
1112 $KeyValue = 1; | |
1113 last ATOM; | |
1114 } | |
1115 $KeyValue++; | |
1116 } | |
1117 } | |
1118 return $KeyValue; | |
1119 } | |
1120 | |
1121 # Generate key 9 value as 1/0 indicating its presence/absence or count of its | |
1122 # presence in a molecule. | |
1123 # | |
1124 # Key 9 description: GROUP VIII (Fe...) | |
1125 # | |
1126 sub _Generate166KeySetKey9 { | |
1127 my($This) = @_; | |
1128 my($Atom, $KeyValue, $AtomicNumber, $GroupNumber); | |
1129 | |
1130 $KeyValue = 0; | |
1131 ATOM: for $Atom (@{$This->{Atoms}}) { | |
1132 $AtomicNumber = $Atom->GetAtomicNumber(); | |
1133 if ($AtomicNumber) { | |
1134 $GroupNumber = PeriodicTable::GetElementGroupNumber($AtomicNumber); | |
1135 if ($GroupNumber =~ /^(8|9|10)$/) { | |
1136 if ($This->{KeyBits}) { | |
1137 $KeyValue = 1; | |
1138 last ATOM; | |
1139 } | |
1140 $KeyValue++; | |
1141 } | |
1142 } | |
1143 } | |
1144 return $KeyValue; | |
1145 } | |
1146 | |
1147 # Generate key 10 value as 1/0 indicating its presence/absence or count of its | |
1148 # presence in a molecule. | |
1149 # | |
1150 # Key 10 description: GROUP IIA (ALKALINE EARTH) | |
1151 # | |
1152 sub _Generate166KeySetKey10 { | |
1153 my($This) = @_; | |
1154 my($Atom, $KeyValue, $AtomicNumber, $GroupNumber); | |
1155 | |
1156 $KeyValue = 0; | |
1157 ATOM: for $Atom (@{$This->{Atoms}}) { | |
1158 $AtomicNumber = $Atom->GetAtomicNumber(); | |
1159 if ($AtomicNumber) { | |
1160 $GroupNumber = PeriodicTable::GetElementGroupNumber($AtomicNumber); | |
1161 if ($GroupNumber =~ /^2$/) { | |
1162 if ($This->{KeyBits}) { | |
1163 $KeyValue = 1; | |
1164 last ATOM; | |
1165 } | |
1166 $KeyValue++; | |
1167 } | |
1168 } | |
1169 } | |
1170 return $KeyValue; | |
1171 } | |
1172 | |
1173 # Generate key 11 value as 1/0 indicating its presence/absence or count of its | |
1174 # presence in a molecule. | |
1175 # | |
1176 # Key 11 description: 4M RING | |
1177 # | |
1178 sub _Generate166KeySetKey11 { | |
1179 my($This) = @_; | |
1180 my($Molecule, $KeyValue, $RingSize, $NumOfRings); | |
1181 | |
1182 $RingSize = 4; | |
1183 $Molecule = $This->GetMolecule(); | |
1184 $NumOfRings = $Molecule->GetNumOfRingsWithSize($RingSize); | |
1185 | |
1186 if ($This->{KeyBits}) { | |
1187 $KeyValue = $NumOfRings ? 1 : 0; | |
1188 } | |
1189 else { | |
1190 $KeyValue = $NumOfRings; | |
1191 } | |
1192 return $KeyValue; | |
1193 } | |
1194 | |
1195 # Generate key 12 value as 1/0 indicating its presence/absence or count of its | |
1196 # presence in a molecule. | |
1197 # | |
1198 # Key 12 description: GROUP IB,IIB (Cu...) | |
1199 # | |
1200 sub _Generate166KeySetKey12 { | |
1201 my($This) = @_; | |
1202 my($Atom, $KeyValue, $AtomicNumber, $GroupNumber); | |
1203 | |
1204 $KeyValue = 0; | |
1205 ATOM: for $Atom (@{$This->{Atoms}}) { | |
1206 $AtomicNumber = $Atom->GetAtomicNumber(); | |
1207 if ($AtomicNumber) { | |
1208 $GroupNumber = PeriodicTable::GetElementGroupNumber($AtomicNumber); | |
1209 if ($GroupNumber =~ /^(11|12)$/) { | |
1210 if ($This->{KeyBits}) { | |
1211 $KeyValue = 1; | |
1212 last ATOM; | |
1213 } | |
1214 $KeyValue++; | |
1215 } | |
1216 } | |
1217 } | |
1218 return $KeyValue; | |
1219 } | |
1220 | |
1221 # Generate key 13 value as 1/0 indicating its presence/absence or count of its | |
1222 # presence in a molecule. | |
1223 # | |
1224 # Key 13 description: ON(C)C | |
1225 # | |
1226 sub _Generate166KeySetKey13 { | |
1227 my($This) = @_; | |
1228 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
1229 | |
1230 $CentralAtomSymbol = 'N'; | |
1231 @NbrAtomSymbols = ('O', 'C', 'C'); | |
1232 @NbrBondSymbols = (undef, undef, undef); | |
1233 | |
1234 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
1235 } | |
1236 | |
1237 # Generate key 14 value as 1/0 indicating its presence/absence or count of its | |
1238 # presence in a molecule. | |
1239 # | |
1240 # Key 14 description: S-S | |
1241 # | |
1242 sub _Generate166KeySetKey14 { | |
1243 my($This) = @_; | |
1244 my($BondOrder) = 1; | |
1245 | |
1246 return $This->_DetectBondKeys('S', 'S', $BondOrder); | |
1247 } | |
1248 | |
1249 # Generate key 15 value as 1/0 indicating its presence/absence or count of its | |
1250 # presence in a molecule. | |
1251 # | |
1252 # Key 15 description: OC(O)O | |
1253 # | |
1254 sub _Generate166KeySetKey15 { | |
1255 my($This) = @_; | |
1256 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
1257 | |
1258 $CentralAtomSymbol = 'C'; | |
1259 @NbrAtomSymbols = ('O', 'O', 'O'); | |
1260 @NbrBondSymbols = (undef, undef, undef); | |
1261 | |
1262 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
1263 } | |
1264 | |
1265 # Generate key 16 value as 1/0 indicating its presence/absence or count of its | |
1266 # presence in a molecule. | |
1267 # | |
1268 # Key 16 description: QAA@1 | |
1269 # | |
1270 sub _Generate166KeySetKey16 { | |
1271 my($This) = @_; | |
1272 my($Atom, $KeyValue, $RingSize); | |
1273 | |
1274 $RingSize = 3; | |
1275 $KeyValue = 0; | |
1276 ATOM: for $Atom (@{$This->{Atoms}}) { | |
1277 if ($This->_IsHeteroAtom($Atom) && $Atom->IsInRingOfSize($RingSize)) { | |
1278 if ($This->{KeyBits}) { | |
1279 $KeyValue = 1; | |
1280 last ATOM; | |
1281 } | |
1282 $KeyValue++; | |
1283 } | |
1284 } | |
1285 return $KeyValue; | |
1286 } | |
1287 | |
1288 # Generate key 17 value as 1/0 indicating its presence/absence or count of its | |
1289 # presence in a molecule. | |
1290 # | |
1291 # Key 17 description: CTC | |
1292 # | |
1293 sub _Generate166KeySetKey17 { | |
1294 my($This) = @_; | |
1295 my($BondOrder) = 3; | |
1296 | |
1297 return $This->_DetectBondKeys('C', 'C', $BondOrder); | |
1298 } | |
1299 | |
1300 # Generate key 18 value as 1/0 indicating its presence/absence or count of its | |
1301 # presence in a molecule. | |
1302 # | |
1303 # Key 18 description: GROUP IIIA (B...) | |
1304 # | |
1305 sub _Generate166KeySetKey18 { | |
1306 my($This) = @_; | |
1307 my($Atom, $KeyValue, $AtomicNumber, $GroupNumber); | |
1308 | |
1309 $KeyValue = 0; | |
1310 ATOM: for $Atom (@{$This->{Atoms}}) { | |
1311 $AtomicNumber = $Atom->GetAtomicNumber(); | |
1312 if ($AtomicNumber) { | |
1313 $GroupNumber = PeriodicTable::GetElementGroupNumber($AtomicNumber); | |
1314 if ($GroupNumber =~ /^13$/) { | |
1315 if ($This->{KeyBits}) { | |
1316 $KeyValue = 1; | |
1317 last ATOM; | |
1318 } | |
1319 $KeyValue++; | |
1320 } | |
1321 } | |
1322 } | |
1323 return $KeyValue; | |
1324 } | |
1325 | |
1326 # Generate key 19 value as 1/0 indicating its presence/absence or count of its | |
1327 # presence in a molecule. | |
1328 # | |
1329 # Key 19 description: 7M RING | |
1330 # | |
1331 sub _Generate166KeySetKey19 { | |
1332 my($This) = @_; | |
1333 my($Molecule, $KeyValue, $RingSize, $NumOfRings); | |
1334 | |
1335 $RingSize = 7; | |
1336 $Molecule = $This->GetMolecule(); | |
1337 $NumOfRings = $Molecule->GetNumOfRingsWithSize($RingSize); | |
1338 | |
1339 $KeyValue = 0; | |
1340 if ($NumOfRings) { | |
1341 $KeyValue = ($This->{KeyBits}) ? 1 : $NumOfRings; | |
1342 } | |
1343 return $KeyValue; | |
1344 } | |
1345 | |
1346 # Generate key 20 value as 1/0 indicating its presence/absence or count of its | |
1347 # presence in a molecule. | |
1348 # | |
1349 # Key 20 description: SI | |
1350 # | |
1351 sub _Generate166KeySetKey20 { | |
1352 my($This) = @_; | |
1353 | |
1354 return $This->_DetectAtomKeys('Si'); | |
1355 } | |
1356 | |
1357 # Generate key 21 value as 1/0 indicating its presence/absence or count of its | |
1358 # presence in a molecule. | |
1359 # | |
1360 # Key 21 description: C=C(Q)Q | |
1361 # | |
1362 sub _Generate166KeySetKey21 { | |
1363 my($This) = @_; | |
1364 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
1365 | |
1366 $CentralAtomSymbol = 'C'; | |
1367 @NbrAtomSymbols = ('C', 'Q', 'Q'); | |
1368 @NbrBondSymbols = ('=', undef, undef); | |
1369 | |
1370 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
1371 } | |
1372 | |
1373 # Generate key 22 value as 1/0 indicating its presence/absence or count of its | |
1374 # presence in a molecule. | |
1375 # | |
1376 # Key 22 description: 3M RING | |
1377 # | |
1378 sub _Generate166KeySetKey22 { | |
1379 my($This) = @_; | |
1380 my($Molecule, $KeyValue, $RingSize, $NumOfRings); | |
1381 | |
1382 $RingSize = 3; | |
1383 $Molecule = $This->GetMolecule(); | |
1384 $NumOfRings = $Molecule->GetNumOfRingsWithSize($RingSize); | |
1385 | |
1386 if ($This->{KeyBits}) { | |
1387 $KeyValue = $NumOfRings ? 1 : 0; | |
1388 } | |
1389 else { | |
1390 $KeyValue = $NumOfRings; | |
1391 } | |
1392 return $KeyValue; | |
1393 } | |
1394 | |
1395 # Generate key 23 value as 1/0 indicating its presence/absence or count of its | |
1396 # presence in a molecule. | |
1397 # | |
1398 # Key 23 description: NC(O)O | |
1399 # | |
1400 sub _Generate166KeySetKey23 { | |
1401 my($This) = @_; | |
1402 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
1403 | |
1404 $CentralAtomSymbol = 'C'; | |
1405 @NbrAtomSymbols = ('N', 'O', 'O'); | |
1406 @NbrBondSymbols = (undef, undef, undef); | |
1407 | |
1408 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
1409 } | |
1410 | |
1411 # Generate key 24 value as 1/0 indicating its presence/absence or count of its | |
1412 # presence in a molecule. | |
1413 # | |
1414 # Key 24 description: N-O | |
1415 # | |
1416 sub _Generate166KeySetKey24 { | |
1417 my($This) = @_; | |
1418 my($BondOrder) = 1; | |
1419 | |
1420 return $This->_DetectBondKeys('N', 'O', $BondOrder); | |
1421 } | |
1422 | |
1423 # Generate key 25 value as 1/0 indicating its presence/absence or count of its | |
1424 # presence in a molecule. | |
1425 # | |
1426 # Key 25 description: NC(N)N | |
1427 # | |
1428 sub _Generate166KeySetKey25 { | |
1429 my($This) = @_; | |
1430 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
1431 | |
1432 $CentralAtomSymbol = 'C'; | |
1433 @NbrAtomSymbols = ('N', 'N', 'N'); | |
1434 @NbrBondSymbols = (undef, undef, undef); | |
1435 | |
1436 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
1437 } | |
1438 | |
1439 # Generate key 26 value as 1/0 indicating its presence/absence or count of its | |
1440 # presence in a molecule. | |
1441 # | |
1442 # Key 26 description: C$=C($A)$A | |
1443 # | |
1444 sub _Generate166KeySetKey26 { | |
1445 my($This) = @_; | |
1446 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
1447 | |
1448 $CentralAtomSymbol = 'C'; | |
1449 @NbrAtomSymbols = ('C', 'A', 'A'); | |
1450 @NbrBondSymbols = ('$=', '$', '$'); | |
1451 | |
1452 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
1453 } | |
1454 | |
1455 # Generate key 27 value as 1/0 indicating its presence/absence or count of its | |
1456 # presence in a molecule. | |
1457 # | |
1458 # Key 27 description: I | |
1459 # | |
1460 sub _Generate166KeySetKey27 { | |
1461 my($This) = @_; | |
1462 | |
1463 return $This->_DetectAtomKeys('I'); | |
1464 } | |
1465 | |
1466 # Generate key 28 value as 1/0 indicating its presence/absence or count of its | |
1467 # presence in a molecule. | |
1468 # | |
1469 # Key 28 description: QCH2Q | |
1470 # | |
1471 sub _Generate166KeySetKey28 { | |
1472 my($This) = @_; | |
1473 my($CentralAtomSymbol, $CentralAtomMinHydrogenCount, $MinKeyCount, @NbrAtomSymbols, @NbrBondSymbols); | |
1474 | |
1475 $CentralAtomSymbol = 'C'; | |
1476 @NbrAtomSymbols = ('Q', 'Q'); | |
1477 @NbrBondSymbols = (undef, undef); | |
1478 $MinKeyCount = undef; | |
1479 $CentralAtomMinHydrogenCount = 2; | |
1480 | |
1481 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols, $MinKeyCount, $CentralAtomMinHydrogenCount); | |
1482 } | |
1483 | |
1484 # Generate key 29 value as 1/0 indicating its presence/absence or count of its | |
1485 # presence in a molecule. | |
1486 # | |
1487 # Key 29 description: P | |
1488 # | |
1489 sub _Generate166KeySetKey29 { | |
1490 my($This) = @_; | |
1491 | |
1492 return $This->_DetectAtomKeys('P'); | |
1493 } | |
1494 | |
1495 # Generate key 30 value as 1/0 indicating its presence/absence or count of its | |
1496 # presence in a molecule. | |
1497 # | |
1498 # Key 30 description: CQ(C)(C)A | |
1499 # | |
1500 sub _Generate166KeySetKey30 { | |
1501 my($This) = @_; | |
1502 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
1503 | |
1504 $CentralAtomSymbol = 'Q'; | |
1505 @NbrAtomSymbols = ('C', 'C', 'C', 'A'); | |
1506 @NbrBondSymbols = (undef, undef, undef, undef); | |
1507 | |
1508 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
1509 } | |
1510 | |
1511 # Generate key 31 value as 1/0 indicating its presence/absence or count of its | |
1512 # presence in a molecule. | |
1513 # | |
1514 # Key 31 description: QX | |
1515 # | |
1516 sub _Generate166KeySetKey31 { | |
1517 my($This) = @_; | |
1518 | |
1519 return $This->_DetectBondKeys('Q', 'X'); | |
1520 } | |
1521 | |
1522 # Generate key 32 value as 1/0 indicating its presence/absence or count of its | |
1523 # presence in a molecule. | |
1524 # | |
1525 # Key 32 description: CSN | |
1526 # | |
1527 sub _Generate166KeySetKey32 { | |
1528 my($This) = @_; | |
1529 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
1530 | |
1531 $CentralAtomSymbol = 'S'; | |
1532 @NbrAtomSymbols = ('C', 'N'); | |
1533 @NbrBondSymbols = (undef, undef); | |
1534 | |
1535 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
1536 } | |
1537 | |
1538 # Generate key 33 value as 1/0 indicating its presence/absence or count of its | |
1539 # presence in a molecule. | |
1540 # | |
1541 # Key 33 description: NS | |
1542 # | |
1543 sub _Generate166KeySetKey33 { | |
1544 my($This) = @_; | |
1545 | |
1546 return $This->_DetectBondKeys('N', 'S'); | |
1547 } | |
1548 | |
1549 # Generate key 34 value as 1/0 indicating its presence/absence or count of its | |
1550 # presence in a molecule. | |
1551 # | |
1552 # Key 34 description: CH2=A | |
1553 # | |
1554 sub _Generate166KeySetKey34 { | |
1555 my($This) = @_; | |
1556 my($CentralAtomSymbol, $CentralAtomMinHydrogenCount, $MinKeyCount, @NbrAtomSymbols, @NbrBondSymbols); | |
1557 | |
1558 $CentralAtomSymbol = 'C'; | |
1559 @NbrAtomSymbols = ('A'); | |
1560 @NbrBondSymbols = ('='); | |
1561 $MinKeyCount = undef; | |
1562 $CentralAtomMinHydrogenCount = 2; | |
1563 | |
1564 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols, $MinKeyCount, $CentralAtomMinHydrogenCount); | |
1565 } | |
1566 | |
1567 # Generate key 35 value as 1/0 indicating its presence/absence or count of its | |
1568 # presence in a molecule. | |
1569 # | |
1570 # Key 35 description: GROUP IA (ALKALI METAL) | |
1571 # | |
1572 sub _Generate166KeySetKey35 { | |
1573 my($This) = @_; | |
1574 my($Atom, $KeyValue, $AtomicNumber, $GroupNumber); | |
1575 | |
1576 $KeyValue = 0; | |
1577 ATOM: for $Atom (@{$This->{Atoms}}) { | |
1578 $AtomicNumber = $Atom->GetAtomicNumber(); | |
1579 if ($AtomicNumber) { | |
1580 $GroupNumber = PeriodicTable::GetElementGroupNumber($AtomicNumber); | |
1581 if ($GroupNumber =~ /^1$/) { | |
1582 if ($This->{KeyBits}) { | |
1583 $KeyValue = 1; | |
1584 last ATOM; | |
1585 } | |
1586 $KeyValue++; | |
1587 } | |
1588 } | |
1589 } | |
1590 return $KeyValue; | |
1591 } | |
1592 | |
1593 # Generate key 36 value as 1/0 indicating its presence/absence or count of its | |
1594 # presence in a molecule. | |
1595 # | |
1596 # Key 36 description: S HETEROCYCLE | |
1597 # | |
1598 sub _Generate166KeySetKey36 { | |
1599 my($This) = @_; | |
1600 my($MinKeyCount, $IsInRing) = (1, 1); | |
1601 | |
1602 return $This->_DetectAtomKeys('S', $MinKeyCount, $IsInRing); | |
1603 } | |
1604 | |
1605 # Generate key 37 value as 1/0 indicating its presence/absence or count of its | |
1606 # presence in a molecule. | |
1607 # | |
1608 # Key 37 description: NC(O)N | |
1609 # | |
1610 sub _Generate166KeySetKey37 { | |
1611 my($This) = @_; | |
1612 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
1613 | |
1614 $CentralAtomSymbol = 'C'; | |
1615 @NbrAtomSymbols = ('N', 'O', 'N'); | |
1616 @NbrBondSymbols = (undef, undef, undef); | |
1617 | |
1618 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
1619 } | |
1620 | |
1621 # Generate key 38 value as 1/0 indicating its presence/absence or count of its | |
1622 # presence in a molecule. | |
1623 # | |
1624 # Key 38 description: NC(C)N | |
1625 # | |
1626 sub _Generate166KeySetKey38 { | |
1627 my($This) = @_; | |
1628 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
1629 | |
1630 $CentralAtomSymbol = 'C'; | |
1631 @NbrAtomSymbols = ('N', 'C', 'N'); | |
1632 @NbrBondSymbols = (undef, undef, undef); | |
1633 | |
1634 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
1635 } | |
1636 | |
1637 # Generate key 39 value as 1/0 indicating its presence/absence or count of its | |
1638 # presence in a molecule. | |
1639 # | |
1640 # Key 39 description: OS(O)O | |
1641 # | |
1642 sub _Generate166KeySetKey39 { | |
1643 my($This) = @_; | |
1644 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
1645 | |
1646 $CentralAtomSymbol = 'S'; | |
1647 @NbrAtomSymbols = ('O', 'O', 'O'); | |
1648 @NbrBondSymbols = (undef, undef, undef); | |
1649 | |
1650 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
1651 } | |
1652 | |
1653 # Generate key 40 value as 1/0 indicating its presence/absence or count of its | |
1654 # presence in a molecule. | |
1655 # | |
1656 # Key 40 description: S-O | |
1657 # | |
1658 sub _Generate166KeySetKey40 { | |
1659 my($This) = @_; | |
1660 my($BondOrder) = 1; | |
1661 | |
1662 return $This->_DetectBondKeys('S', 'O', $BondOrder); | |
1663 } | |
1664 | |
1665 # Generate key 41 value as 1/0 indicating its presence/absence or count of its | |
1666 # presence in a molecule. | |
1667 # | |
1668 # Key 41 description: CTN | |
1669 # | |
1670 sub _Generate166KeySetKey41 { | |
1671 my($This) = @_; | |
1672 my($BondOrder) = 3; | |
1673 | |
1674 return $This->_DetectBondKeys('C', 'N', $BondOrder); | |
1675 } | |
1676 | |
1677 # Generate key 42 value as 1/0 indicating its presence/absence or count of its | |
1678 # presence in a molecule. | |
1679 # | |
1680 # Key 42 description: F | |
1681 # | |
1682 sub _Generate166KeySetKey42 { | |
1683 my($This) = @_; | |
1684 | |
1685 return $This->_DetectAtomKeys('F'); | |
1686 } | |
1687 | |
1688 # Generate key 43 value as 1/0 indicating its presence/absence or count of its | |
1689 # presence in a molecule. | |
1690 # | |
1691 # Key 43 description: QHAQH | |
1692 # | |
1693 sub _Generate166KeySetKey43 { | |
1694 my($This) = @_; | |
1695 my($CentralAtomSymbol, $CentralAtomMinHydrogenCount, $MinKeyCount, @NbrAtomSymbols, @NbrBondSymbols, @NbrAtomMinHydrogenCount); | |
1696 | |
1697 $CentralAtomSymbol = 'A'; | |
1698 $CentralAtomMinHydrogenCount = undef; | |
1699 | |
1700 @NbrAtomSymbols = ('Q', 'Q'); | |
1701 @NbrBondSymbols = (undef, undef); | |
1702 @NbrAtomMinHydrogenCount = (1, 1); | |
1703 | |
1704 $MinKeyCount = undef; | |
1705 | |
1706 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols, $MinKeyCount, $CentralAtomMinHydrogenCount, \@NbrAtomMinHydrogenCount); | |
1707 } | |
1708 | |
1709 # Generate key 44 value as 1/0 indicating its presence/absence or count of its | |
1710 # presence in a molecule. | |
1711 # | |
1712 # Key 44 description: OTHER | |
1713 # | |
1714 sub _Generate166KeySetKey44 { | |
1715 my($This) = @_; | |
1716 | |
1717 return $This->_DetectAtomKeys('Z'); | |
1718 } | |
1719 | |
1720 # Generate key 45 value as 1/0 indicating its presence/absence or count of its | |
1721 # presence in a molecule. | |
1722 # | |
1723 # Key 45 description: C=CN | |
1724 # | |
1725 sub _Generate166KeySetKey45 { | |
1726 my($This) = @_; | |
1727 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
1728 | |
1729 $CentralAtomSymbol = 'C'; | |
1730 @NbrAtomSymbols = ('C', 'N'); | |
1731 @NbrBondSymbols = ('=', undef); | |
1732 | |
1733 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
1734 } | |
1735 | |
1736 # Generate key 46 value as 1/0 indicating its presence/absence or count of its | |
1737 # presence in a molecule. | |
1738 # | |
1739 # Key 46 description: BR | |
1740 # | |
1741 sub _Generate166KeySetKey46 { | |
1742 my($This) = @_; | |
1743 | |
1744 return $This->_DetectAtomKeys('Br'); | |
1745 } | |
1746 | |
1747 # Generate key 47 value as 1/0 indicating its presence/absence or count of its | |
1748 # presence in a molecule. | |
1749 # | |
1750 # Key 47 description: SAN | |
1751 # | |
1752 sub _Generate166KeySetKey47 { | |
1753 my($This) = @_; | |
1754 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
1755 | |
1756 $CentralAtomSymbol = 'A'; | |
1757 @NbrAtomSymbols = ('S', 'N'); | |
1758 @NbrBondSymbols = (undef, undef); | |
1759 | |
1760 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
1761 } | |
1762 | |
1763 # Generate key 48 value as 1/0 indicating its presence/absence or count of its | |
1764 # presence in a molecule. | |
1765 # | |
1766 # Key 48 description: OQ(O)O | |
1767 # | |
1768 sub _Generate166KeySetKey48 { | |
1769 my($This) = @_; | |
1770 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
1771 | |
1772 $CentralAtomSymbol = 'Q'; | |
1773 @NbrAtomSymbols = ('O', 'O', 'O'); | |
1774 @NbrBondSymbols = (undef, undef, undef); | |
1775 | |
1776 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
1777 } | |
1778 | |
1779 # Generate key 49 value as 1/0 indicating its presence/absence or count of its | |
1780 # presence in a molecule. | |
1781 # | |
1782 # Key 49 description: CHARGE | |
1783 # | |
1784 sub _Generate166KeySetKey49 { | |
1785 my($This) = @_; | |
1786 my($Molecule, $KeyValue); | |
1787 | |
1788 $Molecule = $This->GetMolecule(); | |
1789 $KeyValue = $Molecule->GetFormalCharge() ? 1 : 0; | |
1790 | |
1791 return $KeyValue; | |
1792 } | |
1793 | |
1794 # Generate key 50 value as 1/0 indicating its presence/absence or count of its | |
1795 # presence in a molecule. | |
1796 # | |
1797 # Key 50 description: C=C(C)C | |
1798 # | |
1799 sub _Generate166KeySetKey50 { | |
1800 my($This) = @_; | |
1801 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
1802 | |
1803 $CentralAtomSymbol = 'C'; | |
1804 @NbrAtomSymbols = ('C', 'C', 'C'); | |
1805 @NbrBondSymbols = ('=', undef, undef); | |
1806 | |
1807 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
1808 } | |
1809 | |
1810 # Generate key 51 value as 1/0 indicating its presence/absence or count of its | |
1811 # presence in a molecule. | |
1812 # | |
1813 # Key 51 description: CSO | |
1814 # | |
1815 sub _Generate166KeySetKey51 { | |
1816 my($This) = @_; | |
1817 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
1818 | |
1819 $CentralAtomSymbol = 'S'; | |
1820 @NbrAtomSymbols = ('C', 'O'); | |
1821 @NbrBondSymbols = (undef, undef); | |
1822 | |
1823 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
1824 } | |
1825 | |
1826 # Generate key 52 value as 1/0 indicating its presence/absence or count of its | |
1827 # presence in a molecule. | |
1828 # | |
1829 # Key 52 description: NN | |
1830 # | |
1831 sub _Generate166KeySetKey52 { | |
1832 my($This) = @_; | |
1833 | |
1834 return $This->_DetectBondKeys('N', 'N'); | |
1835 } | |
1836 | |
1837 # Generate key 53 value as 1/0 indicating its presence/absence or count of its | |
1838 # presence in a molecule. | |
1839 # | |
1840 # Key 53 description: QHAAAQH | |
1841 # | |
1842 sub _Generate166KeySetKey53 { | |
1843 my($This) = @_; | |
1844 my(@CentralAtomsSymbols, @CentralAtomsBondSymbols, @CentralAtomsMinHydrogenCount); | |
1845 | |
1846 @CentralAtomsSymbols = ('Q', 'A', 'A', 'A', 'Q'); | |
1847 @CentralAtomsBondSymbols = (undef, undef, undef, undef); | |
1848 @CentralAtomsMinHydrogenCount = (1, undef, undef, undef, 1); | |
1849 | |
1850 return $This->_DetectExtendedAtomNeighborhoodKeys(\@CentralAtomsSymbols, \@CentralAtomsBondSymbols, \@CentralAtomsMinHydrogenCount); | |
1851 } | |
1852 | |
1853 # Generate key 54 value as 1/0 indicating its presence/absence or count of its | |
1854 # presence in a molecule. | |
1855 # | |
1856 # Key 54 description: QHAAQH | |
1857 # | |
1858 sub _Generate166KeySetKey54 { | |
1859 my($This) = @_; | |
1860 my(@CentralAtomsSymbols, @CentralAtomsBondSymbols, @CentralAtomsMinHydrogenCount); | |
1861 | |
1862 @CentralAtomsSymbols = ('Q', 'A', 'A', 'Q'); | |
1863 @CentralAtomsBondSymbols = (undef, undef, undef); | |
1864 @CentralAtomsMinHydrogenCount = (1, undef, undef, 1); | |
1865 | |
1866 return $This->_DetectExtendedAtomNeighborhoodKeys(\@CentralAtomsSymbols, \@CentralAtomsBondSymbols, \@CentralAtomsMinHydrogenCount); | |
1867 } | |
1868 | |
1869 # Generate key 55 value as 1/0 indicating its presence/absence or count of its | |
1870 # presence in a molecule. | |
1871 # | |
1872 # Key 55 description: OSO | |
1873 # | |
1874 sub _Generate166KeySetKey55 { | |
1875 my($This) = @_; | |
1876 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
1877 | |
1878 $CentralAtomSymbol = 'S'; | |
1879 @NbrAtomSymbols = ('O', 'O'); | |
1880 @NbrBondSymbols = (undef, undef); | |
1881 | |
1882 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
1883 } | |
1884 | |
1885 # Generate key 56 value as 1/0 indicating its presence/absence or count of its | |
1886 # presence in a molecule. | |
1887 # | |
1888 # Key 56 description: ON(O)C | |
1889 # | |
1890 sub _Generate166KeySetKey56 { | |
1891 my($This) = @_; | |
1892 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
1893 | |
1894 $CentralAtomSymbol = 'N'; | |
1895 @NbrAtomSymbols = ('O', 'O', 'C'); | |
1896 @NbrBondSymbols = (undef, undef, undef); | |
1897 | |
1898 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
1899 } | |
1900 | |
1901 # Generate key 57 value as 1/0 indicating its presence/absence or count of its | |
1902 # presence in a molecule. | |
1903 # | |
1904 # Key 57 description: O HETEROCYCLE | |
1905 # | |
1906 sub _Generate166KeySetKey57 { | |
1907 my($This) = @_; | |
1908 my($MinKeyCount, $IsInRing) = (undef, 1); | |
1909 | |
1910 return $This->_DetectAtomKeys('O', $MinKeyCount, $IsInRing); | |
1911 } | |
1912 | |
1913 # Generate key 58 value as 1/0 indicating its presence/absence or count of its | |
1914 # presence in a molecule. | |
1915 # | |
1916 # Key 58 description: QSQ | |
1917 # | |
1918 sub _Generate166KeySetKey58 { | |
1919 my($This) = @_; | |
1920 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
1921 | |
1922 $CentralAtomSymbol = 'S'; | |
1923 @NbrAtomSymbols = ('Q', 'Q'); | |
1924 @NbrBondSymbols = (undef, undef); | |
1925 | |
1926 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
1927 } | |
1928 | |
1929 # Generate key 59 value as 1/0 indicating its presence/absence or count of its | |
1930 # presence in a molecule. | |
1931 # | |
1932 # Key 59 description: Snot%A%A | |
1933 # | |
1934 sub _Generate166KeySetKey59 { | |
1935 my($This) = @_; | |
1936 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
1937 | |
1938 $CentralAtomSymbol = 'A'; | |
1939 @NbrAtomSymbols = ('S', 'A'); | |
1940 @NbrBondSymbols = ('not%', '%'); | |
1941 | |
1942 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
1943 } | |
1944 | |
1945 # Generate key 60 value as 1/0 indicating its presence/absence or count of its | |
1946 # presence in a molecule. | |
1947 # | |
1948 # Key 60 description: S=O | |
1949 # | |
1950 sub _Generate166KeySetKey60 { | |
1951 my($This) = @_; | |
1952 my($BondOrder) = 2; | |
1953 | |
1954 return $This->_DetectBondKeys('S', 'O', $BondOrder); | |
1955 } | |
1956 | |
1957 # Generate key 61 value as 1/0 indicating its presence/absence or count of its | |
1958 # presence in a molecule. | |
1959 # | |
1960 # Key 61 description: AS(A)A | |
1961 # | |
1962 sub _Generate166KeySetKey61 { | |
1963 my($This) = @_; | |
1964 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
1965 | |
1966 $CentralAtomSymbol = 'S'; | |
1967 @NbrAtomSymbols = ('A', 'A', 'A'); | |
1968 @NbrBondSymbols = (undef, undef, undef); | |
1969 | |
1970 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
1971 } | |
1972 | |
1973 # Generate key 62 value as 1/0 indicating its presence/absence or count of its | |
1974 # presence in a molecule. | |
1975 # | |
1976 # Key 62 description: A$A!A$A | |
1977 # | |
1978 sub _Generate166KeySetKey62 { | |
1979 my($This) = @_; | |
1980 my($BondAtomSymbol1, $BondAtomSymbol2, $BondSymbol, @NbrAtomsSymbols, @NbrAtomsBondSymbols); | |
1981 | |
1982 ($BondAtomSymbol1, $BondAtomSymbol2) = ('A', 'A'); | |
1983 $BondSymbol = '!'; | |
1984 | |
1985 @NbrAtomsSymbols = (['A'], ['A']); | |
1986 @NbrAtomsBondSymbols = (['$'], ['$']); | |
1987 return $This->_DetectBondNeighborhoodKeys($BondAtomSymbol1, $BondAtomSymbol2, $BondSymbol, \@NbrAtomsSymbols, \@NbrAtomsBondSymbols); | |
1988 } | |
1989 | |
1990 # Generate key 63 value as 1/0 indicating its presence/absence or count of its | |
1991 # presence in a molecule. | |
1992 # | |
1993 # Key 63 description: N=O | |
1994 # | |
1995 sub _Generate166KeySetKey63 { | |
1996 my($This) = @_; | |
1997 my($BondOrder) = 2; | |
1998 | |
1999 return $This->_DetectBondKeys('N', 'O', $BondOrder); | |
2000 } | |
2001 | |
2002 # Generate key 64 value as 1/0 indicating its presence/absence or count of its | |
2003 # presence in a molecule. | |
2004 # | |
2005 # Key 64 description: A$A!S | |
2006 # | |
2007 sub _Generate166KeySetKey64 { | |
2008 my($This) = @_; | |
2009 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
2010 | |
2011 $CentralAtomSymbol = 'A'; | |
2012 @NbrAtomSymbols = ('A', 'S'); | |
2013 @NbrBondSymbols = ('$', '!'); | |
2014 | |
2015 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
2016 } | |
2017 | |
2018 # Generate key 65 value as 1/0 indicating its presence/absence or count of its | |
2019 # presence in a molecule. | |
2020 # | |
2021 # Key 65 description: C%N | |
2022 # | |
2023 sub _Generate166KeySetKey65 { | |
2024 my($This) = @_; | |
2025 my($BondSymbol) = '%'; | |
2026 | |
2027 return $This->_DetectBondKeys('C', 'N', $BondSymbol); | |
2028 } | |
2029 | |
2030 # Generate key 66 value as 1/0 indicating its presence/absence or count of its | |
2031 # presence in a molecule. | |
2032 # | |
2033 # Key 66 description: CC(C)(C)A | |
2034 # | |
2035 sub _Generate166KeySetKey66 { | |
2036 my($This) = @_; | |
2037 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
2038 | |
2039 $CentralAtomSymbol = 'C'; | |
2040 @NbrAtomSymbols = ('C', 'C', 'C', 'A'); | |
2041 @NbrBondSymbols = (undef, undef, undef, undef); | |
2042 | |
2043 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
2044 } | |
2045 | |
2046 # Generate key 67 value as 1/0 indicating its presence/absence or count of its | |
2047 # presence in a molecule. | |
2048 # | |
2049 # Key 67 description: QS | |
2050 # | |
2051 sub _Generate166KeySetKey67 { | |
2052 my($This) = @_; | |
2053 | |
2054 return $This->_DetectBondKeys('Q', 'S'); | |
2055 } | |
2056 | |
2057 # Generate key 68 value as 1/0 indicating its presence/absence or count of its | |
2058 # presence in a molecule. | |
2059 # | |
2060 # Key 68 description: QHQH (&...) | |
2061 # | |
2062 sub _Generate166KeySetKey68 { | |
2063 my($This) = @_; | |
2064 my($AtomSymbol1, $AtomSymbol2, $BondSymbol) = ('Q', 'Q', undef); | |
2065 my($MinKeyCount) = undef; | |
2066 my($Atom1MinHydrogenCount, $Atom2MinHydrogenCount) = (1, 1); | |
2067 | |
2068 return $This->_DetectBondKeys($AtomSymbol1, $AtomSymbol2, $BondSymbol, $MinKeyCount, $Atom1MinHydrogenCount, $Atom2MinHydrogenCount); | |
2069 } | |
2070 | |
2071 # Generate key 69 value as 1/0 indicating its presence/absence or count of its | |
2072 # presence in a molecule. | |
2073 # | |
2074 # Key 69 description: QQH | |
2075 # | |
2076 sub _Generate166KeySetKey69 { | |
2077 my($This) = @_; | |
2078 my($AtomSymbol1, $AtomSymbol2, $BondSymbol) = ('Q', 'Q', undef); | |
2079 my($MinKeyCount) = undef; | |
2080 my($Atom1MinHydrogenCount, $Atom2MinHydrogenCount) = (undef, 1); | |
2081 | |
2082 return $This->_DetectBondKeys($AtomSymbol1, $AtomSymbol2, $BondSymbol, $MinKeyCount, $Atom1MinHydrogenCount, $Atom2MinHydrogenCount); | |
2083 } | |
2084 | |
2085 # Generate key 70 value as 1/0 indicating its presence/absence or count of its | |
2086 # presence in a molecule. | |
2087 # | |
2088 # Key 70 description: QNQ | |
2089 # | |
2090 sub _Generate166KeySetKey70 { | |
2091 my($This) = @_; | |
2092 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
2093 | |
2094 $CentralAtomSymbol = 'N'; | |
2095 @NbrAtomSymbols = ('Q', 'Q'); | |
2096 @NbrBondSymbols = (undef, undef); | |
2097 | |
2098 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
2099 } | |
2100 | |
2101 # Generate key 71 value as 1/0 indicating its presence/absence or count of its | |
2102 # presence in a molecule. | |
2103 # | |
2104 # Key 71 description: NO | |
2105 # | |
2106 sub _Generate166KeySetKey71 { | |
2107 my($This) = @_; | |
2108 | |
2109 return $This->_DetectBondKeys('N', 'O'); | |
2110 } | |
2111 | |
2112 # Generate key 72 value as 1/0 indicating its presence/absence or count of its | |
2113 # presence in a molecule. | |
2114 # | |
2115 # Key 72 description: OAAO | |
2116 # | |
2117 sub _Generate166KeySetKey72 { | |
2118 my($This) = @_; | |
2119 my(@CentralAtomsSymbols, @CentralAtomsBondSymbols); | |
2120 | |
2121 @CentralAtomsSymbols = ('O', 'A', 'A', 'O'); | |
2122 @CentralAtomsBondSymbols = (undef, undef, undef); | |
2123 | |
2124 return $This->_DetectExtendedAtomNeighborhoodKeys(\@CentralAtomsSymbols, \@CentralAtomsBondSymbols); | |
2125 } | |
2126 | |
2127 # Generate key 73 value as 1/0 indicating its presence/absence or count of its | |
2128 # presence in a molecule. | |
2129 # | |
2130 # Key 73 description: S=A | |
2131 # | |
2132 sub _Generate166KeySetKey73 { | |
2133 my($This) = @_; | |
2134 my($BondOrder) = 2; | |
2135 | |
2136 return $This->_DetectBondKeys('S', 'A', $BondOrder); | |
2137 } | |
2138 | |
2139 # Generate key 74 value as 1/0 indicating its presence/absence or count of its | |
2140 # presence in a molecule. | |
2141 # | |
2142 # Key 74 description: CH3ACH3 | |
2143 # | |
2144 sub _Generate166KeySetKey74 { | |
2145 my($This) = @_; | |
2146 my($CentralAtomSymbol, $CentralAtomMinHydrogenCount, $MinKeyCount, @NbrAtomSymbols, @NbrBondSymbols, @NbrAtomMinHydrogenCount); | |
2147 | |
2148 $CentralAtomSymbol = 'A'; | |
2149 $CentralAtomMinHydrogenCount = undef; | |
2150 | |
2151 @NbrAtomSymbols = ('C', 'C'); | |
2152 @NbrBondSymbols = (undef, undef); | |
2153 @NbrAtomMinHydrogenCount = (3, 3); | |
2154 | |
2155 $MinKeyCount = undef; | |
2156 | |
2157 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols, $MinKeyCount, $CentralAtomMinHydrogenCount, \@NbrAtomMinHydrogenCount); | |
2158 } | |
2159 | |
2160 # Generate key 75 value as 1/0 indicating its presence/absence or count of its | |
2161 # presence in a molecule. | |
2162 # | |
2163 # Key 75 description: A!N$A | |
2164 # | |
2165 sub _Generate166KeySetKey75 { | |
2166 my($This) = @_; | |
2167 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
2168 | |
2169 $CentralAtomSymbol = 'N'; | |
2170 @NbrAtomSymbols = ('A', 'A'); | |
2171 @NbrBondSymbols = ('!', '$'); | |
2172 | |
2173 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
2174 } | |
2175 | |
2176 # Generate key 76 value as 1/0 indicating its presence/absence or count of its | |
2177 # presence in a molecule. | |
2178 # | |
2179 # Key 76 description: C=C(A)A | |
2180 # | |
2181 sub _Generate166KeySetKey76 { | |
2182 my($This) = @_; | |
2183 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
2184 | |
2185 $CentralAtomSymbol = 'C'; | |
2186 @NbrAtomSymbols = ('C', 'A', 'A'); | |
2187 @NbrBondSymbols = ('=', undef, undef); | |
2188 | |
2189 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
2190 } | |
2191 | |
2192 # Generate key 77 value as 1/0 indicating its presence/absence or count of its | |
2193 # presence in a molecule. | |
2194 # | |
2195 # Key 77 description: NAN | |
2196 # | |
2197 sub _Generate166KeySetKey77 { | |
2198 my($This) = @_; | |
2199 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
2200 | |
2201 $CentralAtomSymbol = 'A'; | |
2202 @NbrAtomSymbols = ('N', 'N'); | |
2203 @NbrBondSymbols = (undef, undef); | |
2204 | |
2205 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
2206 } | |
2207 | |
2208 # Generate key 78 value as 1/0 indicating its presence/absence or count of its | |
2209 # presence in a molecule. | |
2210 # | |
2211 # Key 78 description: C=N | |
2212 # | |
2213 sub _Generate166KeySetKey78 { | |
2214 my($This) = @_; | |
2215 my($BondOrder) = 2; | |
2216 | |
2217 return $This->_DetectBondKeys('C', 'N', $BondOrder); | |
2218 } | |
2219 | |
2220 # Generate key 79 value as 1/0 indicating its presence/absence or count of its | |
2221 # presence in a molecule. | |
2222 # | |
2223 # Key 79 description: NAAN | |
2224 # | |
2225 sub _Generate166KeySetKey79 { | |
2226 my($This) = @_; | |
2227 my(@CentralAtomsSymbols, @CentralAtomsBondSymbols); | |
2228 | |
2229 @CentralAtomsSymbols = ('N', 'A', 'A', 'N'); | |
2230 @CentralAtomsBondSymbols = (undef, undef, undef); | |
2231 | |
2232 return $This->_DetectExtendedAtomNeighborhoodKeys(\@CentralAtomsSymbols, \@CentralAtomsBondSymbols); | |
2233 } | |
2234 | |
2235 # Generate key 80 value as 1/0 indicating its presence/absence or count of its | |
2236 # presence in a molecule. | |
2237 # | |
2238 # Key 80 description: NAAAN | |
2239 # | |
2240 sub _Generate166KeySetKey80 { | |
2241 my($This) = @_; | |
2242 my(@CentralAtomsSymbols, @CentralAtomsBondSymbols); | |
2243 | |
2244 @CentralAtomsSymbols = ('N', 'A', 'A', 'A', 'N'); | |
2245 @CentralAtomsBondSymbols = (undef, undef, undef, undef); | |
2246 | |
2247 return $This->_DetectExtendedAtomNeighborhoodKeys(\@CentralAtomsSymbols, \@CentralAtomsBondSymbols); | |
2248 } | |
2249 | |
2250 # Generate key 81 value as 1/0 indicating its presence/absence or count of its | |
2251 # presence in a molecule. | |
2252 # | |
2253 # Key 81 description: SA(A)A | |
2254 # | |
2255 sub _Generate166KeySetKey81 { | |
2256 my($This) = @_; | |
2257 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
2258 | |
2259 $CentralAtomSymbol = 'A'; | |
2260 @NbrAtomSymbols = ('S', 'A', 'A'); | |
2261 @NbrBondSymbols = (undef, undef, undef); | |
2262 | |
2263 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
2264 } | |
2265 | |
2266 # Generate key 82 value as 1/0 indicating its presence/absence or count of its | |
2267 # presence in a molecule. | |
2268 # | |
2269 # Key 82 description: ACH2QH | |
2270 # | |
2271 sub _Generate166KeySetKey82 { | |
2272 my($This) = @_; | |
2273 my($CentralAtomSymbol, $CentralAtomMinHydrogenCount, $MinKeyCount, @NbrAtomSymbols, @NbrBondSymbols, @NbrAtomMinHydrogenCount); | |
2274 | |
2275 $CentralAtomSymbol = 'C'; | |
2276 $CentralAtomMinHydrogenCount = 2; | |
2277 | |
2278 @NbrAtomSymbols = ('A', 'Q'); | |
2279 @NbrBondSymbols = (undef, undef); | |
2280 @NbrAtomMinHydrogenCount = (undef, 1); | |
2281 | |
2282 $MinKeyCount = undef; | |
2283 | |
2284 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols, $MinKeyCount, $CentralAtomMinHydrogenCount, \@NbrAtomMinHydrogenCount); | |
2285 } | |
2286 | |
2287 # Generate key 83 value as 1/0 indicating its presence/absence or count of its | |
2288 # presence in a molecule. | |
2289 # | |
2290 # Key 83 description: QAAAA@1 | |
2291 # | |
2292 sub _Generate166KeySetKey83 { | |
2293 my($This) = @_; | |
2294 my($Atom, $KeyValue, $RingSize); | |
2295 | |
2296 $RingSize = 5; | |
2297 $KeyValue = 0; | |
2298 ATOM: for $Atom (@{$This->{Atoms}}) { | |
2299 if ($This->_IsHeteroAtom($Atom) && $Atom->IsInRingOfSize($RingSize)) { | |
2300 if ($This->{KeyBits}) { | |
2301 $KeyValue = 1; | |
2302 last ATOM; | |
2303 } | |
2304 $KeyValue++; | |
2305 } | |
2306 } | |
2307 return $KeyValue; | |
2308 } | |
2309 | |
2310 # Generate key 84 value as 1/0 indicating its presence/absence or count of its | |
2311 # presence in a molecule. | |
2312 # | |
2313 # Key 84 description: NH2 | |
2314 # | |
2315 sub _Generate166KeySetKey84 { | |
2316 my($This) = @_; | |
2317 my($MinKeyCount, $IsInRing, $MinHydrogenCount) = (undef, undef, 2); | |
2318 | |
2319 return $This->_DetectAtomKeys('N', $MinKeyCount, $IsInRing, $MinHydrogenCount); | |
2320 } | |
2321 | |
2322 # Generate key 85 value as 1/0 indicating its presence/absence or count of its | |
2323 # presence in a molecule. | |
2324 # | |
2325 # Key 85 description: CN(C)C | |
2326 # | |
2327 sub _Generate166KeySetKey85 { | |
2328 my($This) = @_; | |
2329 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
2330 | |
2331 $CentralAtomSymbol = 'N'; | |
2332 @NbrAtomSymbols = ('C', 'C', 'C'); | |
2333 @NbrBondSymbols = (undef, undef, undef); | |
2334 | |
2335 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
2336 } | |
2337 | |
2338 # Generate key 86 value as 1/0 indicating its presence/absence or count of its | |
2339 # presence in a molecule. | |
2340 # | |
2341 # Key 86 description: CH2QCH2 | |
2342 # | |
2343 sub _Generate166KeySetKey86 { | |
2344 my($This) = @_; | |
2345 my($CentralAtomSymbol, $CentralAtomMinHydrogenCount, $MinKeyCount, @NbrAtomSymbols, @NbrBondSymbols, @NbrAtomMinHydrogenCount); | |
2346 | |
2347 $CentralAtomSymbol = 'Q'; | |
2348 $CentralAtomMinHydrogenCount = undef; | |
2349 | |
2350 @NbrAtomSymbols = ('C', 'C'); | |
2351 @NbrBondSymbols = (undef, undef); | |
2352 @NbrAtomMinHydrogenCount = (2, 2); | |
2353 | |
2354 $MinKeyCount = undef; | |
2355 | |
2356 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols, $MinKeyCount, $CentralAtomMinHydrogenCount, \@NbrAtomMinHydrogenCount); | |
2357 } | |
2358 | |
2359 # Generate key 87 value as 1/0 indicating its presence/absence or count of its | |
2360 # presence in a molecule. | |
2361 # | |
2362 # Key 87 description: X!A$A | |
2363 # | |
2364 sub _Generate166KeySetKey87 { | |
2365 my($This) = @_; | |
2366 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
2367 | |
2368 $CentralAtomSymbol = 'A'; | |
2369 @NbrAtomSymbols = ('X', 'A'); | |
2370 @NbrBondSymbols = ('!', '$'); | |
2371 | |
2372 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
2373 } | |
2374 | |
2375 # Generate key 88 value as 1/0 indicating its presence/absence or count of its | |
2376 # presence in a molecule. | |
2377 # | |
2378 # Key 88 description: S | |
2379 # | |
2380 sub _Generate166KeySetKey88 { | |
2381 my($This) = @_; | |
2382 | |
2383 return $This->_DetectAtomKeys('S'); | |
2384 } | |
2385 | |
2386 # Generate key 89 value as 1/0 indicating its presence/absence or count of its | |
2387 # presence in a molecule. | |
2388 # | |
2389 # Key 89 description: OAAAO | |
2390 # | |
2391 sub _Generate166KeySetKey89 { | |
2392 my($This) = @_; | |
2393 my(@CentralAtomsSymbols, @CentralAtomsBondSymbols); | |
2394 | |
2395 @CentralAtomsSymbols = ('O', 'A', 'A', 'A', 'O'); | |
2396 @CentralAtomsBondSymbols = (undef, undef, undef, undef); | |
2397 | |
2398 return $This->_DetectExtendedAtomNeighborhoodKeys(\@CentralAtomsSymbols, \@CentralAtomsBondSymbols); | |
2399 } | |
2400 | |
2401 # Generate key 90 value as 1/0 indicating its presence/absence or count of its | |
2402 # presence in a molecule. | |
2403 # | |
2404 # Key 90 description: QHAACH2A | |
2405 # | |
2406 sub _Generate166KeySetKey90 { | |
2407 my($This) = @_; | |
2408 my(@CentralAtomsSymbols, @CentralAtomsBondSymbols, @CentralAtomsMinHydrogenCount); | |
2409 | |
2410 @CentralAtomsSymbols = ('Q', 'A', 'A', 'C', 'A'); | |
2411 @CentralAtomsBondSymbols = (undef, undef, undef, undef); | |
2412 @CentralAtomsMinHydrogenCount = (1, undef, undef, 2, undef); | |
2413 | |
2414 return $This->_DetectExtendedAtomNeighborhoodKeys(\@CentralAtomsSymbols, \@CentralAtomsBondSymbols, \@CentralAtomsMinHydrogenCount); | |
2415 } | |
2416 | |
2417 # Generate key 91 value as 1/0 indicating its presence/absence or count of its | |
2418 # presence in a molecule. | |
2419 # | |
2420 # Key 91 description: QHAAACH2A | |
2421 # | |
2422 sub _Generate166KeySetKey91 { | |
2423 my($This) = @_; | |
2424 my(@CentralAtomsSymbols, @CentralAtomsBondSymbols, @CentralAtomsMinHydrogenCount); | |
2425 | |
2426 @CentralAtomsSymbols = ('Q', 'A', 'A', 'A', 'C', 'A'); | |
2427 @CentralAtomsBondSymbols = (undef, undef, undef, undef, undef); | |
2428 @CentralAtomsMinHydrogenCount = (1, undef, undef, undef, 2, undef); | |
2429 | |
2430 return $This->_DetectExtendedAtomNeighborhoodKeys(\@CentralAtomsSymbols, \@CentralAtomsBondSymbols, \@CentralAtomsMinHydrogenCount); | |
2431 } | |
2432 | |
2433 # Generate key 92 value as 1/0 indicating its presence/absence or count of its | |
2434 # presence in a molecule. | |
2435 # | |
2436 # Key 92 description: OC(N)C | |
2437 # | |
2438 sub _Generate166KeySetKey92 { | |
2439 my($This) = @_; | |
2440 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
2441 | |
2442 $CentralAtomSymbol = 'C'; | |
2443 @NbrAtomSymbols = ('O', 'N', 'C'); | |
2444 @NbrBondSymbols = (undef, undef, undef); | |
2445 | |
2446 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
2447 } | |
2448 | |
2449 # Generate key 93 value as 1/0 indicating its presence/absence or count of its | |
2450 # presence in a molecule. | |
2451 # | |
2452 # Key 93 description: QCH3 | |
2453 # | |
2454 sub _Generate166KeySetKey93 { | |
2455 my($This) = @_; | |
2456 my($AtomSymbol1, $AtomSymbol2, $BondSymbol) = ('Q', 'C', undef); | |
2457 my($MinKeyCount) = undef; | |
2458 my($Atom1MinHydrogenCount, $Atom2MinHydrogenCount) = (undef, 3); | |
2459 | |
2460 return $This->_DetectBondKeys($AtomSymbol1, $AtomSymbol2, $BondSymbol, $MinKeyCount, $Atom1MinHydrogenCount, $Atom2MinHydrogenCount); | |
2461 } | |
2462 | |
2463 # Generate key 94 value as 1/0 indicating its presence/absence or count of its | |
2464 # presence in a molecule. | |
2465 # | |
2466 # Key 94 description: QN | |
2467 # | |
2468 sub _Generate166KeySetKey94 { | |
2469 my($This) = @_; | |
2470 | |
2471 return $This->_DetectBondKeys('Q', 'N'); | |
2472 } | |
2473 | |
2474 # Generate key 95 value as 1/0 indicating its presence/absence or count of its | |
2475 # presence in a molecule. | |
2476 # | |
2477 # Key 95 description: NAAO | |
2478 # | |
2479 sub _Generate166KeySetKey95 { | |
2480 my($This) = @_; | |
2481 my(@CentralAtomsSymbols, @CentralAtomsBondSymbols); | |
2482 | |
2483 @CentralAtomsSymbols = ('N', 'A', 'A', 'O'); | |
2484 @CentralAtomsBondSymbols = (undef, undef, undef); | |
2485 | |
2486 return $This->_DetectExtendedAtomNeighborhoodKeys(\@CentralAtomsSymbols, \@CentralAtomsBondSymbols); | |
2487 } | |
2488 | |
2489 # Generate key 96 value as 1/0 indicating its presence/absence or count of its | |
2490 # presence in a molecule. | |
2491 # | |
2492 # Key 96 description: 5M RING | |
2493 # | |
2494 sub _Generate166KeySetKey96 { | |
2495 my($This) = @_; | |
2496 my($Molecule, $KeyValue, $RingSize, $NumOfRings); | |
2497 | |
2498 $RingSize = 5; | |
2499 $Molecule = $This->GetMolecule(); | |
2500 $NumOfRings = $Molecule->GetNumOfRingsWithSize($RingSize); | |
2501 | |
2502 if ($This->{KeyBits}) { | |
2503 $KeyValue = $NumOfRings ? 1 : 0; | |
2504 } | |
2505 else { | |
2506 $KeyValue = $NumOfRings; | |
2507 } | |
2508 return $KeyValue; | |
2509 } | |
2510 | |
2511 # Generate key 97 value as 1/0 indicating its presence/absence or count of its | |
2512 # presence in a molecule. | |
2513 # | |
2514 # Key 97 description: NAAAO | |
2515 # | |
2516 sub _Generate166KeySetKey97 { | |
2517 my($This) = @_; | |
2518 my(@CentralAtomsSymbols, @CentralAtomsBondSymbols); | |
2519 | |
2520 @CentralAtomsSymbols = ('N', 'A', 'A', 'A', 'O'); | |
2521 @CentralAtomsBondSymbols = (undef, undef, undef, undef); | |
2522 | |
2523 return $This->_DetectExtendedAtomNeighborhoodKeys(\@CentralAtomsSymbols, \@CentralAtomsBondSymbols); | |
2524 } | |
2525 | |
2526 # Generate key 98 value as 1/0 indicating its presence/absence or count of its | |
2527 # presence in a molecule. | |
2528 # | |
2529 # Key 98 description: QAAAAA@1 | |
2530 # | |
2531 sub _Generate166KeySetKey98 { | |
2532 my($This) = @_; | |
2533 my($Atom, $KeyValue, $RingSize); | |
2534 | |
2535 $RingSize = 6; | |
2536 $KeyValue = 0; | |
2537 ATOM: for $Atom (@{$This->{Atoms}}) { | |
2538 if ($This->_IsHeteroAtom($Atom) && $Atom->IsInRingOfSize($RingSize)) { | |
2539 if ($This->{KeyBits}) { | |
2540 $KeyValue = 1; | |
2541 last ATOM; | |
2542 } | |
2543 $KeyValue++; | |
2544 } | |
2545 } | |
2546 return $KeyValue; | |
2547 } | |
2548 | |
2549 # Generate key 99 value as 1/0 indicating its presence/absence or count of its | |
2550 # presence in a molecule. | |
2551 # | |
2552 # Key 99 description: C=C | |
2553 # | |
2554 sub _Generate166KeySetKey99 { | |
2555 my($This) = @_; | |
2556 my($BondOrder) = 2; | |
2557 | |
2558 return $This->_DetectBondKeys('C', 'C', $BondOrder); | |
2559 } | |
2560 | |
2561 # Generate key 100 value as 1/0 indicating its presence/absence or count of its | |
2562 # presence in a molecule. | |
2563 # | |
2564 # Key 100 description: ACH2N | |
2565 # | |
2566 sub _Generate166KeySetKey100 { | |
2567 my($This) = @_; | |
2568 my($CentralAtomSymbol, $CentralAtomMinHydrogenCount, $MinKeyCount, @NbrAtomSymbols, @NbrBondSymbols); | |
2569 | |
2570 $CentralAtomSymbol = 'C'; | |
2571 $CentralAtomMinHydrogenCount = 2; | |
2572 | |
2573 @NbrAtomSymbols = ('A', 'N'); | |
2574 @NbrBondSymbols = (undef, undef); | |
2575 | |
2576 $MinKeyCount = undef; | |
2577 | |
2578 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols, $MinKeyCount, $CentralAtomMinHydrogenCount); | |
2579 } | |
2580 | |
2581 # Generate key 101 value as 1/0 indicating its presence/absence or count of its | |
2582 # presence in a molecule. | |
2583 # | |
2584 # Key 101 description: 8M RING | |
2585 # | |
2586 sub _Generate166KeySetKey101 { | |
2587 my($This) = @_; | |
2588 my($Molecule, $KeyValue, $RingSize, $NumOfRings); | |
2589 | |
2590 $RingSize = 8; | |
2591 $Molecule = $This->GetMolecule(); | |
2592 $NumOfRings = $Molecule->GetNumOfRingsWithSize($RingSize); | |
2593 | |
2594 if ($This->{KeyBits}) { | |
2595 $KeyValue = $NumOfRings ? 1 : 0; | |
2596 } | |
2597 else { | |
2598 $KeyValue = $NumOfRings; | |
2599 } | |
2600 return $KeyValue; | |
2601 } | |
2602 | |
2603 # Generate key 102 value as 1/0 indicating its presence/absence or count of its | |
2604 # presence in a molecule. | |
2605 # | |
2606 # Key 102 description: QO | |
2607 # | |
2608 sub _Generate166KeySetKey102 { | |
2609 my($This) = @_; | |
2610 | |
2611 return $This->_DetectBondKeys('Q', 'O'); | |
2612 } | |
2613 | |
2614 # Generate key 103 value as 1/0 indicating its presence/absence or count of its | |
2615 # presence in a molecule. | |
2616 # | |
2617 # Key 103 description: CL | |
2618 # | |
2619 sub _Generate166KeySetKey103 { | |
2620 my($This) = @_; | |
2621 | |
2622 return $This->_DetectAtomKeys('Cl'); | |
2623 } | |
2624 | |
2625 # Generate key 104 value as 1/0 indicating its presence/absence or count of its | |
2626 # presence in a molecule. | |
2627 # | |
2628 # Key 104 description: QHACH2A | |
2629 # | |
2630 sub _Generate166KeySetKey104 { | |
2631 my($This) = @_; | |
2632 my(@CentralAtomsSymbols, @CentralAtomsBondSymbols, @CentralAtomsMinHydrogenCount); | |
2633 | |
2634 @CentralAtomsSymbols = ('Q', 'A', 'C', 'A'); | |
2635 @CentralAtomsBondSymbols = (undef, undef, undef); | |
2636 @CentralAtomsMinHydrogenCount = (1, undef, 2, undef); | |
2637 | |
2638 return $This->_DetectExtendedAtomNeighborhoodKeys(\@CentralAtomsSymbols, \@CentralAtomsBondSymbols, \@CentralAtomsMinHydrogenCount); | |
2639 } | |
2640 | |
2641 # Generate key 105 value as 1/0 indicating its presence/absence or count of its | |
2642 # presence in a molecule. | |
2643 # | |
2644 # Key 105 description: A$A($A)$A | |
2645 # | |
2646 sub _Generate166KeySetKey105 { | |
2647 my($This) = @_; | |
2648 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
2649 | |
2650 $CentralAtomSymbol = 'A'; | |
2651 @NbrAtomSymbols = ('A', 'A', 'A'); | |
2652 @NbrBondSymbols = ('$', '$', '$'); | |
2653 | |
2654 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
2655 } | |
2656 | |
2657 # Generate key 106 value as 1/0 indicating its presence/absence or count of its | |
2658 # presence in a molecule. | |
2659 # | |
2660 # Key 106 description: QA(Q)Q | |
2661 # | |
2662 sub _Generate166KeySetKey106 { | |
2663 my($This) = @_; | |
2664 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
2665 | |
2666 $CentralAtomSymbol = 'A'; | |
2667 @NbrAtomSymbols = ('Q', 'Q', 'Q'); | |
2668 @NbrBondSymbols = (undef, undef, undef); | |
2669 | |
2670 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
2671 } | |
2672 | |
2673 # Generate key 107 value as 1/0 indicating its presence/absence or count of its | |
2674 # presence in a molecule. | |
2675 # | |
2676 # Key 107 description: XA(A)A | |
2677 # | |
2678 sub _Generate166KeySetKey107 { | |
2679 my($This) = @_; | |
2680 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
2681 | |
2682 $CentralAtomSymbol = 'A'; | |
2683 @NbrAtomSymbols = ('X', 'A', 'A'); | |
2684 @NbrBondSymbols = (undef, undef, undef); | |
2685 | |
2686 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
2687 } | |
2688 | |
2689 # Generate key 108 value as 1/0 indicating its presence/absence or count of its | |
2690 # presence in a molecule. | |
2691 # | |
2692 # Key 108 description: CH3AAACH2A | |
2693 # | |
2694 sub _Generate166KeySetKey108 { | |
2695 my($This) = @_; | |
2696 my(@CentralAtomsSymbols, @CentralAtomsBondSymbols, @CentralAtomsMinHydrogenCount); | |
2697 | |
2698 @CentralAtomsSymbols = ('C', 'A', 'A', 'A', 'C', 'A'); | |
2699 @CentralAtomsBondSymbols = (undef, undef, undef, undef, undef); | |
2700 @CentralAtomsMinHydrogenCount = (3, undef, undef, undef, 1, undef); | |
2701 | |
2702 return $This->_DetectExtendedAtomNeighborhoodKeys(\@CentralAtomsSymbols, \@CentralAtomsBondSymbols, \@CentralAtomsMinHydrogenCount); | |
2703 } | |
2704 | |
2705 # Generate key 109 value as 1/0 indicating its presence/absence or count of its | |
2706 # presence in a molecule. | |
2707 # | |
2708 # Key 109 description: ACH2O | |
2709 # | |
2710 sub _Generate166KeySetKey109 { | |
2711 my($This) = @_; | |
2712 my($CentralAtomSymbol, $CentralAtomMinHydrogenCount, $MinKeyCount, @NbrAtomSymbols, @NbrBondSymbols); | |
2713 | |
2714 $CentralAtomSymbol = 'C'; | |
2715 $CentralAtomMinHydrogenCount = 2; | |
2716 | |
2717 @NbrAtomSymbols = ('A', 'O'); | |
2718 @NbrBondSymbols = (undef, undef); | |
2719 | |
2720 $MinKeyCount = undef; | |
2721 | |
2722 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols, $MinKeyCount, $CentralAtomMinHydrogenCount); | |
2723 } | |
2724 | |
2725 # Generate key 110 value as 1/0 indicating its presence/absence or count of its | |
2726 # presence in a molecule. | |
2727 # | |
2728 # Key 110 description: NCO | |
2729 # | |
2730 sub _Generate166KeySetKey110 { | |
2731 my($This) = @_; | |
2732 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
2733 | |
2734 $CentralAtomSymbol = 'C'; | |
2735 @NbrAtomSymbols = ('N', 'O'); | |
2736 @NbrBondSymbols = (undef, undef); | |
2737 | |
2738 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
2739 } | |
2740 | |
2741 # Generate key 111 value as 1/0 indicating its presence/absence or count of its | |
2742 # presence in a molecule. | |
2743 # | |
2744 # Key 111 description: NACH2A | |
2745 # | |
2746 sub _Generate166KeySetKey111 { | |
2747 my($This) = @_; | |
2748 my(@CentralAtomsSymbols, @CentralAtomsBondSymbols, @CentralAtomsMinHydrogenCount); | |
2749 | |
2750 @CentralAtomsSymbols = ('N', 'A', 'C', 'A'); | |
2751 @CentralAtomsBondSymbols = (undef, undef, undef); | |
2752 @CentralAtomsMinHydrogenCount = (undef, undef, 2, undef); | |
2753 | |
2754 return $This->_DetectExtendedAtomNeighborhoodKeys(\@CentralAtomsSymbols, \@CentralAtomsBondSymbols, \@CentralAtomsMinHydrogenCount); | |
2755 } | |
2756 | |
2757 # Generate key 112 value as 1/0 indicating its presence/absence or count of its | |
2758 # presence in a molecule. | |
2759 # | |
2760 # Key 112 description: AA(A)(A)A | |
2761 # | |
2762 sub _Generate166KeySetKey112 { | |
2763 my($This) = @_; | |
2764 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
2765 | |
2766 $CentralAtomSymbol = 'A'; | |
2767 @NbrAtomSymbols = ('A', 'A', 'A', 'A'); | |
2768 @NbrBondSymbols = (undef, undef, undef, undef); | |
2769 | |
2770 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
2771 } | |
2772 | |
2773 # Generate key 113 value as 1/0 indicating its presence/absence or count of its | |
2774 # presence in a molecule. | |
2775 # | |
2776 # Key 113 description: Onot%A%A | |
2777 # | |
2778 sub _Generate166KeySetKey113 { | |
2779 my($This) = @_; | |
2780 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
2781 | |
2782 $CentralAtomSymbol = 'A'; | |
2783 @NbrAtomSymbols = ('O', 'A'); | |
2784 @NbrBondSymbols = ('not%', '%'); | |
2785 | |
2786 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
2787 } | |
2788 | |
2789 # Generate key 114 value as 1/0 indicating its presence/absence or count of its | |
2790 # presence in a molecule. | |
2791 # | |
2792 # Key 114 description: CH3CH2A | |
2793 # | |
2794 sub _Generate166KeySetKey114 { | |
2795 my($This) = @_; | |
2796 my($CentralAtomSymbol, $CentralAtomMinHydrogenCount, $MinKeyCount, @NbrAtomSymbols, @NbrBondSymbols, @NbrAtomMinHydrogenCount); | |
2797 | |
2798 $CentralAtomSymbol = 'C'; | |
2799 $CentralAtomMinHydrogenCount = 2; | |
2800 | |
2801 @NbrAtomSymbols = ('C', 'A'); | |
2802 @NbrBondSymbols = (undef, undef); | |
2803 @NbrAtomMinHydrogenCount = (3, undef); | |
2804 | |
2805 $MinKeyCount = undef; | |
2806 | |
2807 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols, $MinKeyCount, $CentralAtomMinHydrogenCount, \@NbrAtomMinHydrogenCount); | |
2808 } | |
2809 | |
2810 # Generate key 115 value as 1/0 indicating its presence/absence or count of its | |
2811 # presence in a molecule. | |
2812 # | |
2813 # Key 115 description: CH3ACH2A | |
2814 # | |
2815 sub _Generate166KeySetKey115 { | |
2816 my($This) = @_; | |
2817 my(@CentralAtomsSymbols, @CentralAtomsBondSymbols, @CentralAtomsMinHydrogenCount); | |
2818 | |
2819 @CentralAtomsSymbols = ('C', 'A', 'C', 'A'); | |
2820 @CentralAtomsBondSymbols = (undef, undef, undef); | |
2821 @CentralAtomsMinHydrogenCount = (3, undef, 2, undef); | |
2822 | |
2823 return $This->_DetectExtendedAtomNeighborhoodKeys(\@CentralAtomsSymbols, \@CentralAtomsBondSymbols, \@CentralAtomsMinHydrogenCount); | |
2824 } | |
2825 | |
2826 # Generate key 116 value as 1/0 indicating its presence/absence or count of its | |
2827 # presence in a molecule. | |
2828 # | |
2829 # Key 116 description: CH3AACH2A | |
2830 # | |
2831 sub _Generate166KeySetKey116 { | |
2832 my($This) = @_; | |
2833 my(@CentralAtomsSymbols, @CentralAtomsBondSymbols, @CentralAtomsMinHydrogenCount); | |
2834 | |
2835 @CentralAtomsSymbols = ('C', 'A', 'A', 'C', 'A'); | |
2836 @CentralAtomsBondSymbols = (undef, undef, undef, undef); | |
2837 @CentralAtomsMinHydrogenCount = (3, undef, undef, 2, undef); | |
2838 | |
2839 return $This->_DetectExtendedAtomNeighborhoodKeys(\@CentralAtomsSymbols, \@CentralAtomsBondSymbols, \@CentralAtomsMinHydrogenCount); | |
2840 } | |
2841 | |
2842 # Generate key 117 value as 1/0 indicating its presence/absence or count of its | |
2843 # presence in a molecule. | |
2844 # | |
2845 # Key 117 description: NAO | |
2846 # | |
2847 sub _Generate166KeySetKey117 { | |
2848 my($This) = @_; | |
2849 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
2850 | |
2851 $CentralAtomSymbol = 'A'; | |
2852 @NbrAtomSymbols = ('N', 'O'); | |
2853 @NbrBondSymbols = (undef, undef); | |
2854 | |
2855 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
2856 } | |
2857 | |
2858 # Generate key 118 value as 1/0 indicating its presence/absence or count of its | |
2859 # presence in a molecule. | |
2860 # | |
2861 # Key 118 description: ACH2CH2A > 1 | |
2862 # | |
2863 sub _Generate166KeySetKey118 { | |
2864 my($This) = @_; | |
2865 my($MinKeyCount, @CentralAtomsSymbols, @CentralAtomsBondSymbols, @CentralAtomsMinHydrogenCount); | |
2866 | |
2867 $MinKeyCount = 2; | |
2868 @CentralAtomsSymbols = ('A', 'C', 'C', 'A'); | |
2869 @CentralAtomsBondSymbols = (undef, undef, undef); | |
2870 @CentralAtomsMinHydrogenCount = (undef, 2, 2, undef); | |
2871 | |
2872 return $This->_DetectExtendedAtomNeighborhoodKeys(\@CentralAtomsSymbols, \@CentralAtomsBondSymbols, \@CentralAtomsMinHydrogenCount, $MinKeyCount); | |
2873 } | |
2874 | |
2875 # Generate key 119 value as 1/0 indicating its presence/absence or count of its | |
2876 # presence in a molecule. | |
2877 # | |
2878 # Key 119 description: N=A | |
2879 # | |
2880 sub _Generate166KeySetKey119 { | |
2881 my($This) = @_; | |
2882 my($BondOrder) = 2; | |
2883 | |
2884 return $This->_DetectBondKeys('N', 'A', $BondOrder); | |
2885 } | |
2886 | |
2887 # Generate key 120 value as 1/0 indicating its presence/absence or count of its | |
2888 # presence in a molecule. | |
2889 # | |
2890 # Key 120 description: HETEROCYCLIC ATOM > 1 (&...) | |
2891 # | |
2892 sub _Generate166KeySetKey120 { | |
2893 my($This) = @_; | |
2894 my($MinKeyCount, $IsInRing) = (2, 1); | |
2895 | |
2896 return $This->_DetectAtomKeys('Q', $MinKeyCount, $IsInRing); | |
2897 } | |
2898 | |
2899 # Generate key 121 value as 1/0 indicating its presence/absence or count of its | |
2900 # presence in a molecule. | |
2901 # | |
2902 # Key 121 description: N HETEROCYCLE | |
2903 # | |
2904 sub _Generate166KeySetKey121 { | |
2905 my($This) = @_; | |
2906 my($MinKeyCount, $IsInRing) = (undef, 1); | |
2907 | |
2908 return $This->_DetectAtomKeys('N', $MinKeyCount, $IsInRing); | |
2909 } | |
2910 | |
2911 # Generate key 122 value as 1/0 indicating its presence/absence or count of its | |
2912 # presence in a molecule. | |
2913 # | |
2914 # Key 122 description: AN(A)A | |
2915 # | |
2916 sub _Generate166KeySetKey122 { | |
2917 my($This) = @_; | |
2918 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
2919 | |
2920 $CentralAtomSymbol = 'N'; | |
2921 @NbrAtomSymbols = ('A', 'A', 'A'); | |
2922 @NbrBondSymbols = (undef, undef, undef); | |
2923 | |
2924 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
2925 } | |
2926 | |
2927 # Generate key 123 value as 1/0 indicating its presence/absence or count of its | |
2928 # presence in a molecule. | |
2929 # | |
2930 # Key 123 description: OCO | |
2931 # | |
2932 sub _Generate166KeySetKey123 { | |
2933 my($This) = @_; | |
2934 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
2935 | |
2936 $CentralAtomSymbol = 'C'; | |
2937 @NbrAtomSymbols = ('O', 'O'); | |
2938 @NbrBondSymbols = (undef, undef); | |
2939 | |
2940 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
2941 } | |
2942 | |
2943 # Generate key 124 value as 1/0 indicating its presence/absence or count of its | |
2944 # presence in a molecule. | |
2945 # | |
2946 # Key 124 description: QQ | |
2947 # | |
2948 sub _Generate166KeySetKey124 { | |
2949 my($This) = @_; | |
2950 | |
2951 return $This->_DetectBondKeys('Q', 'Q'); | |
2952 } | |
2953 | |
2954 # Generate key 125 value as 1/0 indicating its presence/absence or count of its | |
2955 # presence in a molecule. | |
2956 # | |
2957 # Key 125 description: AROMATIC RING > 1 | |
2958 # | |
2959 sub _Generate166KeySetKey125 { | |
2960 my($This) = @_; | |
2961 my($Molecule, $NumOfAromaticRings, $KeyValue); | |
2962 | |
2963 $Molecule = $This->GetMolecule(); | |
2964 $NumOfAromaticRings = $Molecule->GetNumOfAromaticRings(); | |
2965 | |
2966 if ($This->{KeyBits}) { | |
2967 $KeyValue = ($NumOfAromaticRings > 1) ? 1 : 0; | |
2968 } | |
2969 else { | |
2970 $KeyValue = $NumOfAromaticRings; | |
2971 } | |
2972 return $KeyValue; | |
2973 } | |
2974 | |
2975 # Generate key 126 value as 1/0 indicating its presence/absence or count of its | |
2976 # presence in a molecule. | |
2977 # | |
2978 # Key 126 description: A!O!A | |
2979 # | |
2980 sub _Generate166KeySetKey126 { | |
2981 my($This) = @_; | |
2982 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
2983 | |
2984 $CentralAtomSymbol = 'O'; | |
2985 @NbrAtomSymbols = ('A', 'A'); | |
2986 @NbrBondSymbols = ('!', '!'); | |
2987 | |
2988 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
2989 } | |
2990 | |
2991 # Generate key 127 value as 1/0 indicating its presence/absence or count of its | |
2992 # presence in a molecule. | |
2993 # | |
2994 # Key 127 description: A$A!O > 1 (&...) | |
2995 # | |
2996 sub _Generate166KeySetKey127 { | |
2997 my($This) = @_; | |
2998 my($CentralAtomSymbol, $MinKeyCount, @NbrAtomSymbols, @NbrBondSymbols); | |
2999 | |
3000 $CentralAtomSymbol = 'A'; | |
3001 @NbrAtomSymbols = ('A', 'O'); | |
3002 @NbrBondSymbols = ('$', '!'); | |
3003 $MinKeyCount = 2; | |
3004 | |
3005 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols, $MinKeyCount); | |
3006 } | |
3007 | |
3008 # Generate key 128 value as 1/0 indicating its presence/absence or count of its | |
3009 # presence in a molecule. | |
3010 # | |
3011 # Key 128 description: ACH2AAACH2A | |
3012 # | |
3013 sub _Generate166KeySetKey128 { | |
3014 my($This) = @_; | |
3015 my(@CentralAtomsSymbols, @CentralAtomsBondSymbols, @CentralAtomsMinHydrogenCount); | |
3016 | |
3017 @CentralAtomsSymbols = ('A', 'C', 'A', 'A', 'A', 'C', 'A'); | |
3018 @CentralAtomsBondSymbols = (undef, undef, undef, undef, undef, undef); | |
3019 @CentralAtomsMinHydrogenCount = (undef, 2, undef, undef, undef, 2, undef); | |
3020 | |
3021 return $This->_DetectExtendedAtomNeighborhoodKeys(\@CentralAtomsSymbols, \@CentralAtomsBondSymbols, \@CentralAtomsMinHydrogenCount); | |
3022 } | |
3023 | |
3024 # Generate key 129 value as 1/0 indicating its presence/absence or count of its | |
3025 # presence in a molecule. | |
3026 # | |
3027 # Key 129 description: ACH2AACH2A | |
3028 # | |
3029 sub _Generate166KeySetKey129 { | |
3030 my($This) = @_; | |
3031 my(@CentralAtomsSymbols, @CentralAtomsBondSymbols, @CentralAtomsMinHydrogenCount); | |
3032 | |
3033 @CentralAtomsSymbols = ('A', 'C', 'A', 'A', 'C', 'A'); | |
3034 @CentralAtomsBondSymbols = (undef, undef, undef, undef, undef); | |
3035 @CentralAtomsMinHydrogenCount = (undef, 2, undef, undef, 2, undef); | |
3036 | |
3037 return $This->_DetectExtendedAtomNeighborhoodKeys(\@CentralAtomsSymbols, \@CentralAtomsBondSymbols, \@CentralAtomsMinHydrogenCount); | |
3038 } | |
3039 | |
3040 # Generate key 130 value as 1/0 indicating its presence/absence or count of its | |
3041 # presence in a molecule. | |
3042 # | |
3043 # Key 130 description: QQ > 1 (&...) | |
3044 # | |
3045 sub _Generate166KeySetKey130 { | |
3046 my($This) = @_; | |
3047 my($BondOrder, $MinKeyCount) = (undef, 2); | |
3048 | |
3049 return $This->_DetectBondKeys('Q', 'Q', $BondOrder, $MinKeyCount); | |
3050 } | |
3051 | |
3052 # Generate key 131 value as 1/0 indicating its presence/absence or count of its | |
3053 # presence in a molecule. | |
3054 # | |
3055 # Key 131 description: QH > 1 | |
3056 # | |
3057 sub _Generate166KeySetKey131 { | |
3058 my($This) = @_; | |
3059 my($MinKeyCount, $IsInRing, $MinHydrogenCount) = (2, undef, 1); | |
3060 | |
3061 return $This->_DetectAtomKeys('Q', $MinKeyCount, $IsInRing, $MinHydrogenCount); | |
3062 } | |
3063 | |
3064 # Generate key 132 value as 1/0 indicating its presence/absence or count of its | |
3065 # presence in a molecule. | |
3066 # | |
3067 # Key 132 description: OACH2A | |
3068 # | |
3069 sub _Generate166KeySetKey132 { | |
3070 my($This) = @_; | |
3071 my(@CentralAtomsSymbols, @CentralAtomsBondSymbols, @CentralAtomsMinHydrogenCount); | |
3072 | |
3073 @CentralAtomsSymbols = ('O', 'A', 'C', 'A'); | |
3074 @CentralAtomsBondSymbols = (undef, undef, undef); | |
3075 @CentralAtomsMinHydrogenCount = (undef, undef, 2, undef); | |
3076 | |
3077 return $This->_DetectExtendedAtomNeighborhoodKeys(\@CentralAtomsSymbols, \@CentralAtomsBondSymbols, \@CentralAtomsMinHydrogenCount); | |
3078 } | |
3079 | |
3080 # Generate key 133 value as 1/0 indicating its presence/absence or count of its | |
3081 # presence in a molecule. | |
3082 # | |
3083 # Key 133 description: A$A!N | |
3084 # | |
3085 sub _Generate166KeySetKey133 { | |
3086 my($This) = @_; | |
3087 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
3088 | |
3089 $CentralAtomSymbol = 'A'; | |
3090 @NbrAtomSymbols = ('A', 'N'); | |
3091 @NbrBondSymbols = ('$', '!'); | |
3092 | |
3093 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
3094 } | |
3095 | |
3096 # Generate key 134 value as 1/0 indicating its presence/absence or count of its | |
3097 # presence in a molecule. | |
3098 # | |
3099 # Key 134 description: X (HALOGEN) | |
3100 # | |
3101 sub _Generate166KeySetKey134 { | |
3102 my($This) = @_; | |
3103 | |
3104 return $This->_DetectAtomKeys('X'); | |
3105 } | |
3106 | |
3107 # Generate key 135 value as 1/0 indicating its presence/absence or count of its | |
3108 # presence in a molecule. | |
3109 # | |
3110 # Key 135 description: Nnot%A%A | |
3111 # | |
3112 sub _Generate166KeySetKey135 { | |
3113 my($This) = @_; | |
3114 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
3115 | |
3116 $CentralAtomSymbol = 'A'; | |
3117 @NbrAtomSymbols = ('N', 'A'); | |
3118 @NbrBondSymbols = ('not%', '%'); | |
3119 | |
3120 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
3121 } | |
3122 | |
3123 # Generate key 136 value as 1/0 indicating its presence/absence or count of its | |
3124 # presence in a molecule. | |
3125 # | |
3126 # Key 136 description: O=A > 1 | |
3127 # | |
3128 sub _Generate166KeySetKey136 { | |
3129 my($This) = @_; | |
3130 my($BondOrder, $MinKeyCount) = (2, 2); | |
3131 | |
3132 return $This->_DetectBondKeys('O', 'A', $BondOrder, $MinKeyCount); | |
3133 } | |
3134 | |
3135 # Generate key 137 value as 1/0 indicating its presence/absence or count of its | |
3136 # presence in a molecule. | |
3137 # | |
3138 # Key 137 description: HETEROCYCLE | |
3139 # | |
3140 sub _Generate166KeySetKey137 { | |
3141 my($This) = @_; | |
3142 my($MinKeyCount, $IsInRing) = (1, 1); | |
3143 | |
3144 return $This->_DetectAtomKeys('Q', $MinKeyCount, $IsInRing); | |
3145 } | |
3146 | |
3147 # Generate key 138 value as 1/0 indicating its presence/absence or count of its | |
3148 # presence in a molecule. | |
3149 # | |
3150 # Key 138 description: QCH2A > 1 (&...) | |
3151 # | |
3152 sub _Generate166KeySetKey138 { | |
3153 my($This) = @_; | |
3154 my($CentralAtomSymbol, $CentralAtomMinHydrogenCount, $MinKeyCount, @NbrAtomSymbols, @NbrBondSymbols); | |
3155 | |
3156 $CentralAtomSymbol = 'C'; | |
3157 @NbrAtomSymbols = ('Q', 'A'); | |
3158 @NbrBondSymbols = (undef, undef); | |
3159 $MinKeyCount = 2; | |
3160 $CentralAtomMinHydrogenCount = 2; | |
3161 | |
3162 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols, $MinKeyCount, $CentralAtomMinHydrogenCount); | |
3163 } | |
3164 | |
3165 # Generate key 139 value as 1/0 indicating its presence/absence or count of its | |
3166 # presence in a molecule. | |
3167 # | |
3168 # Key 139 description: OH | |
3169 # | |
3170 sub _Generate166KeySetKey139 { | |
3171 my($This) = @_; | |
3172 my($MinKeyCount, $IsInRing, $MinHydrogenCount) = (undef, undef, 1); | |
3173 | |
3174 return $This->_DetectAtomKeys('O', $MinKeyCount, $IsInRing, $MinHydrogenCount); | |
3175 } | |
3176 | |
3177 # Generate key 140 value as 1/0 indicating its presence/absence or count of its | |
3178 # presence in a molecule. | |
3179 # | |
3180 # Key 140 description: O > 3 (&...) | |
3181 # | |
3182 sub _Generate166KeySetKey140 { | |
3183 my($This) = @_; | |
3184 my($MinKeyCount) = 4; | |
3185 | |
3186 return $This->_DetectAtomKeys('O', $MinKeyCount); | |
3187 } | |
3188 | |
3189 # Generate key 141 value as 1/0 indicating its presence/absence or count of its | |
3190 # presence in a molecule. | |
3191 # | |
3192 # Key 141 description: CH3 > 2 (&...) | |
3193 # | |
3194 sub _Generate166KeySetKey141 { | |
3195 my($This) = @_; | |
3196 my($MinKeyCount, $IsInRing, $MinHydrogenCount) = (3, undef, 3); | |
3197 | |
3198 return $This->_DetectAtomKeys('C', $MinKeyCount, $IsInRing, $MinHydrogenCount); | |
3199 } | |
3200 | |
3201 # Generate key 142 value as 1/0 indicating its presence/absence or count of its | |
3202 # presence in a molecule. | |
3203 # | |
3204 # Key 142 description: N > 1 | |
3205 # | |
3206 sub _Generate166KeySetKey142 { | |
3207 my($This) = @_; | |
3208 my($MinKeyCount) = 2; | |
3209 | |
3210 return $This->_DetectAtomKeys('N', $MinKeyCount); | |
3211 } | |
3212 | |
3213 # Generate key 143 value as 1/0 indicating its presence/absence or count of its | |
3214 # presence in a molecule. | |
3215 # | |
3216 # Key 143 description: A$A!O | |
3217 # | |
3218 sub _Generate166KeySetKey143 { | |
3219 my($This) = @_; | |
3220 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
3221 | |
3222 $CentralAtomSymbol = 'A'; | |
3223 @NbrAtomSymbols = ('A', 'O'); | |
3224 @NbrBondSymbols = ('$', '!'); | |
3225 | |
3226 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
3227 } | |
3228 | |
3229 # Generate key 144 value as 1/0 indicating its presence/absence or count of its | |
3230 # presence in a molecule. | |
3231 # | |
3232 # Key 144 description: Anot%A%Anot%A | |
3233 # | |
3234 sub _Generate166KeySetKey144 { | |
3235 my($This) = @_; | |
3236 my($BondAtomSymbol1, $BondAtomSymbol2, $BondSymbol, @NbrAtomsSymbols, @NbrAtomsBondSymbols); | |
3237 | |
3238 ($BondAtomSymbol1, $BondAtomSymbol2) = ('A', 'A'); | |
3239 $BondSymbol = '%'; | |
3240 | |
3241 @NbrAtomsSymbols = (['A'], ['A']); | |
3242 @NbrAtomsBondSymbols = (['not%'], ['not%']); | |
3243 return $This->_DetectBondNeighborhoodKeys($BondAtomSymbol1, $BondAtomSymbol2, $BondSymbol, \@NbrAtomsSymbols, \@NbrAtomsBondSymbols); | |
3244 } | |
3245 | |
3246 # Generate key 145 value as 1/0 indicating its presence/absence or count of its | |
3247 # presence in a molecule. | |
3248 # | |
3249 # Key 145 description: 6M RING > 1 | |
3250 # | |
3251 sub _Generate166KeySetKey145 { | |
3252 my($This) = @_; | |
3253 my($Molecule, $KeyValue, $RingSize, $NumOfRings); | |
3254 | |
3255 $RingSize = 6; | |
3256 $Molecule = $This->GetMolecule(); | |
3257 $NumOfRings = $Molecule->GetNumOfRingsWithSize($RingSize); | |
3258 | |
3259 if ($This->{KeyBits}) { | |
3260 $KeyValue = ($NumOfRings > 1) ? 1 : 0; | |
3261 } | |
3262 else { | |
3263 $KeyValue = $NumOfRings; | |
3264 } | |
3265 return $KeyValue; | |
3266 } | |
3267 | |
3268 # Generate key 146 value as 1/0 indicating its presence/absence or count of its | |
3269 # presence in a molecule. | |
3270 # | |
3271 # Key 146 description: O > 2 | |
3272 # | |
3273 sub _Generate166KeySetKey146 { | |
3274 my($This) = @_; | |
3275 my($MinKeyCount) = 3; | |
3276 | |
3277 return $This->_DetectAtomKeys('O', $MinKeyCount); | |
3278 } | |
3279 | |
3280 # Generate key 147 value as 1/0 indicating its presence/absence or count of its | |
3281 # presence in a molecule. | |
3282 # | |
3283 # Key 147 description: ACH2CH2A | |
3284 # | |
3285 sub _Generate166KeySetKey147 { | |
3286 my($This) = @_; | |
3287 my(@CentralAtomsSymbols, @CentralAtomsBondSymbols, @CentralAtomsMinHydrogenCount); | |
3288 | |
3289 @CentralAtomsSymbols = ('A', 'C', 'C', 'A'); | |
3290 @CentralAtomsBondSymbols = (undef, undef, undef); | |
3291 @CentralAtomsMinHydrogenCount = (undef, 2, 2, undef); | |
3292 | |
3293 return $This->_DetectExtendedAtomNeighborhoodKeys(\@CentralAtomsSymbols, \@CentralAtomsBondSymbols, \@CentralAtomsMinHydrogenCount); | |
3294 } | |
3295 | |
3296 # Generate key 148 value as 1/0 indicating its presence/absence or count of its | |
3297 # presence in a molecule. | |
3298 # | |
3299 # Key 148 description: AQ(A)A | |
3300 # | |
3301 sub _Generate166KeySetKey148 { | |
3302 my($This) = @_; | |
3303 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
3304 | |
3305 $CentralAtomSymbol = 'Q'; | |
3306 @NbrAtomSymbols = ('A', 'A', 'A'); | |
3307 @NbrBondSymbols = (undef, undef, undef); | |
3308 | |
3309 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
3310 } | |
3311 | |
3312 # Generate key 149 value as 1/0 indicating its presence/absence or count of its | |
3313 # presence in a molecule. | |
3314 # | |
3315 # Key 149 description: CH3 > 1 | |
3316 # | |
3317 sub _Generate166KeySetKey149 { | |
3318 my($This) = @_; | |
3319 my($MinKeyCount, $IsInRing, $MinHydrogenCount) = (2, undef, 3); | |
3320 | |
3321 return $This->_DetectAtomKeys('C', $MinKeyCount, $IsInRing, $MinHydrogenCount); | |
3322 } | |
3323 | |
3324 # Generate key 150 value as 1/0 indicating its presence/absence or count of its | |
3325 # presence in a molecule. | |
3326 # | |
3327 # Key 150 description: A!A$A!A | |
3328 # | |
3329 sub _Generate166KeySetKey150 { | |
3330 my($This) = @_; | |
3331 my(@CentralAtomsSymbols, @CentralAtomsBondSymbols); | |
3332 | |
3333 @CentralAtomsSymbols = ('A', 'A', 'A', 'A'); | |
3334 @CentralAtomsBondSymbols = ('!', '$', '!'); | |
3335 | |
3336 return $This->_DetectExtendedAtomNeighborhoodKeys(\@CentralAtomsSymbols, \@CentralAtomsBondSymbols); | |
3337 } | |
3338 | |
3339 # Generate key 151 value as 1/0 indicating its presence/absence or count of its | |
3340 # presence in a molecule. | |
3341 # | |
3342 # Key 151 description: NH | |
3343 # | |
3344 sub _Generate166KeySetKey151 { | |
3345 my($This) = @_; | |
3346 my($MinKeyCount, $IsInRing, $MinHydrogenCount) = (undef, undef, 1); | |
3347 | |
3348 return $This->_DetectAtomKeys('N', $MinKeyCount, $IsInRing, $MinHydrogenCount); | |
3349 } | |
3350 | |
3351 # Generate key 152 value as 1/0 indicating its presence/absence or count of its | |
3352 # presence in a molecule. | |
3353 # | |
3354 # Key 152 description: OC(C)C | |
3355 # | |
3356 sub _Generate166KeySetKey152 { | |
3357 my($This) = @_; | |
3358 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
3359 | |
3360 $CentralAtomSymbol = 'C'; | |
3361 @NbrAtomSymbols = ('O', 'C', 'C'); | |
3362 @NbrBondSymbols = (undef, undef, undef); | |
3363 | |
3364 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
3365 } | |
3366 | |
3367 # Generate key 153 value as 1/0 indicating its presence/absence or count of its | |
3368 # presence in a molecule. | |
3369 # | |
3370 # Key 153 description: QCH2A | |
3371 # | |
3372 sub _Generate166KeySetKey153 { | |
3373 my($This) = @_; | |
3374 my($CentralAtomSymbol, $CentralAtomMinHydrogenCount, $MinKeyCount, @NbrAtomSymbols, @NbrBondSymbols); | |
3375 | |
3376 $CentralAtomSymbol = 'C'; | |
3377 @NbrAtomSymbols = ('Q', 'A'); | |
3378 @NbrBondSymbols = (undef, undef); | |
3379 $MinKeyCount = undef; | |
3380 $CentralAtomMinHydrogenCount = 2; | |
3381 | |
3382 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols, $MinKeyCount, $CentralAtomMinHydrogenCount); | |
3383 } | |
3384 | |
3385 # Generate key 154 value as 1/0 indicating its presence/absence or count of its | |
3386 # presence in a molecule. | |
3387 # | |
3388 # Key 154 description: C=O | |
3389 # | |
3390 sub _Generate166KeySetKey154 { | |
3391 my($This) = @_; | |
3392 my($BondOrder) = 2; | |
3393 | |
3394 return $This->_DetectBondKeys('C', 'O', $BondOrder); | |
3395 } | |
3396 | |
3397 # Generate key 155 value as 1/0 indicating its presence/absence or count of its | |
3398 # presence in a molecule. | |
3399 # | |
3400 # Key 155 description: A!CH2!A | |
3401 # | |
3402 sub _Generate166KeySetKey155 { | |
3403 my($This) = @_; | |
3404 my($CentralAtomSymbol, $CentralAtomMinHydrogenCount, $MinKeyCount, @NbrAtomSymbols, @NbrBondSymbols); | |
3405 | |
3406 $CentralAtomSymbol = 'C'; | |
3407 @NbrAtomSymbols = ('A', 'A'); | |
3408 @NbrBondSymbols = ('!', '!'); | |
3409 $MinKeyCount = undef; | |
3410 $CentralAtomMinHydrogenCount = 2; | |
3411 | |
3412 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols, $MinKeyCount, $CentralAtomMinHydrogenCount); | |
3413 } | |
3414 | |
3415 # Generate key 156 value as 1/0 indicating its presence/absence or count of its | |
3416 # presence in a molecule. | |
3417 # | |
3418 # Key 156 description: NA(A)A | |
3419 # | |
3420 sub _Generate166KeySetKey156 { | |
3421 my($This) = @_; | |
3422 my($MinKeyCount, @CentralAtomsSymbols, @CentralAtomsBondSymbols, @CentralAtomsMinHydrogenCount, @CentralAtomNbrsAtomSymbols, @CentralAtomNbrsBondSymbols); | |
3423 | |
3424 @CentralAtomsSymbols = ('N', 'A', 'A'); | |
3425 @CentralAtomsBondSymbols = (undef, undef); | |
3426 @CentralAtomsMinHydrogenCount = (undef, undef, undef); | |
3427 | |
3428 @CentralAtomNbrsAtomSymbols = (undef, ['A'], undef); | |
3429 @CentralAtomNbrsBondSymbols = (undef, undef, undef); | |
3430 $MinKeyCount = undef; | |
3431 | |
3432 return $This->_DetectExtendedAtomNeighborhoodKeys(\@CentralAtomsSymbols, \@CentralAtomsBondSymbols, \@CentralAtomsMinHydrogenCount, $MinKeyCount, \@CentralAtomNbrsAtomSymbols, \@CentralAtomNbrsBondSymbols); | |
3433 } | |
3434 | |
3435 # Generate key 157 value as 1/0 indicating its presence/absence or count of its | |
3436 # presence in a molecule. | |
3437 # | |
3438 # Key 157 description: C-O | |
3439 # | |
3440 sub _Generate166KeySetKey157 { | |
3441 my($This) = @_; | |
3442 my($BondOrder) = 1; | |
3443 | |
3444 return $This->_DetectBondKeys('C', 'O', $BondOrder); | |
3445 } | |
3446 | |
3447 # Generate key 158 value as 1/0 indicating its presence/absence or count of its | |
3448 # presence in a molecule. | |
3449 # | |
3450 # Key 158 description: C-N | |
3451 # | |
3452 sub _Generate166KeySetKey158 { | |
3453 my($This) = @_; | |
3454 my($BondOrder) = 1; | |
3455 | |
3456 return $This->_DetectBondKeys('C', 'N', $BondOrder); | |
3457 } | |
3458 | |
3459 # Generate key 159 value as 1/0 indicating its presence/absence or count of its | |
3460 # presence in a molecule. | |
3461 # | |
3462 # Key 159 description: O > 1 | |
3463 # | |
3464 sub _Generate166KeySetKey159 { | |
3465 my($This) = @_; | |
3466 my($MinKeyCount) = 2; | |
3467 | |
3468 return $This->_DetectAtomKeys('O', $MinKeyCount); | |
3469 } | |
3470 | |
3471 # Generate key 160 value as 1/0 indicating its presence/absence or count of its | |
3472 # presence in a molecule. | |
3473 # | |
3474 # Key 160 description: CH3 | |
3475 # | |
3476 sub _Generate166KeySetKey160 { | |
3477 my($This) = @_; | |
3478 my($MinKeyCount, $IsInRing, $MinHydrogenCount) = (undef, undef, 3); | |
3479 | |
3480 return $This->_DetectAtomKeys('C', $MinKeyCount, $IsInRing, $MinHydrogenCount); | |
3481 } | |
3482 | |
3483 # Generate key 161 value as 1/0 indicating its presence/absence or count of its | |
3484 # presence in a molecule. | |
3485 # | |
3486 # Key 161 description: N | |
3487 # | |
3488 sub _Generate166KeySetKey161 { | |
3489 my($This) = @_; | |
3490 | |
3491 return $This->_DetectAtomKeys('N'); | |
3492 } | |
3493 | |
3494 # Generate key 162 value as 1/0 indicating its presence/absence or count of its | |
3495 # presence in a molecule. | |
3496 # | |
3497 # Key 162 description: AROMATIC | |
3498 # | |
3499 sub _Generate166KeySetKey162 { | |
3500 my($This) = @_; | |
3501 my($Atom, $Molecule, $KeyValue); | |
3502 | |
3503 # Check molecule aromatic property... | |
3504 $Molecule = $This->GetMolecule(); | |
3505 if ($Molecule->IsAromatic()) { | |
3506 return 1; | |
3507 } | |
3508 | |
3509 # Check aromatic property of each atom... | |
3510 $KeyValue = 1; | |
3511 ATOM: for $Atom (@{$This->{Atoms}}) { | |
3512 if (!$Atom->IsAromatic()) { | |
3513 $KeyValue = 0; | |
3514 last ATOM; | |
3515 } | |
3516 } | |
3517 return $KeyValue; | |
3518 } | |
3519 | |
3520 # Generate key 163 value as 1/0 indicating its presence/absence or count of its | |
3521 # presence in a molecule. | |
3522 # | |
3523 # Key 163 description: 6M RING | |
3524 # | |
3525 sub _Generate166KeySetKey163 { | |
3526 my($This) = @_; | |
3527 my($Molecule, $KeyValue, $RingSize, $NumOfRings); | |
3528 | |
3529 $RingSize = 6; | |
3530 $Molecule = $This->GetMolecule(); | |
3531 $NumOfRings = $Molecule->GetNumOfRingsWithSize($RingSize); | |
3532 | |
3533 if ($This->{KeyBits}) { | |
3534 $KeyValue = $NumOfRings ? 1 : 0; | |
3535 } | |
3536 else { | |
3537 $KeyValue = $NumOfRings; | |
3538 } | |
3539 return $KeyValue; | |
3540 } | |
3541 | |
3542 # Generate key 164 value as 1/0 indicating its presence/absence or count of its | |
3543 # presence in a molecule. | |
3544 # | |
3545 # Key 164 description: O | |
3546 # | |
3547 sub _Generate166KeySetKey164 { | |
3548 my($This) = @_; | |
3549 | |
3550 return $This->_DetectAtomKeys('O'); | |
3551 } | |
3552 | |
3553 # Generate key 165 value as 1/0 indicating its presence/absence or count of its | |
3554 # presence in a molecule. | |
3555 # | |
3556 # Key 165 description: RING | |
3557 # | |
3558 sub _Generate166KeySetKey165 { | |
3559 my($This) = @_; | |
3560 my($Molecule, $KeyValue, $NumOfRings); | |
3561 | |
3562 $Molecule = $This->GetMolecule(); | |
3563 $NumOfRings = $Molecule->GetNumOfRings(); | |
3564 | |
3565 if ($This->{KeyBits}) { | |
3566 $KeyValue = $NumOfRings ? 1 : 0; | |
3567 } | |
3568 else { | |
3569 $KeyValue = $NumOfRings; | |
3570 } | |
3571 return $KeyValue; | |
3572 } | |
3573 | |
3574 # Generate key 166 value as 1/0 indicating its presence/absence or count of its | |
3575 # presence in a molecule. | |
3576 # | |
3577 # Key 166 description: FRAGMENTS | |
3578 # | |
3579 sub _Generate166KeySetKey166 { | |
3580 my($This) = @_; | |
3581 my($Molecule, $KeyValue, $NumOfComponents); | |
3582 | |
3583 $Molecule = $This->GetMolecule(); | |
3584 $NumOfComponents = $Molecule->GetNumOfConnectedComponents(); | |
3585 | |
3586 if ($This->{KeyBits}) { | |
3587 $KeyValue = ($NumOfComponents > 1) ? 1 : 0; | |
3588 } | |
3589 else { | |
3590 $KeyValue = $NumOfComponents; | |
3591 } | |
3592 return $KeyValue; | |
3593 } | |
3594 | |
3595 ################################## | |
3596 # | |
3597 # Implementation of MDL MACCS 322 keys... | |
3598 # | |
3599 ################################## | |
3600 | |
3601 # Generate 322 keyset key 1 value as 1/0 indicating its presence/absence or | |
3602 # count of its presence in a molecule. | |
3603 # | |
3604 # Key 1 description: A(AAA) or AA(A)A - atom with at least three neighbors | |
3605 # | |
3606 sub _Generate322KeySetKey1 { | |
3607 my($This) = @_; | |
3608 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
3609 | |
3610 $CentralAtomSymbol = 'A'; | |
3611 @NbrAtomSymbols = ('A', 'A', 'A'); | |
3612 @NbrBondSymbols = (undef, undef, undef); | |
3613 | |
3614 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
3615 } | |
3616 | |
3617 # Generate 322 keyset key 2 value as 1/0 indicating its presence/absence or | |
3618 # count of its presence in a molecule. | |
3619 # | |
3620 # Key 2 description: Q - heteroatom | |
3621 # | |
3622 sub _Generate322KeySetKey2 { | |
3623 my($This) = @_; | |
3624 | |
3625 return $This->_DetectAtomKeys('Q'); | |
3626 } | |
3627 | |
3628 # Generate 322 keyset key 3 value as 1/0 indicating its presence/absence or | |
3629 # count of its presence in a molecule. | |
3630 # | |
3631 # Key 3 description: Anot%not-A - atom involved in one or more multiple bonds, not aromatic | |
3632 # | |
3633 sub _Generate322KeySetKey3 { | |
3634 my($This) = @_; | |
3635 my($BondSymbol) = 'not%not-'; | |
3636 | |
3637 return $This->_DetectBondKeys('A', 'A', $BondSymbol); | |
3638 } | |
3639 | |
3640 # Generate 322 keyset key 4 value as 1/0 indicating its presence/absence or | |
3641 # count of its presence in a molecule. | |
3642 # | |
3643 # Key 4 description: A(AAAA) or AA(A)(A)A - atom with at least four neighbors | |
3644 # | |
3645 sub _Generate322KeySetKey4 { | |
3646 my($This) = @_; | |
3647 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
3648 | |
3649 $CentralAtomSymbol = 'A'; | |
3650 @NbrAtomSymbols = ('A', 'A', 'A', 'A'); | |
3651 @NbrBondSymbols = (undef, undef, undef, undef); | |
3652 | |
3653 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
3654 } | |
3655 | |
3656 # Generate 322 keyset key 5 value as 1/0 indicating its presence/absence or | |
3657 # count of its presence in a molecule. | |
3658 # | |
3659 # Key 5 description: A(QQ) or QA(Q) - atom with at least two heteroatom neighbors | |
3660 # | |
3661 sub _Generate322KeySetKey5 { | |
3662 my($This) = @_; | |
3663 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
3664 | |
3665 $CentralAtomSymbol = 'A'; | |
3666 @NbrAtomSymbols = ('Q', 'Q'); | |
3667 @NbrBondSymbols = (undef, undef); | |
3668 | |
3669 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
3670 } | |
3671 | |
3672 # Generate 322 keyset key 6 value as 1/0 indicating its presence/absence or | |
3673 # count of its presence in a molecule. | |
3674 # | |
3675 # Key 6 description: A(QQQ) or QA(Q)Q - atom with at least three heteroatom neighbors | |
3676 # | |
3677 sub _Generate322KeySetKey6 { | |
3678 my($This) = @_; | |
3679 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
3680 | |
3681 $CentralAtomSymbol = 'A'; | |
3682 @NbrAtomSymbols = ('Q', 'Q', 'Q'); | |
3683 @NbrBondSymbols = (undef, undef, undef); | |
3684 | |
3685 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
3686 } | |
3687 | |
3688 # Generate 322 keyset key 7 value as 1/0 indicating its presence/absence or | |
3689 # count of its presence in a molecule. | |
3690 # | |
3691 # Key 7 description: QH - heteroatom with at least one hydrogen attached | |
3692 # | |
3693 sub _Generate322KeySetKey7 { | |
3694 my($This) = @_; | |
3695 my($MinKeyCount, $IsInRing, $MinHydrogenCount) = (undef, undef, 1); | |
3696 | |
3697 return $This->_DetectAtomKeys('Q', $MinKeyCount, $IsInRing, $MinHydrogenCount); | |
3698 } | |
3699 | |
3700 # Generate 322 keyset key 8 value as 1/0 indicating its presence/absence or | |
3701 # count of its presence in a molecule. | |
3702 # | |
3703 # Key 8 description: CH2(AA) or ACH2A - carbon with at least two single bonds and at least two hydrogens attached | |
3704 # | |
3705 sub _Generate322KeySetKey8 { | |
3706 my($This) = @_; | |
3707 my($CentralAtomSymbol, $CentralAtomMinHydrogenCount, $MinKeyCount, @NbrAtomSymbols, @NbrBondSymbols); | |
3708 | |
3709 $CentralAtomSymbol = 'C'; | |
3710 @NbrAtomSymbols = ('A', 'A'); | |
3711 @NbrBondSymbols = (undef, undef); | |
3712 $MinKeyCount = undef; | |
3713 $CentralAtomMinHydrogenCount = 2; | |
3714 | |
3715 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols, $MinKeyCount, $CentralAtomMinHydrogenCount); | |
3716 } | |
3717 | |
3718 # Generate 322 keyset key 9 value as 1/0 indicating its presence/absence or | |
3719 # count of its presence in a molecule. | |
3720 # | |
3721 # Key 9 description: CH3(A) or ACH3 - carbon with at least one single bond and at least three hydrogens attached | |
3722 # | |
3723 sub _Generate322KeySetKey9 { | |
3724 my($This) = @_; | |
3725 my($CentralAtomSymbol, $CentralAtomMinHydrogenCount, $MinKeyCount, @NbrAtomSymbols, @NbrBondSymbols); | |
3726 | |
3727 $CentralAtomSymbol = 'C'; | |
3728 @NbrAtomSymbols = ('A'); | |
3729 @NbrBondSymbols = (undef); | |
3730 $MinKeyCount = undef; | |
3731 $CentralAtomMinHydrogenCount = 3; | |
3732 | |
3733 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols, $MinKeyCount, $CentralAtomMinHydrogenCount); | |
3734 } | |
3735 | |
3736 # Generate 322 keyset key 10 value as 1/0 indicating its presence/absence or | |
3737 # count of its presence in a molecule. | |
3738 # | |
3739 # Key 10 description: Halogen | |
3740 # | |
3741 sub _Generate322KeySetKey10 { | |
3742 my($This) = @_; | |
3743 | |
3744 return $This->_DetectAtomKeys('X'); | |
3745 } | |
3746 | |
3747 # Generate 322 keyset key 11 value as 1/0 indicating its presence/absence or | |
3748 # count of its presence in a molecule. | |
3749 # | |
3750 # Key 11 description: A(-A-A-A) or A-A(-A)-A - atom has at least three single bonds | |
3751 # | |
3752 sub _Generate322KeySetKey11 { | |
3753 my($This) = @_; | |
3754 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
3755 | |
3756 $CentralAtomSymbol = 'A'; | |
3757 @NbrAtomSymbols = ('A', 'A', 'A'); | |
3758 @NbrBondSymbols = ('-', '-', '-'); | |
3759 | |
3760 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
3761 } | |
3762 | |
3763 # Generate 322 keyset key 12 value as 1/0 indicating its presence/absence or | |
3764 # count of its presence in a molecule. | |
3765 # | |
3766 # Key 12 description: AAAAAA@1 >= 2 - atom is in at least two different six-membered rings | |
3767 # | |
3768 sub _Generate322KeySetKey12 { | |
3769 my($This) = @_; | |
3770 my($Atom, $KeyValue, $RingSize, $NumOfRings); | |
3771 | |
3772 $RingSize = 6; | |
3773 $KeyValue = 0; | |
3774 | |
3775 ATOM: for $Atom (@{$This->{Atoms}}) { | |
3776 if (!$This->_IsAtom($Atom)) { | |
3777 next ATOM; | |
3778 } | |
3779 $NumOfRings = $Atom->GetNumOfRingsWithSize($RingSize); | |
3780 if ($NumOfRings >= 2) { | |
3781 $KeyValue++; | |
3782 if ($This->{KeyBits}) { | |
3783 $KeyValue = 1; | |
3784 last ATOM; | |
3785 } | |
3786 } | |
3787 } | |
3788 return $KeyValue; | |
3789 } | |
3790 | |
3791 # Generate 322 keyset key 13 value as 1/0 indicating its presence/absence or | |
3792 # count of its presence in a molecule. | |
3793 # | |
3794 # Key 13 description: A($A$A$A) or A$A($A)$A - atom has more than two ring bonds (at least three ring bonds) | |
3795 # | |
3796 sub _Generate322KeySetKey13 { | |
3797 my($This) = @_; | |
3798 my($CentralAtomSymbol, $MinKeyCount, @NbrAtomSymbols, @NbrBondSymbols); | |
3799 | |
3800 $CentralAtomSymbol = 'A'; | |
3801 @NbrAtomSymbols = ('A', 'A', 'A'); | |
3802 @NbrBondSymbols = ('$', '$', '$'); | |
3803 | |
3804 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
3805 } | |
3806 | |
3807 # Generate 322 keyset key 14 value as 1/0 indicating its presence/absence or | |
3808 # count of its presence in a molecule. | |
3809 # | |
3810 # Key 14 description: A$A!A$A - atom is at a ring/chain boundary. When a comparison is | |
3811 # done with another atom the path passes through the chain bond. | |
3812 # | |
3813 sub _Generate322KeySetKey14 { | |
3814 my($This) = @_; | |
3815 my($BondAtomSymbol1, $BondAtomSymbol2, $BondSymbol, @NbrAtomsSymbols, @NbrAtomsBondSymbols); | |
3816 | |
3817 ($BondAtomSymbol1, $BondAtomSymbol2) = ('A', 'A'); | |
3818 $BondSymbol = '!'; | |
3819 | |
3820 @NbrAtomsSymbols = (['A'], ['A']); | |
3821 @NbrAtomsBondSymbols = (['$'], ['$']); | |
3822 return $This->_DetectBondNeighborhoodKeys($BondAtomSymbol1, $BondAtomSymbol2, $BondSymbol, \@NbrAtomsSymbols, \@NbrAtomsBondSymbols); | |
3823 } | |
3824 | |
3825 # Generate 322 keyset key 15 value as 1/0 indicating its presence/absence or | |
3826 # count of its presence in a molecule. | |
3827 # | |
3828 # Key 15 description: Anot%A%Anot%A - atom is at an aromatic/nonaromatic boundary. | |
3829 # When a comparison is done with another atom the path passes through the aromatic bond. | |
3830 # | |
3831 sub _Generate322KeySetKey15 { | |
3832 my($This) = @_; | |
3833 my($BondAtomSymbol1, $BondAtomSymbol2, $BondSymbol, @NbrAtomsSymbols, @NbrAtomsBondSymbols); | |
3834 | |
3835 ($BondAtomSymbol1, $BondAtomSymbol2) = ('A', 'A'); | |
3836 $BondSymbol = '%'; | |
3837 | |
3838 @NbrAtomsSymbols = (['A'], ['A']); | |
3839 @NbrAtomsBondSymbols = (['not%'], ['not%']); | |
3840 return $This->_DetectBondNeighborhoodKeys($BondAtomSymbol1, $BondAtomSymbol2, $BondSymbol, \@NbrAtomsSymbols, \@NbrAtomsBondSymbols); | |
3841 } | |
3842 | |
3843 # Generate 322 keyset key 16 value as 1/0 indicating its presence/absence or | |
3844 # count of its presence in a molecule. | |
3845 # | |
3846 # Key 16 description: A!A!A - atom with more than one chain bond | |
3847 # | |
3848 sub _Generate322KeySetKey16 { | |
3849 my($This) = @_; | |
3850 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
3851 | |
3852 $CentralAtomSymbol = 'A'; | |
3853 @NbrAtomSymbols = ('A', 'A'); | |
3854 @NbrBondSymbols = ('!', '!'); | |
3855 | |
3856 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
3857 } | |
3858 | |
3859 # Generate 322 keyset key 17 value as 1/0 indicating its presence/absence or | |
3860 # count of its presence in a molecule. | |
3861 # | |
3862 # Key 17 description: A!A$A!A - atom is at a ring/chain boundary. When a comparison | |
3863 # is done with another atom the path passes through the ring bond. | |
3864 # | |
3865 sub _Generate322KeySetKey17 { | |
3866 my($This) = @_; | |
3867 my($BondAtomSymbol1, $BondAtomSymbol2, $BondSymbol, @NbrAtomsSymbols, @NbrAtomsBondSymbols); | |
3868 | |
3869 ($BondAtomSymbol1, $BondAtomSymbol2) = ('A', 'A'); | |
3870 $BondSymbol = '$'; | |
3871 | |
3872 @NbrAtomsSymbols = (['A'], ['A']); | |
3873 @NbrAtomsBondSymbols = (['!'], ['!']); | |
3874 return $This->_DetectBondNeighborhoodKeys($BondAtomSymbol1, $BondAtomSymbol2, $BondSymbol, \@NbrAtomsSymbols, \@NbrAtomsBondSymbols); | |
3875 } | |
3876 | |
3877 # Generate 322 keyset key 18 value as 1/0 indicating its presence/absence or | |
3878 # count of its presence in a molecule. | |
3879 # | |
3880 # Key 18 description: A%Anot%A%A - atom is at an aromatic/nonaromatic boundary. | |
3881 # When a comparison is done with another atom the path passes through | |
3882 # the nonaromatic bond | |
3883 # | |
3884 sub _Generate322KeySetKey18 { | |
3885 my($This) = @_; | |
3886 my($BondAtomSymbol1, $BondAtomSymbol2, $BondSymbol, @NbrAtomsSymbols, @NbrAtomsBondSymbols); | |
3887 | |
3888 ($BondAtomSymbol1, $BondAtomSymbol2) = ('A', 'A'); | |
3889 $BondSymbol = 'not%'; | |
3890 | |
3891 @NbrAtomsSymbols = (['A'], ['A']); | |
3892 @NbrAtomsBondSymbols = (['%'], ['%']); | |
3893 return $This->_DetectBondNeighborhoodKeys($BondAtomSymbol1, $BondAtomSymbol2, $BondSymbol, \@NbrAtomsSymbols, \@NbrAtomsBondSymbols); | |
3894 } | |
3895 | |
3896 # Generate 322 keyset key 19 value as 1/0 indicating its presence/absence or | |
3897 # count of its presence in a molecule. | |
3898 # | |
3899 # Key 19 description: HETEROCYCLE - atom is a heteroatom in a ring. | |
3900 # | |
3901 sub _Generate322KeySetKey19 { | |
3902 my($This) = @_; | |
3903 my($MinKeyCount, $IsInRing) = (undef, 1); | |
3904 | |
3905 return $This->_DetectAtomKeys('Q', $MinKeyCount, $IsInRing); | |
3906 } | |
3907 | |
3908 # Generate 322 keyset key 20 value as 1/0 indicating its presence/absence or | |
3909 # count of its presence in a molecule. | |
3910 # | |
3911 # Key 20 description: rare properties: atom with five or more neighbors, atom in four | |
3912 # or more rings, or atom types other than H, C, N, O, S, F, Cl, Br, or I | |
3913 # | |
3914 sub _Generate322KeySetKey20 { | |
3915 my($This) = @_; | |
3916 my($Atom, $KeyValue); | |
3917 | |
3918 $KeyValue = 0; | |
3919 ATOM: for $Atom (@{$This->{Atoms}}) { | |
3920 if (!($Atom->GetAtomicNumber() !~ /^(1|6|7|8|9|16|17|35|53)$/) || ($Atom->GetNumOfRings() >= 4) || ($Atom->GetNumOfNeighbors() >= 5) ) { | |
3921 next ATOM; | |
3922 } | |
3923 $KeyValue++; | |
3924 if ($This->{KeyBits}) { | |
3925 $KeyValue = 1; | |
3926 last ATOM; | |
3927 } | |
3928 } | |
3929 return $KeyValue; | |
3930 } | |
3931 | |
3932 # Generate 322 keyset key 21 value as 1/0 indicating its presence/absence or | |
3933 # count of its presence in a molecule. | |
3934 # | |
3935 # Key 21 description: rare properties: atom has a charge, is an isotope, has | |
3936 # two or more multiple bonds, or has a triple bond. | |
3937 # | |
3938 sub _Generate322KeySetKey21 { | |
3939 my($This) = @_; | |
3940 my($Atom, $KeyValue); | |
3941 | |
3942 $KeyValue = 0; | |
3943 ATOM: for $Atom (@{$This->{Atoms}}) { | |
3944 if ( !($Atom->IsIsotope() || $Atom->GetFormalCharge()) ) { | |
3945 # Look for multiple and triple bonds... | |
3946 my($Bond, $NumOfTripleBonds, $NumOfMultipleBonds); | |
3947 | |
3948 ($NumOfTripleBonds, $NumOfMultipleBonds) = (0, 0); | |
3949 BOND: for $Bond ($Atom->GetBonds()) { | |
3950 if ($Bond->IsSingle()) { next BOND; } | |
3951 if ($Bond->IsDouble()) { $NumOfMultipleBonds++; next BOND; } | |
3952 if ($Bond->IsTriple()) { $NumOfTripleBonds++; next BOND; } | |
3953 } | |
3954 if ( !($NumOfTripleBonds || ($NumOfMultipleBonds >= 2)) ) { | |
3955 next ATOM; | |
3956 } | |
3957 } | |
3958 $KeyValue++; | |
3959 if ($This->{KeyBits}) { | |
3960 $KeyValue = 1; | |
3961 last ATOM; | |
3962 } | |
3963 } | |
3964 return $KeyValue; | |
3965 } | |
3966 | |
3967 # Generate 322 keyset key 22 value as 1/0 indicating its presence/absence or | |
3968 # count of its presence in a molecule. | |
3969 # | |
3970 # Key 22 description: N - nitrogen | |
3971 # | |
3972 sub _Generate322KeySetKey22 { | |
3973 my($This) = @_; | |
3974 | |
3975 return $This->_DetectAtomKeys('N'); | |
3976 } | |
3977 | |
3978 # Generate 322 keyset key 23 value as 1/0 indicating its presence/absence or | |
3979 # count of its presence in a molecule. | |
3980 # | |
3981 # Key 23 description: S - sulfur | |
3982 # | |
3983 sub _Generate322KeySetKey23 { | |
3984 my($This) = @_; | |
3985 | |
3986 return $This->_DetectAtomKeys('S'); | |
3987 } | |
3988 | |
3989 # Generate 322 keyset key 24 value as 1/0 indicating its presence/absence or | |
3990 # count of its presence in a molecule. | |
3991 # | |
3992 # Key 24 description: O - oxygen | |
3993 # | |
3994 sub _Generate322KeySetKey24 { | |
3995 my($This) = @_; | |
3996 | |
3997 return $This->_DetectAtomKeys('O'); | |
3998 } | |
3999 | |
4000 # Generate 322 keyset key 25 value as 1/0 indicating its presence/absence or | |
4001 # count of its presence in a molecule. | |
4002 # | |
4003 # Key 25 description: A(AA)A(A)A(AA) - atom has two neighbors, each with | |
4004 # three or more neighbors (including the central atom). | |
4005 # | |
4006 sub _Generate322KeySetKey25 { | |
4007 my($This) = @_; | |
4008 my($MinKeyCount, @CentralAtomsSymbols, @NbrAtomsSymbols); | |
4009 | |
4010 @CentralAtomsSymbols = ('A', 'A', 'A'); | |
4011 @NbrAtomsSymbols = (['A', 'A'], ['A'], ['A', 'A']); | |
4012 | |
4013 return $This->_DetectExtendedAtomNeighborhoodKeys(\@CentralAtomsSymbols, undef, undef, undef, \@NbrAtomsSymbols); | |
4014 } | |
4015 | |
4016 # Generate 322 keyset key 26 value as 1/0 indicating its presence/absence or | |
4017 # count of its presence in a molecule. | |
4018 # | |
4019 # Key 26 description: CH2ACH2 - atom has two hydrocarbon (CH2) neighbors | |
4020 # | |
4021 sub _Generate322KeySetKey26 { | |
4022 my($This) = @_; | |
4023 my($CentralAtomSymbol, $CentralAtomMinHydrogenCount, $MinKeyCount, @NbrAtomSymbols, @NbrBondSymbols, @NbrAtomMinHydrogenCount); | |
4024 | |
4025 $CentralAtomSymbol = 'A'; | |
4026 $CentralAtomMinHydrogenCount = undef; | |
4027 | |
4028 @NbrAtomSymbols = ('C', 'C'); | |
4029 @NbrBondSymbols = (undef, undef); | |
4030 @NbrAtomMinHydrogenCount = (2, 2); | |
4031 | |
4032 $MinKeyCount = undef; | |
4033 | |
4034 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols, $MinKeyCount, $CentralAtomMinHydrogenCount, \@NbrAtomMinHydrogenCount); | |
4035 } | |
4036 | |
4037 # Generate 322 keyset key 27 value as 1/0 indicating its presence/absence or | |
4038 # count of its presence in a molecule. | |
4039 # | |
4040 # Key 27 description: C(CC) | |
4041 # | |
4042 sub _Generate322KeySetKey27 { | |
4043 my($This) = @_; | |
4044 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4045 | |
4046 $CentralAtomSymbol = 'C'; | |
4047 @NbrAtomSymbols = ('C', 'C'); | |
4048 @NbrBondSymbols = (undef, undef); | |
4049 | |
4050 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4051 } | |
4052 | |
4053 # Generate 322 keyset key 28 value as 1/0 indicating its presence/absence or | |
4054 # count of its presence in a molecule. | |
4055 # | |
4056 # Key 28 description: C(CCC) | |
4057 # | |
4058 sub _Generate322KeySetKey28 { | |
4059 my($This) = @_; | |
4060 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4061 | |
4062 $CentralAtomSymbol = 'C'; | |
4063 @NbrAtomSymbols = ('C', 'C', 'C'); | |
4064 @NbrBondSymbols = (undef, undef, undef); | |
4065 | |
4066 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4067 } | |
4068 | |
4069 # Generate 322 keyset key 29 value as 1/0 indicating its presence/absence or | |
4070 # count of its presence in a molecule. | |
4071 # | |
4072 # Key 29 description: C(CN) | |
4073 # | |
4074 sub _Generate322KeySetKey29 { | |
4075 my($This) = @_; | |
4076 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4077 | |
4078 $CentralAtomSymbol = 'C'; | |
4079 @NbrAtomSymbols = ('C', 'N'); | |
4080 @NbrBondSymbols = (undef, undef); | |
4081 | |
4082 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4083 } | |
4084 | |
4085 # Generate 322 keyset key 30 value as 1/0 indicating its presence/absence or | |
4086 # count of its presence in a molecule. | |
4087 # | |
4088 # Key 30 description: C(CCN) | |
4089 # | |
4090 sub _Generate322KeySetKey30 { | |
4091 my($This) = @_; | |
4092 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4093 | |
4094 $CentralAtomSymbol = 'C'; | |
4095 @NbrAtomSymbols = ('C', 'C', 'N'); | |
4096 @NbrBondSymbols = (undef, undef, undef); | |
4097 | |
4098 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4099 } | |
4100 | |
4101 # Generate 322 keyset key 31 value as 1/0 indicating its presence/absence or | |
4102 # count of its presence in a molecule. | |
4103 # | |
4104 # Key 31 description: C(NN) | |
4105 # | |
4106 sub _Generate322KeySetKey31 { | |
4107 my($This) = @_; | |
4108 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4109 | |
4110 $CentralAtomSymbol = 'C'; | |
4111 @NbrAtomSymbols = ('N', 'N'); | |
4112 @NbrBondSymbols = (undef, undef); | |
4113 | |
4114 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4115 } | |
4116 | |
4117 # Generate 322 keyset key 32 value as 1/0 indicating its presence/absence or | |
4118 # count of its presence in a molecule. | |
4119 # | |
4120 # Key 32 description: C(NNC) | |
4121 # | |
4122 sub _Generate322KeySetKey32 { | |
4123 my($This) = @_; | |
4124 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4125 | |
4126 $CentralAtomSymbol = 'C'; | |
4127 @NbrAtomSymbols = ('N', 'N', 'C'); | |
4128 @NbrBondSymbols = (undef, undef, undef); | |
4129 | |
4130 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4131 } | |
4132 | |
4133 # Generate 322 keyset key 33 value as 1/0 indicating its presence/absence or | |
4134 # count of its presence in a molecule. | |
4135 # | |
4136 # Key 33 description: C(NNN) | |
4137 # | |
4138 sub _Generate322KeySetKey33 { | |
4139 my($This) = @_; | |
4140 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4141 | |
4142 $CentralAtomSymbol = 'C'; | |
4143 @NbrAtomSymbols = ('N', 'N', 'N'); | |
4144 @NbrBondSymbols = (undef, undef, undef); | |
4145 | |
4146 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4147 } | |
4148 | |
4149 # Generate 322 keyset key 34 value as 1/0 indicating its presence/absence or | |
4150 # count of its presence in a molecule. | |
4151 # | |
4152 # Key 34 description: C(CO) | |
4153 # | |
4154 sub _Generate322KeySetKey34 { | |
4155 my($This) = @_; | |
4156 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4157 | |
4158 $CentralAtomSymbol = 'C'; | |
4159 @NbrAtomSymbols = ('C', 'O'); | |
4160 @NbrBondSymbols = (undef, undef); | |
4161 | |
4162 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4163 } | |
4164 | |
4165 # Generate 322 keyset key 35 value as 1/0 indicating its presence/absence or | |
4166 # count of its presence in a molecule. | |
4167 # | |
4168 # Key 35 description: C(CCO) | |
4169 # | |
4170 sub _Generate322KeySetKey35 { | |
4171 my($This) = @_; | |
4172 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4173 | |
4174 $CentralAtomSymbol = 'C'; | |
4175 @NbrAtomSymbols = ('C', 'C', 'O'); | |
4176 @NbrBondSymbols = (undef, undef, undef); | |
4177 | |
4178 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4179 } | |
4180 | |
4181 # Generate 322 keyset key 36 value as 1/0 indicating its presence/absence or | |
4182 # count of its presence in a molecule. | |
4183 # | |
4184 # Key 36 description: C(NO) | |
4185 # | |
4186 sub _Generate322KeySetKey36 { | |
4187 my($This) = @_; | |
4188 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4189 | |
4190 $CentralAtomSymbol = 'C'; | |
4191 @NbrAtomSymbols = ('N', 'O'); | |
4192 @NbrBondSymbols = (undef, undef); | |
4193 | |
4194 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4195 } | |
4196 | |
4197 # Generate 322 keyset key 37 value as 1/0 indicating its presence/absence or | |
4198 # count of its presence in a molecule. | |
4199 # | |
4200 # Key 37 description: C(NCO) | |
4201 # | |
4202 sub _Generate322KeySetKey37 { | |
4203 my($This) = @_; | |
4204 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4205 | |
4206 $CentralAtomSymbol = 'C'; | |
4207 @NbrAtomSymbols = ('N', 'C', 'O'); | |
4208 @NbrBondSymbols = (undef, undef, undef); | |
4209 | |
4210 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4211 } | |
4212 | |
4213 # Generate 322 keyset key 38 value as 1/0 indicating its presence/absence or | |
4214 # count of its presence in a molecule. | |
4215 # | |
4216 # Key 38 description: C(NNO) | |
4217 # | |
4218 sub _Generate322KeySetKey38 { | |
4219 my($This) = @_; | |
4220 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4221 | |
4222 $CentralAtomSymbol = 'C'; | |
4223 @NbrAtomSymbols = ('N', 'N', 'O'); | |
4224 @NbrBondSymbols = (undef, undef, undef); | |
4225 | |
4226 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4227 } | |
4228 | |
4229 # Generate 322 keyset key 39 value as 1/0 indicating its presence/absence or | |
4230 # count of its presence in a molecule. | |
4231 # | |
4232 # Key 39 description: C(OO) | |
4233 # | |
4234 sub _Generate322KeySetKey39 { | |
4235 my($This) = @_; | |
4236 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4237 | |
4238 $CentralAtomSymbol = 'C'; | |
4239 @NbrAtomSymbols = ('O', 'O'); | |
4240 @NbrBondSymbols = (undef, undef); | |
4241 | |
4242 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4243 } | |
4244 | |
4245 # Generate 322 keyset key 40 value as 1/0 indicating its presence/absence or | |
4246 # count of its presence in a molecule. | |
4247 # | |
4248 # Key 40 description: C(COO) | |
4249 # | |
4250 sub _Generate322KeySetKey40 { | |
4251 my($This) = @_; | |
4252 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4253 | |
4254 $CentralAtomSymbol = 'C'; | |
4255 @NbrAtomSymbols = ('C', 'O', 'O'); | |
4256 @NbrBondSymbols = (undef, undef, undef); | |
4257 | |
4258 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4259 } | |
4260 | |
4261 # Generate 322 keyset key 41 value as 1/0 indicating its presence/absence or | |
4262 # count of its presence in a molecule. | |
4263 # | |
4264 # Key 41 description: C(NOO) | |
4265 # | |
4266 sub _Generate322KeySetKey41 { | |
4267 my($This) = @_; | |
4268 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4269 | |
4270 $CentralAtomSymbol = 'C'; | |
4271 @NbrAtomSymbols = ('N', 'O', 'O'); | |
4272 @NbrBondSymbols = (undef, undef, undef); | |
4273 | |
4274 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4275 } | |
4276 | |
4277 # Generate 322 keyset key 42 value as 1/0 indicating its presence/absence or | |
4278 # count of its presence in a molecule. | |
4279 # | |
4280 # Key 42 description: C(OOO) | |
4281 # | |
4282 sub _Generate322KeySetKey42 { | |
4283 my($This) = @_; | |
4284 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4285 | |
4286 $CentralAtomSymbol = 'C'; | |
4287 @NbrAtomSymbols = ('O', 'O', 'O'); | |
4288 @NbrBondSymbols = (undef, undef, undef); | |
4289 | |
4290 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4291 } | |
4292 | |
4293 # Generate 322 keyset key 43 value as 1/0 indicating its presence/absence or | |
4294 # count of its presence in a molecule. | |
4295 # | |
4296 # Key 43 description: Q(CC) | |
4297 # | |
4298 sub _Generate322KeySetKey43 { | |
4299 my($This) = @_; | |
4300 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4301 | |
4302 $CentralAtomSymbol = 'Q'; | |
4303 @NbrAtomSymbols = ('C', 'C'); | |
4304 @NbrBondSymbols = (undef, undef); | |
4305 | |
4306 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4307 } | |
4308 | |
4309 # Generate 322 keyset key 44 value as 1/0 indicating its presence/absence or | |
4310 # count of its presence in a molecule. | |
4311 # | |
4312 # Key 44 description: Q(CCC) | |
4313 # | |
4314 sub _Generate322KeySetKey44 { | |
4315 my($This) = @_; | |
4316 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4317 | |
4318 $CentralAtomSymbol = 'Q'; | |
4319 @NbrAtomSymbols = ('C', 'C', 'C'); | |
4320 @NbrBondSymbols = (undef, undef, undef); | |
4321 | |
4322 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4323 } | |
4324 | |
4325 # Generate 322 keyset key 45 value as 1/0 indicating its presence/absence or | |
4326 # count of its presence in a molecule. | |
4327 # | |
4328 # Key 45 description: Q(CN) | |
4329 # | |
4330 sub _Generate322KeySetKey45 { | |
4331 my($This) = @_; | |
4332 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4333 | |
4334 $CentralAtomSymbol = 'Q'; | |
4335 @NbrAtomSymbols = ('C', 'N'); | |
4336 @NbrBondSymbols = (undef, undef); | |
4337 | |
4338 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4339 } | |
4340 | |
4341 # Generate 322 keyset key 46 value as 1/0 indicating its presence/absence or | |
4342 # count of its presence in a molecule. | |
4343 # | |
4344 # Key 46 description: Q(CCN) | |
4345 # | |
4346 sub _Generate322KeySetKey46 { | |
4347 my($This) = @_; | |
4348 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4349 | |
4350 $CentralAtomSymbol = 'Q'; | |
4351 @NbrAtomSymbols = ('C', 'C', 'N'); | |
4352 @NbrBondSymbols = (undef, undef, undef); | |
4353 | |
4354 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4355 } | |
4356 | |
4357 # Generate 322 keyset key 47 value as 1/0 indicating its presence/absence or | |
4358 # count of its presence in a molecule. | |
4359 # | |
4360 # Key 47 description: Q(NN) | |
4361 # | |
4362 sub _Generate322KeySetKey47 { | |
4363 my($This) = @_; | |
4364 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4365 | |
4366 $CentralAtomSymbol = 'Q'; | |
4367 @NbrAtomSymbols = ('N', 'N'); | |
4368 @NbrBondSymbols = (undef, undef); | |
4369 | |
4370 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4371 } | |
4372 | |
4373 # Generate 322 keyset key 48 value as 1/0 indicating its presence/absence or | |
4374 # count of its presence in a molecule. | |
4375 # | |
4376 # Key 48 description: Q(CNN) | |
4377 # | |
4378 sub _Generate322KeySetKey48 { | |
4379 my($This) = @_; | |
4380 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4381 | |
4382 $CentralAtomSymbol = 'Q'; | |
4383 @NbrAtomSymbols = ('C', 'N', 'N'); | |
4384 @NbrBondSymbols = (undef, undef, undef); | |
4385 | |
4386 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4387 } | |
4388 | |
4389 # Generate 322 keyset key 49 value as 1/0 indicating its presence/absence or | |
4390 # count of its presence in a molecule. | |
4391 # | |
4392 # Key 49 description: Q(NNN) | |
4393 # | |
4394 sub _Generate322KeySetKey49 { | |
4395 my($This) = @_; | |
4396 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4397 | |
4398 $CentralAtomSymbol = 'Q'; | |
4399 @NbrAtomSymbols = ('N', 'N', 'N'); | |
4400 @NbrBondSymbols = (undef, undef, undef); | |
4401 | |
4402 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4403 } | |
4404 | |
4405 # Generate 322 keyset key 50 value as 1/0 indicating its presence/absence or | |
4406 # count of its presence in a molecule. | |
4407 # | |
4408 # Key 50 description: Q(CO) | |
4409 # | |
4410 sub _Generate322KeySetKey50 { | |
4411 my($This) = @_; | |
4412 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4413 | |
4414 $CentralAtomSymbol = 'Q'; | |
4415 @NbrAtomSymbols = ('C', 'O'); | |
4416 @NbrBondSymbols = (undef, undef); | |
4417 | |
4418 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4419 } | |
4420 | |
4421 # Generate 322 keyset key 51 value as 1/0 indicating its presence/absence or | |
4422 # count of its presence in a molecule. | |
4423 # | |
4424 # Key 51 description: Q(CCO) | |
4425 # | |
4426 sub _Generate322KeySetKey51 { | |
4427 my($This) = @_; | |
4428 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4429 | |
4430 $CentralAtomSymbol = 'Q'; | |
4431 @NbrAtomSymbols = ('C', 'C', 'O'); | |
4432 @NbrBondSymbols = (undef, undef, undef); | |
4433 | |
4434 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4435 } | |
4436 | |
4437 # Generate 322 keyset key 52 value as 1/0 indicating its presence/absence or | |
4438 # count of its presence in a molecule. | |
4439 # | |
4440 # Key 52 description: Q(NO) | |
4441 # | |
4442 sub _Generate322KeySetKey52 { | |
4443 my($This) = @_; | |
4444 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4445 | |
4446 $CentralAtomSymbol = 'Q'; | |
4447 @NbrAtomSymbols = ('N', 'O'); | |
4448 @NbrBondSymbols = (undef, undef); | |
4449 | |
4450 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4451 } | |
4452 | |
4453 # Generate 322 keyset key 53 value as 1/0 indicating its presence/absence or | |
4454 # count of its presence in a molecule. | |
4455 # | |
4456 # Key 53 description: Q(CNO) | |
4457 # | |
4458 sub _Generate322KeySetKey53 { | |
4459 my($This) = @_; | |
4460 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4461 | |
4462 $CentralAtomSymbol = 'Q'; | |
4463 @NbrAtomSymbols = ('C', 'N', 'O'); | |
4464 @NbrBondSymbols = (undef, undef, undef); | |
4465 | |
4466 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4467 } | |
4468 | |
4469 # Generate 322 keyset key 54 value as 1/0 indicating its presence/absence or | |
4470 # count of its presence in a molecule. | |
4471 # | |
4472 # Key 54 description: Q(NNO) | |
4473 # | |
4474 sub _Generate322KeySetKey54 { | |
4475 my($This) = @_; | |
4476 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4477 | |
4478 $CentralAtomSymbol = 'Q'; | |
4479 @NbrAtomSymbols = ('N', 'N', 'O'); | |
4480 @NbrBondSymbols = (undef, undef, undef); | |
4481 | |
4482 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4483 } | |
4484 | |
4485 # Generate 322 keyset key 55 value as 1/0 indicating its presence/absence or | |
4486 # count of its presence in a molecule. | |
4487 # | |
4488 # Key 55 description: Q(OO) | |
4489 # | |
4490 sub _Generate322KeySetKey55 { | |
4491 my($This) = @_; | |
4492 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4493 | |
4494 $CentralAtomSymbol = 'Q'; | |
4495 @NbrAtomSymbols = ('O', 'O'); | |
4496 @NbrBondSymbols = (undef, undef); | |
4497 | |
4498 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4499 } | |
4500 | |
4501 # Generate 322 keyset key 56 value as 1/0 indicating its presence/absence or | |
4502 # count of its presence in a molecule. | |
4503 # | |
4504 # Key 56 description: Q(COO) | |
4505 # | |
4506 sub _Generate322KeySetKey56 { | |
4507 my($This) = @_; | |
4508 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4509 | |
4510 $CentralAtomSymbol = 'Q'; | |
4511 @NbrAtomSymbols = ('C', 'O', 'O'); | |
4512 @NbrBondSymbols = (undef, undef, undef); | |
4513 | |
4514 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4515 } | |
4516 | |
4517 # Generate 322 keyset key 57 value as 1/0 indicating its presence/absence or | |
4518 # count of its presence in a molecule. | |
4519 # | |
4520 # Key 57 description: Q(NOO) | |
4521 # | |
4522 sub _Generate322KeySetKey57 { | |
4523 my($This) = @_; | |
4524 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4525 | |
4526 $CentralAtomSymbol = 'Q'; | |
4527 @NbrAtomSymbols = ('N', 'O', 'O'); | |
4528 @NbrBondSymbols = (undef, undef, undef); | |
4529 | |
4530 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4531 } | |
4532 | |
4533 # Generate 322 keyset key 58 value as 1/0 indicating its presence/absence or | |
4534 # count of its presence in a molecule. | |
4535 # | |
4536 # Key 58 description: Q(OOO) | |
4537 # | |
4538 sub _Generate322KeySetKey58 { | |
4539 my($This) = @_; | |
4540 my($CentralAtomSymbol, @NbrAtomSymbols, @NbrBondSymbols); | |
4541 | |
4542 $CentralAtomSymbol = 'Q'; | |
4543 @NbrAtomSymbols = ('O', 'O', 'O'); | |
4544 @NbrBondSymbols = (undef, undef, undef); | |
4545 | |
4546 return $This->_DetectAtomNeighborhoodKeys($CentralAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols); | |
4547 } | |
4548 | |
4549 # Generate 322 keyset key 59 value as 1/0 indicating its presence/absence or | |
4550 # count of its presence in a molecule. | |
4551 # | |
4552 # Key 59 description: C-C | |
4553 # | |
4554 sub _Generate322KeySetKey59 { | |
4555 my($This) = @_; | |
4556 my($BondSymbol) = '-'; | |
4557 | |
4558 return $This->_DetectBondKeys('C', 'C', $BondSymbol); | |
4559 } | |
4560 | |
4561 # Generate 322 keyset key 60 value as 1/0 indicating its presence/absence or | |
4562 # count of its presence in a molecule. | |
4563 # | |
4564 # Key 60 description: C-N | |
4565 # | |
4566 sub _Generate322KeySetKey60 { | |
4567 my($This) = @_; | |
4568 my($BondSymbol) = '-'; | |
4569 | |
4570 return $This->_DetectBondKeys('C', 'N', $BondSymbol); | |
4571 } | |
4572 | |
4573 # Generate 322 keyset key 61 value as 1/0 indicating its presence/absence or | |
4574 # count of its presence in a molecule. | |
4575 # | |
4576 # Key 61 description: C-O | |
4577 # | |
4578 sub _Generate322KeySetKey61 { | |
4579 my($This) = @_; | |
4580 my($BondSymbol) = '-'; | |
4581 | |
4582 return $This->_DetectBondKeys('C', 'O', $BondSymbol); | |
4583 } | |
4584 | |
4585 # Generate 322 keyset key 62 value as 1/0 indicating its presence/absence or | |
4586 # count of its presence in a molecule. | |
4587 # | |
4588 # Key 62 description: C-S | |
4589 # | |
4590 sub _Generate322KeySetKey62 { | |
4591 my($This) = @_; | |
4592 my($BondSymbol) = '-'; | |
4593 | |
4594 return $This->_DetectBondKeys('C', 'S', $BondSymbol); | |
4595 } | |
4596 | |
4597 # Generate 322 keyset key 63 value as 1/0 indicating its presence/absence or | |
4598 # count of its presence in a molecule. | |
4599 # | |
4600 # Key 63 description: C-Cl | |
4601 # | |
4602 sub _Generate322KeySetKey63 { | |
4603 my($This) = @_; | |
4604 my($BondSymbol) = '-'; | |
4605 | |
4606 return $This->_DetectBondKeys('C', 'Cl', $BondSymbol); | |
4607 } | |
4608 | |
4609 # Generate 322 keyset key 64 value as 1/0 indicating its presence/absence or | |
4610 # count of its presence in a molecule. | |
4611 # | |
4612 # Key 64 description: C-P | |
4613 # | |
4614 sub _Generate322KeySetKey64 { | |
4615 my($This) = @_; | |
4616 my($BondSymbol) = '-'; | |
4617 | |
4618 return $This->_DetectBondKeys('C', 'P', $BondSymbol); | |
4619 } | |
4620 | |
4621 # Generate 322 keyset key 65 value as 1/0 indicating its presence/absence or | |
4622 # count of its presence in a molecule. | |
4623 # | |
4624 # Key 65 description: C-F | |
4625 # | |
4626 sub _Generate322KeySetKey65 { | |
4627 my($This) = @_; | |
4628 my($BondSymbol) = '-'; | |
4629 | |
4630 return $This->_DetectBondKeys('C', 'F', $BondSymbol); | |
4631 } | |
4632 | |
4633 # Generate 322 keyset key 66 value as 1/0 indicating its presence/absence or | |
4634 # count of its presence in a molecule. | |
4635 # | |
4636 # Key 66 description: C-Br | |
4637 # | |
4638 sub _Generate322KeySetKey66 { | |
4639 my($This) = @_; | |
4640 my($BondSymbol) = '-'; | |
4641 | |
4642 return $This->_DetectBondKeys('C', 'Br', $BondSymbol); | |
4643 } | |
4644 | |
4645 # Generate 322 keyset key 67 value as 1/0 indicating its presence/absence or | |
4646 # count of its presence in a molecule. | |
4647 # | |
4648 # Key 67 description: C-Si | |
4649 # | |
4650 sub _Generate322KeySetKey67 { | |
4651 my($This) = @_; | |
4652 my($BondSymbol) = '-'; | |
4653 | |
4654 return $This->_DetectBondKeys('C', 'Si', $BondSymbol); | |
4655 } | |
4656 | |
4657 # Generate 322 keyset key 68 value as 1/0 indicating its presence/absence or | |
4658 # count of its presence in a molecule. | |
4659 # | |
4660 # Key 68 description: C-I | |
4661 # | |
4662 sub _Generate322KeySetKey68 { | |
4663 my($This) = @_; | |
4664 my($BondSymbol) = '-'; | |
4665 | |
4666 return $This->_DetectBondKeys('C', 'I', $BondSymbol); | |
4667 } | |
4668 | |
4669 # Generate 322 keyset key 69 value as 1/0 indicating its presence/absence or | |
4670 # count of its presence in a molecule. | |
4671 # | |
4672 # Key 69 description: C-X | |
4673 # | |
4674 sub _Generate322KeySetKey69 { | |
4675 my($This) = @_; | |
4676 my($BondSymbol) = '-'; | |
4677 | |
4678 return $This->_DetectBondKeys('C', 'Z', $BondSymbol); | |
4679 } | |
4680 | |
4681 # Generate 322 keyset key 70 value as 1/0 indicating its presence/absence or | |
4682 # count of its presence in a molecule. | |
4683 # | |
4684 # Key 70 description: N-N | |
4685 # | |
4686 sub _Generate322KeySetKey70 { | |
4687 my($This) = @_; | |
4688 my($BondSymbol) = '-'; | |
4689 | |
4690 return $This->_DetectBondKeys('N', 'N', $BondSymbol); | |
4691 } | |
4692 | |
4693 # Generate 322 keyset key 71 value as 1/0 indicating its presence/absence or | |
4694 # count of its presence in a molecule. | |
4695 # | |
4696 # Key 71 description: N-O | |
4697 # | |
4698 sub _Generate322KeySetKey71 { | |
4699 my($This) = @_; | |
4700 my($BondSymbol) = '-'; | |
4701 | |
4702 return $This->_DetectBondKeys('N', 'O', $BondSymbol); | |
4703 } | |
4704 | |
4705 # Generate 322 keyset key 72 value as 1/0 indicating its presence/absence or | |
4706 # count of its presence in a molecule. | |
4707 # | |
4708 # Key 72 description: N-S | |
4709 # | |
4710 sub _Generate322KeySetKey72 { | |
4711 my($This) = @_; | |
4712 my($BondSymbol) = '-'; | |
4713 | |
4714 return $This->_DetectBondKeys('N', 'S', $BondSymbol); | |
4715 } | |
4716 | |
4717 # Generate 322 keyset key 73 value as 1/0 indicating its presence/absence or | |
4718 # count of its presence in a molecule. | |
4719 # | |
4720 # Key 73 description: N-Cl | |
4721 # | |
4722 sub _Generate322KeySetKey73 { | |
4723 my($This) = @_; | |
4724 my($BondSymbol) = '-'; | |
4725 | |
4726 return $This->_DetectBondKeys('N', 'Cl', $BondSymbol); | |
4727 } | |
4728 | |
4729 # Generate 322 keyset key 74 value as 1/0 indicating its presence/absence or | |
4730 # count of its presence in a molecule. | |
4731 # | |
4732 # Key 74 description: N-P | |
4733 # | |
4734 sub _Generate322KeySetKey74 { | |
4735 my($This) = @_; | |
4736 my($BondSymbol) = '-'; | |
4737 | |
4738 return $This->_DetectBondKeys('N', 'P', $BondSymbol); | |
4739 } | |
4740 | |
4741 # Generate 322 keyset key 75 value as 1/0 indicating its presence/absence or | |
4742 # count of its presence in a molecule. | |
4743 # | |
4744 # Key 75 description: N-F | |
4745 # | |
4746 sub _Generate322KeySetKey75 { | |
4747 my($This) = @_; | |
4748 my($BondSymbol) = '-'; | |
4749 | |
4750 return $This->_DetectBondKeys('N', 'F', $BondSymbol); | |
4751 } | |
4752 | |
4753 # Generate 322 keyset key 76 value as 1/0 indicating its presence/absence or | |
4754 # count of its presence in a molecule. | |
4755 # | |
4756 # Key 76 description: N-Br | |
4757 # | |
4758 sub _Generate322KeySetKey76 { | |
4759 my($This) = @_; | |
4760 my($BondSymbol) = '-'; | |
4761 | |
4762 return $This->_DetectBondKeys('N', 'Br', $BondSymbol); | |
4763 } | |
4764 | |
4765 # Generate 322 keyset key 77 value as 1/0 indicating its presence/absence or | |
4766 # count of its presence in a molecule. | |
4767 # | |
4768 # Key 77 description: N-Si | |
4769 # | |
4770 sub _Generate322KeySetKey77 { | |
4771 my($This) = @_; | |
4772 my($BondSymbol) = '-'; | |
4773 | |
4774 return $This->_DetectBondKeys('N', 'Si', $BondSymbol); | |
4775 } | |
4776 | |
4777 # Generate 322 keyset key 78 value as 1/0 indicating its presence/absence or | |
4778 # count of its presence in a molecule. | |
4779 # | |
4780 # Key 78 description: N-I | |
4781 # | |
4782 sub _Generate322KeySetKey78 { | |
4783 my($This) = @_; | |
4784 my($BondSymbol) = '-'; | |
4785 | |
4786 return $This->_DetectBondKeys('N', 'I', $BondSymbol); | |
4787 } | |
4788 | |
4789 # Generate 322 keyset key 79 value as 1/0 indicating its presence/absence or | |
4790 # count of its presence in a molecule. | |
4791 # | |
4792 # Key 79 description: N-X | |
4793 # | |
4794 sub _Generate322KeySetKey79 { | |
4795 my($This) = @_; | |
4796 my($BondSymbol) = '-'; | |
4797 | |
4798 return $This->_DetectBondKeys('N', 'Z', $BondSymbol); | |
4799 } | |
4800 | |
4801 # Generate 322 keyset key 80 value as 1/0 indicating its presence/absence or | |
4802 # count of its presence in a molecule. | |
4803 # | |
4804 # Key 80 description: O-O | |
4805 # | |
4806 sub _Generate322KeySetKey80 { | |
4807 my($This) = @_; | |
4808 my($BondSymbol) = '-'; | |
4809 | |
4810 return $This->_DetectBondKeys('O', 'O', $BondSymbol); | |
4811 } | |
4812 | |
4813 # Generate 322 keyset key 81 value as 1/0 indicating its presence/absence or | |
4814 # count of its presence in a molecule. | |
4815 # | |
4816 # Key 81 description: O-S | |
4817 # | |
4818 sub _Generate322KeySetKey81 { | |
4819 my($This) = @_; | |
4820 my($BondSymbol) = '-'; | |
4821 | |
4822 return $This->_DetectBondKeys('O', 'S', $BondSymbol); | |
4823 } | |
4824 | |
4825 # Generate 322 keyset key 82 value as 1/0 indicating its presence/absence or | |
4826 # count of its presence in a molecule. | |
4827 # | |
4828 # Key 82 description: O-Cl | |
4829 # | |
4830 sub _Generate322KeySetKey82 { | |
4831 my($This) = @_; | |
4832 my($BondSymbol) = '-'; | |
4833 | |
4834 return $This->_DetectBondKeys('O', 'Cl', $BondSymbol); | |
4835 } | |
4836 | |
4837 # Generate 322 keyset key 83 value as 1/0 indicating its presence/absence or | |
4838 # count of its presence in a molecule. | |
4839 # | |
4840 # Key 83 description: O-P | |
4841 # | |
4842 sub _Generate322KeySetKey83 { | |
4843 my($This) = @_; | |
4844 my($BondSymbol) = '-'; | |
4845 | |
4846 return $This->_DetectBondKeys('O', 'P', $BondSymbol); | |
4847 } | |
4848 | |
4849 # Generate 322 keyset key 84 value as 1/0 indicating its presence/absence or | |
4850 # count of its presence in a molecule. | |
4851 # | |
4852 # Key 84 description: O-F | |
4853 # | |
4854 sub _Generate322KeySetKey84 { | |
4855 my($This) = @_; | |
4856 my($BondSymbol) = '-'; | |
4857 | |
4858 return $This->_DetectBondKeys('O', 'F', $BondSymbol); | |
4859 } | |
4860 | |
4861 # Generate 322 keyset key 85 value as 1/0 indicating its presence/absence or | |
4862 # count of its presence in a molecule. | |
4863 # | |
4864 # Key 85 description: O-Br | |
4865 # | |
4866 sub _Generate322KeySetKey85 { | |
4867 my($This) = @_; | |
4868 my($BondSymbol) = '-'; | |
4869 | |
4870 return $This->_DetectBondKeys('O', 'Br', $BondSymbol); | |
4871 } | |
4872 | |
4873 # Generate 322 keyset key 86 value as 1/0 indicating its presence/absence or | |
4874 # count of its presence in a molecule. | |
4875 # | |
4876 # Key 86 description: O-Si | |
4877 # | |
4878 sub _Generate322KeySetKey86 { | |
4879 my($This) = @_; | |
4880 my($BondSymbol) = '-'; | |
4881 | |
4882 return $This->_DetectBondKeys('O', 'Si', $BondSymbol); | |
4883 } | |
4884 | |
4885 # Generate 322 keyset key 87 value as 1/0 indicating its presence/absence or | |
4886 # count of its presence in a molecule. | |
4887 # | |
4888 # Key 87 description: O-I | |
4889 # | |
4890 sub _Generate322KeySetKey87 { | |
4891 my($This) = @_; | |
4892 my($BondSymbol) = '-'; | |
4893 | |
4894 return $This->_DetectBondKeys('O', 'I', $BondSymbol); | |
4895 } | |
4896 | |
4897 # Generate 322 keyset key 88 value as 1/0 indicating its presence/absence or | |
4898 # count of its presence in a molecule. | |
4899 # | |
4900 # Key 88 description: O-X | |
4901 # | |
4902 sub _Generate322KeySetKey88 { | |
4903 my($This) = @_; | |
4904 my($BondSymbol) = '-'; | |
4905 | |
4906 return $This->_DetectBondKeys('O', 'Z', $BondSymbol); | |
4907 } | |
4908 | |
4909 # Generate 322 keyset key 89 value as 1/0 indicating its presence/absence or | |
4910 # count of its presence in a molecule. | |
4911 # | |
4912 # Key 89 description: S-S | |
4913 # | |
4914 sub _Generate322KeySetKey89 { | |
4915 my($This) = @_; | |
4916 my($BondSymbol) = '-'; | |
4917 | |
4918 return $This->_DetectBondKeys('S', 'S', $BondSymbol); | |
4919 } | |
4920 | |
4921 # Generate 322 keyset key 90 value as 1/0 indicating its presence/absence or | |
4922 # count of its presence in a molecule. | |
4923 # | |
4924 # Key 90 description: S-Cl | |
4925 # | |
4926 sub _Generate322KeySetKey90 { | |
4927 my($This) = @_; | |
4928 my($BondSymbol) = '-'; | |
4929 | |
4930 return $This->_DetectBondKeys('S', 'Cl', $BondSymbol); | |
4931 } | |
4932 | |
4933 # Generate 322 keyset key 91 value as 1/0 indicating its presence/absence or | |
4934 # count of its presence in a molecule. | |
4935 # | |
4936 # Key 91 description: S-P | |
4937 # | |
4938 sub _Generate322KeySetKey91 { | |
4939 my($This) = @_; | |
4940 my($BondSymbol) = '-'; | |
4941 | |
4942 return $This->_DetectBondKeys('S', 'P', $BondSymbol); | |
4943 } | |
4944 | |
4945 # Generate 322 keyset key 92 value as 1/0 indicating its presence/absence or | |
4946 # count of its presence in a molecule. | |
4947 # | |
4948 # Key 92 description: S-F | |
4949 # | |
4950 sub _Generate322KeySetKey92 { | |
4951 my($This) = @_; | |
4952 my($BondSymbol) = '-'; | |
4953 | |
4954 return $This->_DetectBondKeys('S', 'F', $BondSymbol); | |
4955 } | |
4956 | |
4957 # Generate 322 keyset key 93 value as 1/0 indicating its presence/absence or | |
4958 # count of its presence in a molecule. | |
4959 # | |
4960 # Key 93 description: S-Br | |
4961 # | |
4962 sub _Generate322KeySetKey93 { | |
4963 my($This) = @_; | |
4964 my($BondSymbol) = '-'; | |
4965 | |
4966 return $This->_DetectBondKeys('S', 'Br', $BondSymbol); | |
4967 } | |
4968 | |
4969 # Generate 322 keyset key 94 value as 1/0 indicating its presence/absence or | |
4970 # count of its presence in a molecule. | |
4971 # | |
4972 # Key 94 description: S-Si | |
4973 # | |
4974 sub _Generate322KeySetKey94 { | |
4975 my($This) = @_; | |
4976 my($BondSymbol) = '-'; | |
4977 | |
4978 return $This->_DetectBondKeys('S', 'Si', $BondSymbol); | |
4979 } | |
4980 | |
4981 # Generate 322 keyset key 95 value as 1/0 indicating its presence/absence or | |
4982 # count of its presence in a molecule. | |
4983 # | |
4984 # Key 95 description: S-I | |
4985 # | |
4986 sub _Generate322KeySetKey95 { | |
4987 my($This) = @_; | |
4988 my($BondSymbol) = '-'; | |
4989 | |
4990 return $This->_DetectBondKeys('S', 'I', $BondSymbol); | |
4991 } | |
4992 | |
4993 # Generate 322 keyset key 96 value as 1/0 indicating its presence/absence or | |
4994 # count of its presence in a molecule. | |
4995 # | |
4996 # Key 96 description: S-X | |
4997 # | |
4998 sub _Generate322KeySetKey96 { | |
4999 my($This) = @_; | |
5000 my($BondSymbol) = '-'; | |
5001 | |
5002 return $This->_DetectBondKeys('S', 'Z', $BondSymbol); | |
5003 } | |
5004 | |
5005 # Generate 322 keyset key 97 value as 1/0 indicating its presence/absence or | |
5006 # count of its presence in a molecule. | |
5007 # | |
5008 # Key 97 description: Cl-Cl | |
5009 # | |
5010 sub _Generate322KeySetKey97 { | |
5011 my($This) = @_; | |
5012 my($BondSymbol) = '-'; | |
5013 | |
5014 return $This->_DetectBondKeys('Cl', 'Cl', $BondSymbol); | |
5015 } | |
5016 | |
5017 # Generate 322 keyset key 98 value as 1/0 indicating its presence/absence or | |
5018 # count of its presence in a molecule. | |
5019 # | |
5020 # Key 98 description: Cl-P | |
5021 # | |
5022 sub _Generate322KeySetKey98 { | |
5023 my($This) = @_; | |
5024 my($BondSymbol) = '-'; | |
5025 | |
5026 return $This->_DetectBondKeys('Cl', 'P', $BondSymbol); | |
5027 } | |
5028 | |
5029 # Generate 322 keyset key 99 value as 1/0 indicating its presence/absence or | |
5030 # count of its presence in a molecule. | |
5031 # | |
5032 # Key 99 description: Cl-F | |
5033 # | |
5034 sub _Generate322KeySetKey99 { | |
5035 my($This) = @_; | |
5036 my($BondSymbol) = '-'; | |
5037 | |
5038 return $This->_DetectBondKeys('Cl', 'F', $BondSymbol); | |
5039 } | |
5040 | |
5041 # Generate 322 keyset key 100 value as 1/0 indicating its presence/absence or | |
5042 # count of its presence in a molecule. | |
5043 # | |
5044 # Key 100 description: Cl-Br | |
5045 # | |
5046 sub _Generate322KeySetKey100 { | |
5047 my($This) = @_; | |
5048 my($BondSymbol) = '-'; | |
5049 | |
5050 return $This->_DetectBondKeys('Cl', 'Br', $BondSymbol); | |
5051 } | |
5052 | |
5053 # Generate 322 keyset key 101 value as 1/0 indicating its presence/absence or | |
5054 # count of its presence in a molecule. | |
5055 # | |
5056 # Key 101 description: Cl-Si | |
5057 # | |
5058 sub _Generate322KeySetKey101 { | |
5059 my($This) = @_; | |
5060 my($BondSymbol) = '-'; | |
5061 | |
5062 return $This->_DetectBondKeys('Cl', 'Si', $BondSymbol); | |
5063 } | |
5064 | |
5065 # Generate 322 keyset key 102 value as 1/0 indicating its presence/absence or | |
5066 # count of its presence in a molecule. | |
5067 # | |
5068 # Key 102 description: Cl-I | |
5069 # | |
5070 sub _Generate322KeySetKey102 { | |
5071 my($This) = @_; | |
5072 my($BondSymbol) = '-'; | |
5073 | |
5074 return $This->_DetectBondKeys('Cl', 'I', $BondSymbol); | |
5075 } | |
5076 | |
5077 # Generate 322 keyset key 103 value as 1/0 indicating its presence/absence or | |
5078 # count of its presence in a molecule. | |
5079 # | |
5080 # Key 103 description: Cl-X | |
5081 # | |
5082 sub _Generate322KeySetKey103 { | |
5083 my($This) = @_; | |
5084 my($BondSymbol) = '-'; | |
5085 | |
5086 return $This->_DetectBondKeys('Cl', 'Z', $BondSymbol); | |
5087 } | |
5088 | |
5089 # Generate 322 keyset key 104 value as 1/0 indicating its presence/absence or | |
5090 # count of its presence in a molecule. | |
5091 # | |
5092 # Key 104 description: P-P | |
5093 # | |
5094 sub _Generate322KeySetKey104 { | |
5095 my($This) = @_; | |
5096 my($BondSymbol) = '-'; | |
5097 | |
5098 return $This->_DetectBondKeys('P', 'P', $BondSymbol); | |
5099 } | |
5100 | |
5101 # Generate 322 keyset key 105 value as 1/0 indicating its presence/absence or | |
5102 # count of its presence in a molecule. | |
5103 # | |
5104 # Key 105 description: P-F | |
5105 # | |
5106 sub _Generate322KeySetKey105 { | |
5107 my($This) = @_; | |
5108 my($BondSymbol) = '-'; | |
5109 | |
5110 return $This->_DetectBondKeys('P', 'F', $BondSymbol); | |
5111 } | |
5112 | |
5113 # Generate 322 keyset key 106 value as 1/0 indicating its presence/absence or | |
5114 # count of its presence in a molecule. | |
5115 # | |
5116 # Key 106 description: P-Br | |
5117 # | |
5118 sub _Generate322KeySetKey106 { | |
5119 my($This) = @_; | |
5120 my($BondSymbol) = '-'; | |
5121 | |
5122 return $This->_DetectBondKeys('P', 'Br', $BondSymbol); | |
5123 } | |
5124 | |
5125 # Generate 322 keyset key 107 value as 1/0 indicating its presence/absence or | |
5126 # count of its presence in a molecule. | |
5127 # | |
5128 # Key 107 description: P-Si | |
5129 # | |
5130 sub _Generate322KeySetKey107 { | |
5131 my($This) = @_; | |
5132 my($BondSymbol) = '-'; | |
5133 | |
5134 return $This->_DetectBondKeys('P', 'Si', $BondSymbol); | |
5135 } | |
5136 | |
5137 # Generate 322 keyset key 108 value as 1/0 indicating its presence/absence or | |
5138 # count of its presence in a molecule. | |
5139 # | |
5140 # Key 108 description: P-I | |
5141 # | |
5142 sub _Generate322KeySetKey108 { | |
5143 my($This) = @_; | |
5144 my($BondSymbol) = '-'; | |
5145 | |
5146 return $This->_DetectBondKeys('P', 'I', $BondSymbol); | |
5147 } | |
5148 | |
5149 # Generate 322 keyset key 109 value as 1/0 indicating its presence/absence or | |
5150 # count of its presence in a molecule. | |
5151 # | |
5152 # Key 109 description: P-X | |
5153 # | |
5154 sub _Generate322KeySetKey109 { | |
5155 my($This) = @_; | |
5156 my($BondSymbol) = '-'; | |
5157 | |
5158 return $This->_DetectBondKeys('P', 'Z', $BondSymbol); | |
5159 } | |
5160 | |
5161 # Generate 322 keyset key 110 value as 1/0 indicating its presence/absence or | |
5162 # count of its presence in a molecule. | |
5163 # | |
5164 # Key 110 description: F-F | |
5165 # | |
5166 sub _Generate322KeySetKey110 { | |
5167 my($This) = @_; | |
5168 my($BondSymbol) = '-'; | |
5169 | |
5170 return $This->_DetectBondKeys('F', 'F', $BondSymbol); | |
5171 } | |
5172 | |
5173 # Generate 322 keyset key 111 value as 1/0 indicating its presence/absence or | |
5174 # count of its presence in a molecule. | |
5175 # | |
5176 # Key 111 description: F-Br | |
5177 # | |
5178 sub _Generate322KeySetKey111 { | |
5179 my($This) = @_; | |
5180 my($BondSymbol) = '-'; | |
5181 | |
5182 return $This->_DetectBondKeys('F', 'Br', $BondSymbol); | |
5183 } | |
5184 | |
5185 # Generate 322 keyset key 112 value as 1/0 indicating its presence/absence or | |
5186 # count of its presence in a molecule. | |
5187 # | |
5188 # Key 112 description: F-Si | |
5189 # | |
5190 sub _Generate322KeySetKey112 { | |
5191 my($This) = @_; | |
5192 my($BondSymbol) = '-'; | |
5193 | |
5194 return $This->_DetectBondKeys('F', 'Si', $BondSymbol); | |
5195 } | |
5196 | |
5197 # Generate 322 keyset key 113 value as 1/0 indicating its presence/absence or | |
5198 # count of its presence in a molecule. | |
5199 # | |
5200 # Key 113 description: F-I | |
5201 # | |
5202 sub _Generate322KeySetKey113 { | |
5203 my($This) = @_; | |
5204 my($BondSymbol) = '-'; | |
5205 | |
5206 return $This->_DetectBondKeys('F', 'I', $BondSymbol); | |
5207 } | |
5208 | |
5209 # Generate 322 keyset key 114 value as 1/0 indicating its presence/absence or | |
5210 # count of its presence in a molecule. | |
5211 # | |
5212 # Key 114 description: F-X | |
5213 # | |
5214 sub _Generate322KeySetKey114 { | |
5215 my($This) = @_; | |
5216 my($BondSymbol) = '-'; | |
5217 | |
5218 return $This->_DetectBondKeys('F', 'Z', $BondSymbol); | |
5219 } | |
5220 | |
5221 # Generate 322 keyset key 115 value as 1/0 indicating its presence/absence or | |
5222 # count of its presence in a molecule. | |
5223 # | |
5224 # Key 115 description: Br-Br | |
5225 # | |
5226 sub _Generate322KeySetKey115 { | |
5227 my($This) = @_; | |
5228 my($BondSymbol) = '-'; | |
5229 | |
5230 return $This->_DetectBondKeys('Br', 'Br', $BondSymbol); | |
5231 } | |
5232 | |
5233 # Generate 322 keyset key 116 value as 1/0 indicating its presence/absence or | |
5234 # count of its presence in a molecule. | |
5235 # | |
5236 # Key 116 description: Br-Si | |
5237 # | |
5238 sub _Generate322KeySetKey116 { | |
5239 my($This) = @_; | |
5240 my($BondSymbol) = '-'; | |
5241 | |
5242 return $This->_DetectBondKeys('Br', 'Si', $BondSymbol); | |
5243 } | |
5244 | |
5245 # Generate 322 keyset key 117 value as 1/0 indicating its presence/absence or | |
5246 # count of its presence in a molecule. | |
5247 # | |
5248 # Key 117 description: Br-I | |
5249 # | |
5250 sub _Generate322KeySetKey117 { | |
5251 my($This) = @_; | |
5252 my($BondSymbol) = '-'; | |
5253 | |
5254 return $This->_DetectBondKeys('Br', 'I', $BondSymbol); | |
5255 } | |
5256 | |
5257 # Generate 322 keyset key 118 value as 1/0 indicating its presence/absence or | |
5258 # count of its presence in a molecule. | |
5259 # | |
5260 # Key 118 description: Br-X | |
5261 # | |
5262 sub _Generate322KeySetKey118 { | |
5263 my($This) = @_; | |
5264 my($BondSymbol) = '-'; | |
5265 | |
5266 return $This->_DetectBondKeys('Br', 'Z', $BondSymbol); | |
5267 } | |
5268 | |
5269 # Generate 322 keyset key 119 value as 1/0 indicating its presence/absence or | |
5270 # count of its presence in a molecule. | |
5271 # | |
5272 # Key 119 description: Si-Si | |
5273 # | |
5274 sub _Generate322KeySetKey119 { | |
5275 my($This) = @_; | |
5276 my($BondSymbol) = '-'; | |
5277 | |
5278 return $This->_DetectBondKeys('Si', 'Si', $BondSymbol); | |
5279 } | |
5280 | |
5281 # Generate 322 keyset key 120 value as 1/0 indicating its presence/absence or | |
5282 # count of its presence in a molecule. | |
5283 # | |
5284 # Key 120 description: Si-I | |
5285 # | |
5286 sub _Generate322KeySetKey120 { | |
5287 my($This) = @_; | |
5288 my($BondSymbol) = '-'; | |
5289 | |
5290 return $This->_DetectBondKeys('Si', 'I', $BondSymbol); | |
5291 } | |
5292 | |
5293 # Generate 322 keyset key 121 value as 1/0 indicating its presence/absence or | |
5294 # count of its presence in a molecule. | |
5295 # | |
5296 # Key 121 description: Si-X | |
5297 # | |
5298 sub _Generate322KeySetKey121 { | |
5299 my($This) = @_; | |
5300 my($BondSymbol) = '-'; | |
5301 | |
5302 return $This->_DetectBondKeys('Si', 'Z', $BondSymbol); | |
5303 } | |
5304 | |
5305 # Generate 322 keyset key 122 value as 1/0 indicating its presence/absence or | |
5306 # count of its presence in a molecule. | |
5307 # | |
5308 # Key 122 description: I-I | |
5309 # | |
5310 sub _Generate322KeySetKey122 { | |
5311 my($This) = @_; | |
5312 my($BondSymbol) = '-'; | |
5313 | |
5314 return $This->_DetectBondKeys('I', 'I', $BondSymbol); | |
5315 } | |
5316 | |
5317 # Generate 322 keyset key 123 value as 1/0 indicating its presence/absence or | |
5318 # count of its presence in a molecule. | |
5319 # | |
5320 # Key 123 description: I-X | |
5321 # | |
5322 sub _Generate322KeySetKey123 { | |
5323 my($This) = @_; | |
5324 my($BondSymbol) = '-'; | |
5325 | |
5326 return $This->_DetectBondKeys('I', 'Z', $BondSymbol); | |
5327 } | |
5328 | |
5329 # Generate 322 keyset key 124 value as 1/0 indicating its presence/absence or | |
5330 # count of its presence in a molecule. | |
5331 # | |
5332 # Key 124 description: X-X | |
5333 # | |
5334 sub _Generate322KeySetKey124 { | |
5335 my($This) = @_; | |
5336 my($BondSymbol) = '-'; | |
5337 | |
5338 return $This->_DetectBondKeys('Z', 'Z', $BondSymbol); | |
5339 } | |
5340 | |
5341 # Generate 322 keyset key 125 value as 1/0 indicating its presence/absence or | |
5342 # count of its presence in a molecule. | |
5343 # | |
5344 # Key 125 description: C=C | |
5345 # | |
5346 sub _Generate322KeySetKey125 { | |
5347 my($This) = @_; | |
5348 my($BondSymbol) = '='; | |
5349 | |
5350 return $This->_DetectBondKeys('C', 'C', $BondSymbol); | |
5351 } | |
5352 | |
5353 # Generate 322 keyset key 126 value as 1/0 indicating its presence/absence or | |
5354 # count of its presence in a molecule. | |
5355 # | |
5356 # Key 126 description: C=N | |
5357 # | |
5358 sub _Generate322KeySetKey126 { | |
5359 my($This) = @_; | |
5360 my($BondSymbol) = '='; | |
5361 | |
5362 return $This->_DetectBondKeys('C', 'N', $BondSymbol); | |
5363 } | |
5364 | |
5365 # Generate 322 keyset key 127 value as 1/0 indicating its presence/absence or | |
5366 # count of its presence in a molecule. | |
5367 # | |
5368 # Key 127 description: C=O | |
5369 # | |
5370 sub _Generate322KeySetKey127 { | |
5371 my($This) = @_; | |
5372 my($BondSymbol) = '='; | |
5373 | |
5374 return $This->_DetectBondKeys('C', 'O', $BondSymbol); | |
5375 } | |
5376 | |
5377 # Generate 322 keyset key 128 value as 1/0 indicating its presence/absence or | |
5378 # count of its presence in a molecule. | |
5379 # | |
5380 # Key 128 description: C=S | |
5381 # | |
5382 sub _Generate322KeySetKey128 { | |
5383 my($This) = @_; | |
5384 my($BondSymbol) = '='; | |
5385 | |
5386 return $This->_DetectBondKeys('C', 'S', $BondSymbol); | |
5387 } | |
5388 | |
5389 # Generate 322 keyset key 129 value as 1/0 indicating its presence/absence or | |
5390 # count of its presence in a molecule. | |
5391 # | |
5392 # Key 129 description: C=Cl | |
5393 # | |
5394 sub _Generate322KeySetKey129 { | |
5395 my($This) = @_; | |
5396 my($BondSymbol) = '='; | |
5397 | |
5398 return $This->_DetectBondKeys('C', 'Cl', $BondSymbol); | |
5399 } | |
5400 | |
5401 # Generate 322 keyset key 130 value as 1/0 indicating its presence/absence or | |
5402 # count of its presence in a molecule. | |
5403 # | |
5404 # Key 130 description: C=P | |
5405 # | |
5406 sub _Generate322KeySetKey130 { | |
5407 my($This) = @_; | |
5408 my($BondSymbol) = '='; | |
5409 | |
5410 return $This->_DetectBondKeys('C', 'P', $BondSymbol); | |
5411 } | |
5412 | |
5413 # Generate 322 keyset key 131 value as 1/0 indicating its presence/absence or | |
5414 # count of its presence in a molecule. | |
5415 # | |
5416 # Key 131 description: C=F | |
5417 # | |
5418 sub _Generate322KeySetKey131 { | |
5419 my($This) = @_; | |
5420 my($BondSymbol) = '='; | |
5421 | |
5422 return $This->_DetectBondKeys('C', 'F', $BondSymbol); | |
5423 } | |
5424 | |
5425 # Generate 322 keyset key 132 value as 1/0 indicating its presence/absence or | |
5426 # count of its presence in a molecule. | |
5427 # | |
5428 # Key 132 description: C=Br | |
5429 # | |
5430 sub _Generate322KeySetKey132 { | |
5431 my($This) = @_; | |
5432 my($BondSymbol) = '='; | |
5433 | |
5434 return $This->_DetectBondKeys('C', 'Br', $BondSymbol); | |
5435 } | |
5436 | |
5437 # Generate 322 keyset key 133 value as 1/0 indicating its presence/absence or | |
5438 # count of its presence in a molecule. | |
5439 # | |
5440 # Key 133 description: C=Si | |
5441 # | |
5442 sub _Generate322KeySetKey133 { | |
5443 my($This) = @_; | |
5444 my($BondSymbol) = '='; | |
5445 | |
5446 return $This->_DetectBondKeys('C', 'Si', $BondSymbol); | |
5447 } | |
5448 | |
5449 # Generate 322 keyset key 134 value as 1/0 indicating its presence/absence or | |
5450 # count of its presence in a molecule. | |
5451 # | |
5452 # Key 134 description: C=I | |
5453 # | |
5454 sub _Generate322KeySetKey134 { | |
5455 my($This) = @_; | |
5456 my($BondSymbol) = '='; | |
5457 | |
5458 return $This->_DetectBondKeys('C', 'I', $BondSymbol); | |
5459 } | |
5460 | |
5461 # Generate 322 keyset key 135 value as 1/0 indicating its presence/absence or | |
5462 # count of its presence in a molecule. | |
5463 # | |
5464 # Key 135 description: C=X | |
5465 # | |
5466 sub _Generate322KeySetKey135 { | |
5467 my($This) = @_; | |
5468 my($BondSymbol) = '='; | |
5469 | |
5470 return $This->_DetectBondKeys('C', 'Z', $BondSymbol); | |
5471 } | |
5472 | |
5473 # Generate 322 keyset key 136 value as 1/0 indicating its presence/absence or | |
5474 # count of its presence in a molecule. | |
5475 # | |
5476 # Key 136 description: N=N | |
5477 # | |
5478 sub _Generate322KeySetKey136 { | |
5479 my($This) = @_; | |
5480 my($BondSymbol) = '='; | |
5481 | |
5482 return $This->_DetectBondKeys('N', 'N', $BondSymbol); | |
5483 } | |
5484 | |
5485 # Generate 322 keyset key 137 value as 1/0 indicating its presence/absence or | |
5486 # count of its presence in a molecule. | |
5487 # | |
5488 # Key 137 description: N=O | |
5489 # | |
5490 sub _Generate322KeySetKey137 { | |
5491 my($This) = @_; | |
5492 my($BondSymbol) = '='; | |
5493 | |
5494 return $This->_DetectBondKeys('N', 'O', $BondSymbol); | |
5495 } | |
5496 | |
5497 # Generate 322 keyset key 138 value as 1/0 indicating its presence/absence or | |
5498 # count of its presence in a molecule. | |
5499 # | |
5500 # Key 138 description: N=S | |
5501 # | |
5502 sub _Generate322KeySetKey138 { | |
5503 my($This) = @_; | |
5504 my($BondSymbol) = '='; | |
5505 | |
5506 return $This->_DetectBondKeys('N', 'S', $BondSymbol); | |
5507 } | |
5508 | |
5509 # Generate 322 keyset key 139 value as 1/0 indicating its presence/absence or | |
5510 # count of its presence in a molecule. | |
5511 # | |
5512 # Key 139 description: N=Cl | |
5513 # | |
5514 sub _Generate322KeySetKey139 { | |
5515 my($This) = @_; | |
5516 my($BondSymbol) = '='; | |
5517 | |
5518 return $This->_DetectBondKeys('N', 'Cl', $BondSymbol); | |
5519 } | |
5520 | |
5521 # Generate 322 keyset key 140 value as 1/0 indicating its presence/absence or | |
5522 # count of its presence in a molecule. | |
5523 # | |
5524 # Key 140 description: N=P | |
5525 # | |
5526 sub _Generate322KeySetKey140 { | |
5527 my($This) = @_; | |
5528 my($BondSymbol) = '='; | |
5529 | |
5530 return $This->_DetectBondKeys('N', 'P', $BondSymbol); | |
5531 } | |
5532 | |
5533 # Generate 322 keyset key 141 value as 1/0 indicating its presence/absence or | |
5534 # count of its presence in a molecule. | |
5535 # | |
5536 # Key 141 description: N=F | |
5537 # | |
5538 sub _Generate322KeySetKey141 { | |
5539 my($This) = @_; | |
5540 my($BondSymbol) = '='; | |
5541 | |
5542 return $This->_DetectBondKeys('N', 'F', $BondSymbol); | |
5543 } | |
5544 | |
5545 # Generate 322 keyset key 142 value as 1/0 indicating its presence/absence or | |
5546 # count of its presence in a molecule. | |
5547 # | |
5548 # Key 142 description: N=Br | |
5549 # | |
5550 sub _Generate322KeySetKey142 { | |
5551 my($This) = @_; | |
5552 my($BondSymbol) = '='; | |
5553 | |
5554 return $This->_DetectBondKeys('N', 'Br', $BondSymbol); | |
5555 } | |
5556 | |
5557 # Generate 322 keyset key 143 value as 1/0 indicating its presence/absence or | |
5558 # count of its presence in a molecule. | |
5559 # | |
5560 # Key 143 description: N=Si | |
5561 # | |
5562 sub _Generate322KeySetKey143 { | |
5563 my($This) = @_; | |
5564 my($BondSymbol) = '='; | |
5565 | |
5566 return $This->_DetectBondKeys('N', 'Si', $BondSymbol); | |
5567 } | |
5568 | |
5569 # Generate 322 keyset key 144 value as 1/0 indicating its presence/absence or | |
5570 # count of its presence in a molecule. | |
5571 # | |
5572 # Key 144 description: N=I | |
5573 # | |
5574 sub _Generate322KeySetKey144 { | |
5575 my($This) = @_; | |
5576 my($BondSymbol) = '='; | |
5577 | |
5578 return $This->_DetectBondKeys('N', 'I', $BondSymbol); | |
5579 } | |
5580 | |
5581 # Generate 322 keyset key 145 value as 1/0 indicating its presence/absence or | |
5582 # count of its presence in a molecule. | |
5583 # | |
5584 # Key 145 description: N=X | |
5585 # | |
5586 sub _Generate322KeySetKey145 { | |
5587 my($This) = @_; | |
5588 my($BondSymbol) = '='; | |
5589 | |
5590 return $This->_DetectBondKeys('N', 'Z', $BondSymbol); | |
5591 } | |
5592 | |
5593 # Generate 322 keyset key 146 value as 1/0 indicating its presence/absence or | |
5594 # count of its presence in a molecule. | |
5595 # | |
5596 # Key 146 description: O=O | |
5597 # | |
5598 sub _Generate322KeySetKey146 { | |
5599 my($This) = @_; | |
5600 my($BondSymbol) = '='; | |
5601 | |
5602 return $This->_DetectBondKeys('O', 'O', $BondSymbol); | |
5603 } | |
5604 | |
5605 # Generate 322 keyset key 147 value as 1/0 indicating its presence/absence or | |
5606 # count of its presence in a molecule. | |
5607 # | |
5608 # Key 147 description: O=S | |
5609 # | |
5610 sub _Generate322KeySetKey147 { | |
5611 my($This) = @_; | |
5612 my($BondSymbol) = '='; | |
5613 | |
5614 return $This->_DetectBondKeys('O', 'S', $BondSymbol); | |
5615 } | |
5616 | |
5617 # Generate 322 keyset key 148 value as 1/0 indicating its presence/absence or | |
5618 # count of its presence in a molecule. | |
5619 # | |
5620 # Key 148 description: O=Cl | |
5621 # | |
5622 sub _Generate322KeySetKey148 { | |
5623 my($This) = @_; | |
5624 my($BondSymbol) = '='; | |
5625 | |
5626 return $This->_DetectBondKeys('O', 'Cl', $BondSymbol); | |
5627 } | |
5628 | |
5629 # Generate 322 keyset key 149 value as 1/0 indicating its presence/absence or | |
5630 # count of its presence in a molecule. | |
5631 # | |
5632 # Key 149 description: O=P | |
5633 # | |
5634 sub _Generate322KeySetKey149 { | |
5635 my($This) = @_; | |
5636 my($BondSymbol) = '='; | |
5637 | |
5638 return $This->_DetectBondKeys('O', 'P', $BondSymbol); | |
5639 } | |
5640 | |
5641 # Generate 322 keyset key 150 value as 1/0 indicating its presence/absence or | |
5642 # count of its presence in a molecule. | |
5643 # | |
5644 # Key 150 description: O=F | |
5645 # | |
5646 sub _Generate322KeySetKey150 { | |
5647 my($This) = @_; | |
5648 my($BondSymbol) = '='; | |
5649 | |
5650 return $This->_DetectBondKeys('O', 'F', $BondSymbol); | |
5651 } | |
5652 | |
5653 # Generate 322 keyset key 151 value as 1/0 indicating its presence/absence or | |
5654 # count of its presence in a molecule. | |
5655 # | |
5656 # Key 151 description: O=Br | |
5657 # | |
5658 sub _Generate322KeySetKey151 { | |
5659 my($This) = @_; | |
5660 my($BondSymbol) = '='; | |
5661 | |
5662 return $This->_DetectBondKeys('O', 'Br', $BondSymbol); | |
5663 } | |
5664 | |
5665 # Generate 322 keyset key 152 value as 1/0 indicating its presence/absence or | |
5666 # count of its presence in a molecule. | |
5667 # | |
5668 # Key 152 description: O=Si | |
5669 # | |
5670 sub _Generate322KeySetKey152 { | |
5671 my($This) = @_; | |
5672 my($BondSymbol) = '='; | |
5673 | |
5674 return $This->_DetectBondKeys('O', 'Si', $BondSymbol); | |
5675 } | |
5676 | |
5677 # Generate 322 keyset key 153 value as 1/0 indicating its presence/absence or | |
5678 # count of its presence in a molecule. | |
5679 # | |
5680 # Key 153 description: O=I | |
5681 # | |
5682 sub _Generate322KeySetKey153 { | |
5683 my($This) = @_; | |
5684 my($BondSymbol) = '='; | |
5685 | |
5686 return $This->_DetectBondKeys('O', 'I', $BondSymbol); | |
5687 } | |
5688 | |
5689 # Generate 322 keyset key 154 value as 1/0 indicating its presence/absence or | |
5690 # count of its presence in a molecule. | |
5691 # | |
5692 # Key 154 description: O=X | |
5693 # | |
5694 sub _Generate322KeySetKey154 { | |
5695 my($This) = @_; | |
5696 my($BondSymbol) = '='; | |
5697 | |
5698 return $This->_DetectBondKeys('O', 'Z', $BondSymbol); | |
5699 } | |
5700 | |
5701 # Generate 322 keyset key 155 value as 1/0 indicating its presence/absence or | |
5702 # count of its presence in a molecule. | |
5703 # | |
5704 # Key 155 description: S=S | |
5705 # | |
5706 sub _Generate322KeySetKey155 { | |
5707 my($This) = @_; | |
5708 my($BondSymbol) = '='; | |
5709 | |
5710 return $This->_DetectBondKeys('S', 'S', $BondSymbol); | |
5711 } | |
5712 | |
5713 # Generate 322 keyset key 156 value as 1/0 indicating its presence/absence or | |
5714 # count of its presence in a molecule. | |
5715 # | |
5716 # Key 156 description: S=Cl | |
5717 # | |
5718 sub _Generate322KeySetKey156 { | |
5719 my($This) = @_; | |
5720 my($BondSymbol) = '='; | |
5721 | |
5722 return $This->_DetectBondKeys('S', 'Cl', $BondSymbol); | |
5723 } | |
5724 | |
5725 # Generate 322 keyset key 157 value as 1/0 indicating its presence/absence or | |
5726 # count of its presence in a molecule. | |
5727 # | |
5728 # Key 157 description: S=P | |
5729 # | |
5730 sub _Generate322KeySetKey157 { | |
5731 my($This) = @_; | |
5732 my($BondSymbol) = '='; | |
5733 | |
5734 return $This->_DetectBondKeys('S', 'P', $BondSymbol); | |
5735 } | |
5736 | |
5737 # Generate 322 keyset key 158 value as 1/0 indicating its presence/absence or | |
5738 # count of its presence in a molecule. | |
5739 # | |
5740 # Key 158 description: S=F | |
5741 # | |
5742 sub _Generate322KeySetKey158 { | |
5743 my($This) = @_; | |
5744 my($BondSymbol) = '='; | |
5745 | |
5746 return $This->_DetectBondKeys('S', 'F', $BondSymbol); | |
5747 } | |
5748 | |
5749 # Generate 322 keyset key 159 value as 1/0 indicating its presence/absence or | |
5750 # count of its presence in a molecule. | |
5751 # | |
5752 # Key 159 description: S=Br | |
5753 # | |
5754 sub _Generate322KeySetKey159 { | |
5755 my($This) = @_; | |
5756 my($BondSymbol) = '='; | |
5757 | |
5758 return $This->_DetectBondKeys('S', 'Br', $BondSymbol); | |
5759 } | |
5760 | |
5761 # Generate 322 keyset key 160 value as 1/0 indicating its presence/absence or | |
5762 # count of its presence in a molecule. | |
5763 # | |
5764 # Key 160 description: S=Si | |
5765 # | |
5766 sub _Generate322KeySetKey160 { | |
5767 my($This) = @_; | |
5768 my($BondSymbol) = '='; | |
5769 | |
5770 return $This->_DetectBondKeys('S', 'Si', $BondSymbol); | |
5771 } | |
5772 | |
5773 # Generate 322 keyset key 161 value as 1/0 indicating its presence/absence or | |
5774 # count of its presence in a molecule. | |
5775 # | |
5776 # Key 161 description: S=I | |
5777 # | |
5778 sub _Generate322KeySetKey161 { | |
5779 my($This) = @_; | |
5780 my($BondSymbol) = '='; | |
5781 | |
5782 return $This->_DetectBondKeys('S', 'I', $BondSymbol); | |
5783 } | |
5784 | |
5785 # Generate 322 keyset key 162 value as 1/0 indicating its presence/absence or | |
5786 # count of its presence in a molecule. | |
5787 # | |
5788 # Key 162 description: S=X | |
5789 # | |
5790 sub _Generate322KeySetKey162 { | |
5791 my($This) = @_; | |
5792 my($BondSymbol) = '='; | |
5793 | |
5794 return $This->_DetectBondKeys('S', 'Z', $BondSymbol); | |
5795 } | |
5796 | |
5797 # Generate 322 keyset key 163 value as 1/0 indicating its presence/absence or | |
5798 # count of its presence in a molecule. | |
5799 # | |
5800 # Key 163 description: Cl=Cl | |
5801 # | |
5802 sub _Generate322KeySetKey163 { | |
5803 my($This) = @_; | |
5804 my($BondSymbol) = '='; | |
5805 | |
5806 return $This->_DetectBondKeys('Cl', 'Cl', $BondSymbol); | |
5807 } | |
5808 | |
5809 # Generate 322 keyset key 164 value as 1/0 indicating its presence/absence or | |
5810 # count of its presence in a molecule. | |
5811 # | |
5812 # Key 164 description: Cl=P | |
5813 # | |
5814 sub _Generate322KeySetKey164 { | |
5815 my($This) = @_; | |
5816 my($BondSymbol) = '='; | |
5817 | |
5818 return $This->_DetectBondKeys('Cl', 'P', $BondSymbol); | |
5819 } | |
5820 | |
5821 # Generate 322 keyset key 165 value as 1/0 indicating its presence/absence or | |
5822 # count of its presence in a molecule. | |
5823 # | |
5824 # Key 165 description: Cl=F | |
5825 # | |
5826 sub _Generate322KeySetKey165 { | |
5827 my($This) = @_; | |
5828 my($BondSymbol) = '='; | |
5829 | |
5830 return $This->_DetectBondKeys('Cl', 'F', $BondSymbol); | |
5831 } | |
5832 | |
5833 # Generate 322 keyset key 166 value as 1/0 indicating its presence/absence or | |
5834 # count of its presence in a molecule. | |
5835 # | |
5836 # Key 166 description: Cl=Br | |
5837 # | |
5838 sub _Generate322KeySetKey166 { | |
5839 my($This) = @_; | |
5840 my($BondSymbol) = '='; | |
5841 | |
5842 return $This->_DetectBondKeys('Cl', 'Br', $BondSymbol); | |
5843 } | |
5844 | |
5845 # Generate 322 keyset key 167 value as 1/0 indicating its presence/absence or | |
5846 # count of its presence in a molecule. | |
5847 # | |
5848 # Key 167 description: Cl=Si | |
5849 # | |
5850 sub _Generate322KeySetKey167 { | |
5851 my($This) = @_; | |
5852 my($BondSymbol) = '='; | |
5853 | |
5854 return $This->_DetectBondKeys('Cl', 'Si', $BondSymbol); | |
5855 } | |
5856 | |
5857 # Generate 322 keyset key 168 value as 1/0 indicating its presence/absence or | |
5858 # count of its presence in a molecule. | |
5859 # | |
5860 # Key 168 description: Cl=I | |
5861 # | |
5862 sub _Generate322KeySetKey168 { | |
5863 my($This) = @_; | |
5864 my($BondSymbol) = '='; | |
5865 | |
5866 return $This->_DetectBondKeys('Cl', 'I', $BondSymbol); | |
5867 } | |
5868 | |
5869 # Generate 322 keyset key 169 value as 1/0 indicating its presence/absence or | |
5870 # count of its presence in a molecule. | |
5871 # | |
5872 # Key 169 description: Cl=X | |
5873 # | |
5874 sub _Generate322KeySetKey169 { | |
5875 my($This) = @_; | |
5876 my($BondSymbol) = '='; | |
5877 | |
5878 return $This->_DetectBondKeys('Cl', 'Z', $BondSymbol); | |
5879 } | |
5880 | |
5881 # Generate 322 keyset key 170 value as 1/0 indicating its presence/absence or | |
5882 # count of its presence in a molecule. | |
5883 # | |
5884 # Key 170 description: P=P | |
5885 # | |
5886 sub _Generate322KeySetKey170 { | |
5887 my($This) = @_; | |
5888 my($BondSymbol) = '='; | |
5889 | |
5890 return $This->_DetectBondKeys('P', 'P', $BondSymbol); | |
5891 } | |
5892 | |
5893 # Generate 322 keyset key 171 value as 1/0 indicating its presence/absence or | |
5894 # count of its presence in a molecule. | |
5895 # | |
5896 # Key 171 description: P=F | |
5897 # | |
5898 sub _Generate322KeySetKey171 { | |
5899 my($This) = @_; | |
5900 my($BondSymbol) = '='; | |
5901 | |
5902 return $This->_DetectBondKeys('P', 'F', $BondSymbol); | |
5903 } | |
5904 | |
5905 # Generate 322 keyset key 172 value as 1/0 indicating its presence/absence or | |
5906 # count of its presence in a molecule. | |
5907 # | |
5908 # Key 172 description: P=Br | |
5909 # | |
5910 sub _Generate322KeySetKey172 { | |
5911 my($This) = @_; | |
5912 my($BondSymbol) = '='; | |
5913 | |
5914 return $This->_DetectBondKeys('P', 'Br', $BondSymbol); | |
5915 } | |
5916 | |
5917 # Generate 322 keyset key 173 value as 1/0 indicating its presence/absence or | |
5918 # count of its presence in a molecule. | |
5919 # | |
5920 # Key 173 description: P=Si | |
5921 # | |
5922 sub _Generate322KeySetKey173 { | |
5923 my($This) = @_; | |
5924 my($BondSymbol) = '='; | |
5925 | |
5926 return $This->_DetectBondKeys('P', 'Si', $BondSymbol); | |
5927 } | |
5928 | |
5929 # Generate 322 keyset key 174 value as 1/0 indicating its presence/absence or | |
5930 # count of its presence in a molecule. | |
5931 # | |
5932 # Key 174 description: P=I | |
5933 # | |
5934 sub _Generate322KeySetKey174 { | |
5935 my($This) = @_; | |
5936 my($BondSymbol) = '='; | |
5937 | |
5938 return $This->_DetectBondKeys('P', 'I', $BondSymbol); | |
5939 } | |
5940 | |
5941 # Generate 322 keyset key 175 value as 1/0 indicating its presence/absence or | |
5942 # count of its presence in a molecule. | |
5943 # | |
5944 # Key 175 description: P=X | |
5945 # | |
5946 sub _Generate322KeySetKey175 { | |
5947 my($This) = @_; | |
5948 my($BondSymbol) = '='; | |
5949 | |
5950 return $This->_DetectBondKeys('P', 'Z', $BondSymbol); | |
5951 } | |
5952 | |
5953 # Generate 322 keyset key 176 value as 1/0 indicating its presence/absence or | |
5954 # count of its presence in a molecule. | |
5955 # | |
5956 # Key 176 description: F=F | |
5957 # | |
5958 sub _Generate322KeySetKey176 { | |
5959 my($This) = @_; | |
5960 my($BondSymbol) = '='; | |
5961 | |
5962 return $This->_DetectBondKeys('F', 'F', $BondSymbol); | |
5963 } | |
5964 | |
5965 # Generate 322 keyset key 177 value as 1/0 indicating its presence/absence or | |
5966 # count of its presence in a molecule. | |
5967 # | |
5968 # Key 177 description: F=Br | |
5969 # | |
5970 sub _Generate322KeySetKey177 { | |
5971 my($This) = @_; | |
5972 my($BondSymbol) = '='; | |
5973 | |
5974 return $This->_DetectBondKeys('F', 'Br', $BondSymbol); | |
5975 } | |
5976 | |
5977 # Generate 322 keyset key 178 value as 1/0 indicating its presence/absence or | |
5978 # count of its presence in a molecule. | |
5979 # | |
5980 # Key 178 description: F=Si | |
5981 # | |
5982 sub _Generate322KeySetKey178 { | |
5983 my($This) = @_; | |
5984 my($BondSymbol) = '='; | |
5985 | |
5986 return $This->_DetectBondKeys('F', 'Si', $BondSymbol); | |
5987 } | |
5988 | |
5989 # Generate 322 keyset key 179 value as 1/0 indicating its presence/absence or | |
5990 # count of its presence in a molecule. | |
5991 # | |
5992 # Key 179 description: F=I | |
5993 # | |
5994 sub _Generate322KeySetKey179 { | |
5995 my($This) = @_; | |
5996 my($BondSymbol) = '='; | |
5997 | |
5998 return $This->_DetectBondKeys('F', 'I', $BondSymbol); | |
5999 } | |
6000 | |
6001 # Generate 322 keyset key 180 value as 1/0 indicating its presence/absence or | |
6002 # count of its presence in a molecule. | |
6003 # | |
6004 # Key 180 description: F=X | |
6005 # | |
6006 sub _Generate322KeySetKey180 { | |
6007 my($This) = @_; | |
6008 my($BondSymbol) = '='; | |
6009 | |
6010 return $This->_DetectBondKeys('F', 'Z', $BondSymbol); | |
6011 } | |
6012 | |
6013 # Generate 322 keyset key 181 value as 1/0 indicating its presence/absence or | |
6014 # count of its presence in a molecule. | |
6015 # | |
6016 # Key 181 description: Br=Br | |
6017 # | |
6018 sub _Generate322KeySetKey181 { | |
6019 my($This) = @_; | |
6020 my($BondSymbol) = '='; | |
6021 | |
6022 return $This->_DetectBondKeys('Br', 'Br', $BondSymbol); | |
6023 } | |
6024 | |
6025 # Generate 322 keyset key 182 value as 1/0 indicating its presence/absence or | |
6026 # count of its presence in a molecule. | |
6027 # | |
6028 # Key 182 description: Br=Si | |
6029 # | |
6030 sub _Generate322KeySetKey182 { | |
6031 my($This) = @_; | |
6032 my($BondSymbol) = '='; | |
6033 | |
6034 return $This->_DetectBondKeys('Br', 'Si', $BondSymbol); | |
6035 } | |
6036 | |
6037 # Generate 322 keyset key 183 value as 1/0 indicating its presence/absence or | |
6038 # count of its presence in a molecule. | |
6039 # | |
6040 # Key 183 description: Br=I | |
6041 # | |
6042 sub _Generate322KeySetKey183 { | |
6043 my($This) = @_; | |
6044 my($BondSymbol) = '='; | |
6045 | |
6046 return $This->_DetectBondKeys('Br', 'I', $BondSymbol); | |
6047 } | |
6048 | |
6049 # Generate 322 keyset key 184 value as 1/0 indicating its presence/absence or | |
6050 # count of its presence in a molecule. | |
6051 # | |
6052 # Key 184 description: Br=X | |
6053 # | |
6054 sub _Generate322KeySetKey184 { | |
6055 my($This) = @_; | |
6056 my($BondSymbol) = '='; | |
6057 | |
6058 return $This->_DetectBondKeys('Br', 'Z', $BondSymbol); | |
6059 } | |
6060 | |
6061 # Generate 322 keyset key 185 value as 1/0 indicating its presence/absence or | |
6062 # count of its presence in a molecule. | |
6063 # | |
6064 # Key 185 description: Si=Si | |
6065 # | |
6066 sub _Generate322KeySetKey185 { | |
6067 my($This) = @_; | |
6068 my($BondSymbol) = '='; | |
6069 | |
6070 return $This->_DetectBondKeys('Si', 'Si', $BondSymbol); | |
6071 } | |
6072 | |
6073 # Generate 322 keyset key 186 value as 1/0 indicating its presence/absence or | |
6074 # count of its presence in a molecule. | |
6075 # | |
6076 # Key 186 description: Si=I | |
6077 # | |
6078 sub _Generate322KeySetKey186 { | |
6079 my($This) = @_; | |
6080 my($BondSymbol) = '='; | |
6081 | |
6082 return $This->_DetectBondKeys('Si', 'I', $BondSymbol); | |
6083 } | |
6084 | |
6085 # Generate 322 keyset key 187 value as 1/0 indicating its presence/absence or | |
6086 # count of its presence in a molecule. | |
6087 # | |
6088 # Key 187 description: Si=X | |
6089 # | |
6090 sub _Generate322KeySetKey187 { | |
6091 my($This) = @_; | |
6092 my($BondSymbol) = '='; | |
6093 | |
6094 return $This->_DetectBondKeys('Si', 'Z', $BondSymbol); | |
6095 } | |
6096 | |
6097 # Generate 322 keyset key 188 value as 1/0 indicating its presence/absence or | |
6098 # count of its presence in a molecule. | |
6099 # | |
6100 # Key 188 description: I=I | |
6101 # | |
6102 sub _Generate322KeySetKey188 { | |
6103 my($This) = @_; | |
6104 my($BondSymbol) = '='; | |
6105 | |
6106 return $This->_DetectBondKeys('I', 'I', $BondSymbol); | |
6107 } | |
6108 | |
6109 # Generate 322 keyset key 189 value as 1/0 indicating its presence/absence or | |
6110 # count of its presence in a molecule. | |
6111 # | |
6112 # Key 189 description: I=X | |
6113 # | |
6114 sub _Generate322KeySetKey189 { | |
6115 my($This) = @_; | |
6116 my($BondSymbol) = '='; | |
6117 | |
6118 return $This->_DetectBondKeys('I', 'Z', $BondSymbol); | |
6119 } | |
6120 | |
6121 # Generate 322 keyset key 190 value as 1/0 indicating its presence/absence or | |
6122 # count of its presence in a molecule. | |
6123 # | |
6124 # Key 190 description: X=X | |
6125 # | |
6126 sub _Generate322KeySetKey190 { | |
6127 my($This) = @_; | |
6128 my($BondSymbol) = '='; | |
6129 | |
6130 return $This->_DetectBondKeys('Z', 'Z', $BondSymbol); | |
6131 } | |
6132 | |
6133 # Generate 322 keyset key 191 value as 1/0 indicating its presence/absence or | |
6134 # count of its presence in a molecule. | |
6135 # | |
6136 # Key 191 description: C#C | |
6137 # | |
6138 sub _Generate322KeySetKey191 { | |
6139 my($This) = @_; | |
6140 my($BondSymbol) = '#'; | |
6141 | |
6142 return $This->_DetectBondKeys('C', 'C', $BondSymbol); | |
6143 } | |
6144 | |
6145 # Generate 322 keyset key 192 value as 1/0 indicating its presence/absence or | |
6146 # count of its presence in a molecule. | |
6147 # | |
6148 # Key 192 description: C#N | |
6149 # | |
6150 sub _Generate322KeySetKey192 { | |
6151 my($This) = @_; | |
6152 my($BondSymbol) = '#'; | |
6153 | |
6154 return $This->_DetectBondKeys('C', 'N', $BondSymbol); | |
6155 } | |
6156 | |
6157 # Generate 322 keyset key 193 value as 1/0 indicating its presence/absence or | |
6158 # count of its presence in a molecule. | |
6159 # | |
6160 # Key 193 description: C#O | |
6161 # | |
6162 sub _Generate322KeySetKey193 { | |
6163 my($This) = @_; | |
6164 my($BondSymbol) = '#'; | |
6165 | |
6166 return $This->_DetectBondKeys('C', 'O', $BondSymbol); | |
6167 } | |
6168 | |
6169 # Generate 322 keyset key 194 value as 1/0 indicating its presence/absence or | |
6170 # count of its presence in a molecule. | |
6171 # | |
6172 # Key 194 description: C#S | |
6173 # | |
6174 sub _Generate322KeySetKey194 { | |
6175 my($This) = @_; | |
6176 my($BondSymbol) = '#'; | |
6177 | |
6178 return $This->_DetectBondKeys('C', 'S', $BondSymbol); | |
6179 } | |
6180 | |
6181 # Generate 322 keyset key 195 value as 1/0 indicating its presence/absence or | |
6182 # count of its presence in a molecule. | |
6183 # | |
6184 # Key 195 description: C#Cl | |
6185 # | |
6186 sub _Generate322KeySetKey195 { | |
6187 my($This) = @_; | |
6188 my($BondSymbol) = '#'; | |
6189 | |
6190 return $This->_DetectBondKeys('C', 'Cl', $BondSymbol); | |
6191 } | |
6192 | |
6193 # Generate 322 keyset key 196 value as 1/0 indicating its presence/absence or | |
6194 # count of its presence in a molecule. | |
6195 # | |
6196 # Key 196 description: C#P | |
6197 # | |
6198 sub _Generate322KeySetKey196 { | |
6199 my($This) = @_; | |
6200 my($BondSymbol) = '#'; | |
6201 | |
6202 return $This->_DetectBondKeys('C', 'P', $BondSymbol); | |
6203 } | |
6204 | |
6205 # Generate 322 keyset key 197 value as 1/0 indicating its presence/absence or | |
6206 # count of its presence in a molecule. | |
6207 # | |
6208 # Key 197 description: C#F | |
6209 # | |
6210 sub _Generate322KeySetKey197 { | |
6211 my($This) = @_; | |
6212 my($BondSymbol) = '#'; | |
6213 | |
6214 return $This->_DetectBondKeys('C', 'F', $BondSymbol); | |
6215 } | |
6216 | |
6217 # Generate 322 keyset key 198 value as 1/0 indicating its presence/absence or | |
6218 # count of its presence in a molecule. | |
6219 # | |
6220 # Key 198 description: C#Br | |
6221 # | |
6222 sub _Generate322KeySetKey198 { | |
6223 my($This) = @_; | |
6224 my($BondSymbol) = '#'; | |
6225 | |
6226 return $This->_DetectBondKeys('C', 'Br', $BondSymbol); | |
6227 } | |
6228 | |
6229 # Generate 322 keyset key 199 value as 1/0 indicating its presence/absence or | |
6230 # count of its presence in a molecule. | |
6231 # | |
6232 # Key 199 description: C#Si | |
6233 # | |
6234 sub _Generate322KeySetKey199 { | |
6235 my($This) = @_; | |
6236 my($BondSymbol) = '#'; | |
6237 | |
6238 return $This->_DetectBondKeys('C', 'Si', $BondSymbol); | |
6239 } | |
6240 | |
6241 # Generate 322 keyset key 200 value as 1/0 indicating its presence/absence or | |
6242 # count of its presence in a molecule. | |
6243 # | |
6244 # Key 200 description: C#I | |
6245 # | |
6246 sub _Generate322KeySetKey200 { | |
6247 my($This) = @_; | |
6248 my($BondSymbol) = '#'; | |
6249 | |
6250 return $This->_DetectBondKeys('C', 'I', $BondSymbol); | |
6251 } | |
6252 | |
6253 # Generate 322 keyset key 201 value as 1/0 indicating its presence/absence or | |
6254 # count of its presence in a molecule. | |
6255 # | |
6256 # Key 201 description: C#X | |
6257 # | |
6258 sub _Generate322KeySetKey201 { | |
6259 my($This) = @_; | |
6260 my($BondSymbol) = '#'; | |
6261 | |
6262 return $This->_DetectBondKeys('C', 'Z', $BondSymbol); | |
6263 } | |
6264 | |
6265 # Generate 322 keyset key 202 value as 1/0 indicating its presence/absence or | |
6266 # count of its presence in a molecule. | |
6267 # | |
6268 # Key 202 description: N#N | |
6269 # | |
6270 sub _Generate322KeySetKey202 { | |
6271 my($This) = @_; | |
6272 my($BondSymbol) = '#'; | |
6273 | |
6274 return $This->_DetectBondKeys('N', 'N', $BondSymbol); | |
6275 } | |
6276 | |
6277 # Generate 322 keyset key 203 value as 1/0 indicating its presence/absence or | |
6278 # count of its presence in a molecule. | |
6279 # | |
6280 # Key 203 description: N#O | |
6281 # | |
6282 sub _Generate322KeySetKey203 { | |
6283 my($This) = @_; | |
6284 my($BondSymbol) = '#'; | |
6285 | |
6286 return $This->_DetectBondKeys('N', 'O', $BondSymbol); | |
6287 } | |
6288 | |
6289 # Generate 322 keyset key 204 value as 1/0 indicating its presence/absence or | |
6290 # count of its presence in a molecule. | |
6291 # | |
6292 # Key 204 description: N#S | |
6293 # | |
6294 sub _Generate322KeySetKey204 { | |
6295 my($This) = @_; | |
6296 my($BondSymbol) = '#'; | |
6297 | |
6298 return $This->_DetectBondKeys('N', 'S', $BondSymbol); | |
6299 } | |
6300 | |
6301 # Generate 322 keyset key 205 value as 1/0 indicating its presence/absence or | |
6302 # count of its presence in a molecule. | |
6303 # | |
6304 # Key 205 description: N#Cl | |
6305 # | |
6306 sub _Generate322KeySetKey205 { | |
6307 my($This) = @_; | |
6308 my($BondSymbol) = '#'; | |
6309 | |
6310 return $This->_DetectBondKeys('N', 'Cl', $BondSymbol); | |
6311 } | |
6312 | |
6313 # Generate 322 keyset key 206 value as 1/0 indicating its presence/absence or | |
6314 # count of its presence in a molecule. | |
6315 # | |
6316 # Key 206 description: N#P | |
6317 # | |
6318 sub _Generate322KeySetKey206 { | |
6319 my($This) = @_; | |
6320 my($BondSymbol) = '#'; | |
6321 | |
6322 return $This->_DetectBondKeys('N', 'P', $BondSymbol); | |
6323 } | |
6324 | |
6325 # Generate 322 keyset key 207 value as 1/0 indicating its presence/absence or | |
6326 # count of its presence in a molecule. | |
6327 # | |
6328 # Key 207 description: N#F | |
6329 # | |
6330 sub _Generate322KeySetKey207 { | |
6331 my($This) = @_; | |
6332 my($BondSymbol) = '#'; | |
6333 | |
6334 return $This->_DetectBondKeys('N', 'F', $BondSymbol); | |
6335 } | |
6336 | |
6337 # Generate 322 keyset key 208 value as 1/0 indicating its presence/absence or | |
6338 # count of its presence in a molecule. | |
6339 # | |
6340 # Key 208 description: N#Br | |
6341 # | |
6342 sub _Generate322KeySetKey208 { | |
6343 my($This) = @_; | |
6344 my($BondSymbol) = '#'; | |
6345 | |
6346 return $This->_DetectBondKeys('N', 'Br', $BondSymbol); | |
6347 } | |
6348 | |
6349 # Generate 322 keyset key 209 value as 1/0 indicating its presence/absence or | |
6350 # count of its presence in a molecule. | |
6351 # | |
6352 # Key 209 description: N#Si | |
6353 # | |
6354 sub _Generate322KeySetKey209 { | |
6355 my($This) = @_; | |
6356 my($BondSymbol) = '#'; | |
6357 | |
6358 return $This->_DetectBondKeys('N', 'Si', $BondSymbol); | |
6359 } | |
6360 | |
6361 # Generate 322 keyset key 210 value as 1/0 indicating its presence/absence or | |
6362 # count of its presence in a molecule. | |
6363 # | |
6364 # Key 210 description: N#I | |
6365 # | |
6366 sub _Generate322KeySetKey210 { | |
6367 my($This) = @_; | |
6368 my($BondSymbol) = '#'; | |
6369 | |
6370 return $This->_DetectBondKeys('N', 'I', $BondSymbol); | |
6371 } | |
6372 | |
6373 # Generate 322 keyset key 211 value as 1/0 indicating its presence/absence or | |
6374 # count of its presence in a molecule. | |
6375 # | |
6376 # Key 211 description: N#X | |
6377 # | |
6378 sub _Generate322KeySetKey211 { | |
6379 my($This) = @_; | |
6380 my($BondSymbol) = '#'; | |
6381 | |
6382 return $This->_DetectBondKeys('N', 'Z', $BondSymbol); | |
6383 } | |
6384 | |
6385 # Generate 322 keyset key 212 value as 1/0 indicating its presence/absence or | |
6386 # count of its presence in a molecule. | |
6387 # | |
6388 # Key 212 description: O#O | |
6389 # | |
6390 sub _Generate322KeySetKey212 { | |
6391 my($This) = @_; | |
6392 my($BondSymbol) = '#'; | |
6393 | |
6394 return $This->_DetectBondKeys('O', 'O', $BondSymbol); | |
6395 } | |
6396 | |
6397 # Generate 322 keyset key 213 value as 1/0 indicating its presence/absence or | |
6398 # count of its presence in a molecule. | |
6399 # | |
6400 # Key 213 description: O#S | |
6401 # | |
6402 sub _Generate322KeySetKey213 { | |
6403 my($This) = @_; | |
6404 my($BondSymbol) = '#'; | |
6405 | |
6406 return $This->_DetectBondKeys('O', 'S', $BondSymbol); | |
6407 } | |
6408 | |
6409 # Generate 322 keyset key 214 value as 1/0 indicating its presence/absence or | |
6410 # count of its presence in a molecule. | |
6411 # | |
6412 # Key 214 description: O#Cl | |
6413 # | |
6414 sub _Generate322KeySetKey214 { | |
6415 my($This) = @_; | |
6416 my($BondSymbol) = '#'; | |
6417 | |
6418 return $This->_DetectBondKeys('O', 'Cl', $BondSymbol); | |
6419 } | |
6420 | |
6421 # Generate 322 keyset key 215 value as 1/0 indicating its presence/absence or | |
6422 # count of its presence in a molecule. | |
6423 # | |
6424 # Key 215 description: O#P | |
6425 # | |
6426 sub _Generate322KeySetKey215 { | |
6427 my($This) = @_; | |
6428 my($BondSymbol) = '#'; | |
6429 | |
6430 return $This->_DetectBondKeys('O', 'P', $BondSymbol); | |
6431 } | |
6432 | |
6433 # Generate 322 keyset key 216 value as 1/0 indicating its presence/absence or | |
6434 # count of its presence in a molecule. | |
6435 # | |
6436 # Key 216 description: O#F | |
6437 # | |
6438 sub _Generate322KeySetKey216 { | |
6439 my($This) = @_; | |
6440 my($BondSymbol) = '#'; | |
6441 | |
6442 return $This->_DetectBondKeys('O', 'F', $BondSymbol); | |
6443 } | |
6444 | |
6445 # Generate 322 keyset key 217 value as 1/0 indicating its presence/absence or | |
6446 # count of its presence in a molecule. | |
6447 # | |
6448 # Key 217 description: O#Br | |
6449 # | |
6450 sub _Generate322KeySetKey217 { | |
6451 my($This) = @_; | |
6452 my($BondSymbol) = '#'; | |
6453 | |
6454 return $This->_DetectBondKeys('O', 'Br', $BondSymbol); | |
6455 } | |
6456 | |
6457 # Generate 322 keyset key 218 value as 1/0 indicating its presence/absence or | |
6458 # count of its presence in a molecule. | |
6459 # | |
6460 # Key 218 description: O#Si | |
6461 # | |
6462 sub _Generate322KeySetKey218 { | |
6463 my($This) = @_; | |
6464 my($BondSymbol) = '#'; | |
6465 | |
6466 return $This->_DetectBondKeys('O', 'Si', $BondSymbol); | |
6467 } | |
6468 | |
6469 # Generate 322 keyset key 219 value as 1/0 indicating its presence/absence or | |
6470 # count of its presence in a molecule. | |
6471 # | |
6472 # Key 219 description: O#I | |
6473 # | |
6474 sub _Generate322KeySetKey219 { | |
6475 my($This) = @_; | |
6476 my($BondSymbol) = '#'; | |
6477 | |
6478 return $This->_DetectBondKeys('O', 'I', $BondSymbol); | |
6479 } | |
6480 | |
6481 # Generate 322 keyset key 220 value as 1/0 indicating its presence/absence or | |
6482 # count of its presence in a molecule. | |
6483 # | |
6484 # Key 220 description: O#X | |
6485 # | |
6486 sub _Generate322KeySetKey220 { | |
6487 my($This) = @_; | |
6488 my($BondSymbol) = '#'; | |
6489 | |
6490 return $This->_DetectBondKeys('O', 'Z', $BondSymbol); | |
6491 } | |
6492 | |
6493 # Generate 322 keyset key 221 value as 1/0 indicating its presence/absence or | |
6494 # count of its presence in a molecule. | |
6495 # | |
6496 # Key 221 description: S#S | |
6497 # | |
6498 sub _Generate322KeySetKey221 { | |
6499 my($This) = @_; | |
6500 my($BondSymbol) = '#'; | |
6501 | |
6502 return $This->_DetectBondKeys('S', 'S', $BondSymbol); | |
6503 } | |
6504 | |
6505 # Generate 322 keyset key 222 value as 1/0 indicating its presence/absence or | |
6506 # count of its presence in a molecule. | |
6507 # | |
6508 # Key 222 description: S#Cl | |
6509 # | |
6510 sub _Generate322KeySetKey222 { | |
6511 my($This) = @_; | |
6512 my($BondSymbol) = '#'; | |
6513 | |
6514 return $This->_DetectBondKeys('S', 'Cl', $BondSymbol); | |
6515 } | |
6516 | |
6517 # Generate 322 keyset key 223 value as 1/0 indicating its presence/absence or | |
6518 # count of its presence in a molecule. | |
6519 # | |
6520 # Key 223 description: S#P | |
6521 # | |
6522 sub _Generate322KeySetKey223 { | |
6523 my($This) = @_; | |
6524 my($BondSymbol) = '#'; | |
6525 | |
6526 return $This->_DetectBondKeys('S', 'P', $BondSymbol); | |
6527 } | |
6528 | |
6529 # Generate 322 keyset key 224 value as 1/0 indicating its presence/absence or | |
6530 # count of its presence in a molecule. | |
6531 # | |
6532 # Key 224 description: S#F | |
6533 # | |
6534 sub _Generate322KeySetKey224 { | |
6535 my($This) = @_; | |
6536 my($BondSymbol) = '#'; | |
6537 | |
6538 return $This->_DetectBondKeys('S', 'F', $BondSymbol); | |
6539 } | |
6540 | |
6541 # Generate 322 keyset key 225 value as 1/0 indicating its presence/absence or | |
6542 # count of its presence in a molecule. | |
6543 # | |
6544 # Key 225 description: S#Br | |
6545 # | |
6546 sub _Generate322KeySetKey225 { | |
6547 my($This) = @_; | |
6548 my($BondSymbol) = '#'; | |
6549 | |
6550 return $This->_DetectBondKeys('S', 'Br', $BondSymbol); | |
6551 } | |
6552 | |
6553 # Generate 322 keyset key 226 value as 1/0 indicating its presence/absence or | |
6554 # count of its presence in a molecule. | |
6555 # | |
6556 # Key 226 description: S#Si | |
6557 # | |
6558 sub _Generate322KeySetKey226 { | |
6559 my($This) = @_; | |
6560 my($BondSymbol) = '#'; | |
6561 | |
6562 return $This->_DetectBondKeys('S', 'Si', $BondSymbol); | |
6563 } | |
6564 | |
6565 # Generate 322 keyset key 227 value as 1/0 indicating its presence/absence or | |
6566 # count of its presence in a molecule. | |
6567 # | |
6568 # Key 227 description: S#I | |
6569 # | |
6570 sub _Generate322KeySetKey227 { | |
6571 my($This) = @_; | |
6572 my($BondSymbol) = '#'; | |
6573 | |
6574 return $This->_DetectBondKeys('S', 'I', $BondSymbol); | |
6575 } | |
6576 | |
6577 # Generate 322 keyset key 228 value as 1/0 indicating its presence/absence or | |
6578 # count of its presence in a molecule. | |
6579 # | |
6580 # Key 228 description: S#X | |
6581 # | |
6582 sub _Generate322KeySetKey228 { | |
6583 my($This) = @_; | |
6584 my($BondSymbol) = '#'; | |
6585 | |
6586 return $This->_DetectBondKeys('S', 'Z', $BondSymbol); | |
6587 } | |
6588 | |
6589 # Generate 322 keyset key 229 value as 1/0 indicating its presence/absence or | |
6590 # count of its presence in a molecule. | |
6591 # | |
6592 # Key 229 description: Cl#Cl | |
6593 # | |
6594 sub _Generate322KeySetKey229 { | |
6595 my($This) = @_; | |
6596 my($BondSymbol) = '#'; | |
6597 | |
6598 return $This->_DetectBondKeys('Cl', 'Cl', $BondSymbol); | |
6599 } | |
6600 | |
6601 # Generate 322 keyset key 230 value as 1/0 indicating its presence/absence or | |
6602 # count of its presence in a molecule. | |
6603 # | |
6604 # Key 230 description: Cl#P | |
6605 # | |
6606 sub _Generate322KeySetKey230 { | |
6607 my($This) = @_; | |
6608 my($BondSymbol) = '#'; | |
6609 | |
6610 return $This->_DetectBondKeys('Cl', 'P', $BondSymbol); | |
6611 } | |
6612 | |
6613 # Generate 322 keyset key 231 value as 1/0 indicating its presence/absence or | |
6614 # count of its presence in a molecule. | |
6615 # | |
6616 # Key 231 description: Cl#F | |
6617 # | |
6618 sub _Generate322KeySetKey231 { | |
6619 my($This) = @_; | |
6620 my($BondSymbol) = '#'; | |
6621 | |
6622 return $This->_DetectBondKeys('Cl', 'F', $BondSymbol); | |
6623 } | |
6624 | |
6625 # Generate 322 keyset key 232 value as 1/0 indicating its presence/absence or | |
6626 # count of its presence in a molecule. | |
6627 # | |
6628 # Key 232 description: Cl#Br | |
6629 # | |
6630 sub _Generate322KeySetKey232 { | |
6631 my($This) = @_; | |
6632 my($BondSymbol) = '#'; | |
6633 | |
6634 return $This->_DetectBondKeys('Cl', 'Br', $BondSymbol); | |
6635 } | |
6636 | |
6637 # Generate 322 keyset key 233 value as 1/0 indicating its presence/absence or | |
6638 # count of its presence in a molecule. | |
6639 # | |
6640 # Key 233 description: Cl#Si | |
6641 # | |
6642 sub _Generate322KeySetKey233 { | |
6643 my($This) = @_; | |
6644 my($BondSymbol) = '#'; | |
6645 | |
6646 return $This->_DetectBondKeys('Cl', 'Si', $BondSymbol); | |
6647 } | |
6648 | |
6649 # Generate 322 keyset key 234 value as 1/0 indicating its presence/absence or | |
6650 # count of its presence in a molecule. | |
6651 # | |
6652 # Key 234 description: Cl#I | |
6653 # | |
6654 sub _Generate322KeySetKey234 { | |
6655 my($This) = @_; | |
6656 my($BondSymbol) = '#'; | |
6657 | |
6658 return $This->_DetectBondKeys('Cl', 'I', $BondSymbol); | |
6659 } | |
6660 | |
6661 # Generate 322 keyset key 235 value as 1/0 indicating its presence/absence or | |
6662 # count of its presence in a molecule. | |
6663 # | |
6664 # Key 235 description: Cl#X | |
6665 # | |
6666 sub _Generate322KeySetKey235 { | |
6667 my($This) = @_; | |
6668 my($BondSymbol) = '#'; | |
6669 | |
6670 return $This->_DetectBondKeys('Cl', 'Z', $BondSymbol); | |
6671 } | |
6672 | |
6673 # Generate 322 keyset key 236 value as 1/0 indicating its presence/absence or | |
6674 # count of its presence in a molecule. | |
6675 # | |
6676 # Key 236 description: P#P | |
6677 # | |
6678 sub _Generate322KeySetKey236 { | |
6679 my($This) = @_; | |
6680 my($BondSymbol) = '#'; | |
6681 | |
6682 return $This->_DetectBondKeys('P', 'P', $BondSymbol); | |
6683 } | |
6684 | |
6685 # Generate 322 keyset key 237 value as 1/0 indicating its presence/absence or | |
6686 # count of its presence in a molecule. | |
6687 # | |
6688 # Key 237 description: P#F | |
6689 # | |
6690 sub _Generate322KeySetKey237 { | |
6691 my($This) = @_; | |
6692 my($BondSymbol) = '#'; | |
6693 | |
6694 return $This->_DetectBondKeys('P', 'F', $BondSymbol); | |
6695 } | |
6696 | |
6697 # Generate 322 keyset key 238 value as 1/0 indicating its presence/absence or | |
6698 # count of its presence in a molecule. | |
6699 # | |
6700 # Key 238 description: P#Br | |
6701 # | |
6702 sub _Generate322KeySetKey238 { | |
6703 my($This) = @_; | |
6704 my($BondSymbol) = '#'; | |
6705 | |
6706 return $This->_DetectBondKeys('P', 'Br', $BondSymbol); | |
6707 } | |
6708 | |
6709 # Generate 322 keyset key 239 value as 1/0 indicating its presence/absence or | |
6710 # count of its presence in a molecule. | |
6711 # | |
6712 # Key 239 description: P#Si | |
6713 # | |
6714 sub _Generate322KeySetKey239 { | |
6715 my($This) = @_; | |
6716 my($BondSymbol) = '#'; | |
6717 | |
6718 return $This->_DetectBondKeys('P', 'Si', $BondSymbol); | |
6719 } | |
6720 | |
6721 # Generate 322 keyset key 240 value as 1/0 indicating its presence/absence or | |
6722 # count of its presence in a molecule. | |
6723 # | |
6724 # Key 240 description: P#I | |
6725 # | |
6726 sub _Generate322KeySetKey240 { | |
6727 my($This) = @_; | |
6728 my($BondSymbol) = '#'; | |
6729 | |
6730 return $This->_DetectBondKeys('P', 'I', $BondSymbol); | |
6731 } | |
6732 | |
6733 # Generate 322 keyset key 241 value as 1/0 indicating its presence/absence or | |
6734 # count of its presence in a molecule. | |
6735 # | |
6736 # Key 241 description: P#X | |
6737 # | |
6738 sub _Generate322KeySetKey241 { | |
6739 my($This) = @_; | |
6740 my($BondSymbol) = '#'; | |
6741 | |
6742 return $This->_DetectBondKeys('P', 'Z', $BondSymbol); | |
6743 } | |
6744 | |
6745 # Generate 322 keyset key 242 value as 1/0 indicating its presence/absence or | |
6746 # count of its presence in a molecule. | |
6747 # | |
6748 # Key 242 description: F#F | |
6749 # | |
6750 sub _Generate322KeySetKey242 { | |
6751 my($This) = @_; | |
6752 my($BondSymbol) = '#'; | |
6753 | |
6754 return $This->_DetectBondKeys('F', 'F', $BondSymbol); | |
6755 } | |
6756 | |
6757 # Generate 322 keyset key 243 value as 1/0 indicating its presence/absence or | |
6758 # count of its presence in a molecule. | |
6759 # | |
6760 # Key 243 description: F#Br | |
6761 # | |
6762 sub _Generate322KeySetKey243 { | |
6763 my($This) = @_; | |
6764 my($BondSymbol) = '#'; | |
6765 | |
6766 return $This->_DetectBondKeys('F', 'Br', $BondSymbol); | |
6767 } | |
6768 | |
6769 # Generate 322 keyset key 244 value as 1/0 indicating its presence/absence or | |
6770 # count of its presence in a molecule. | |
6771 # | |
6772 # Key 244 description: F#Si | |
6773 # | |
6774 sub _Generate322KeySetKey244 { | |
6775 my($This) = @_; | |
6776 my($BondSymbol) = '#'; | |
6777 | |
6778 return $This->_DetectBondKeys('F', 'Si', $BondSymbol); | |
6779 } | |
6780 | |
6781 # Generate 322 keyset key 245 value as 1/0 indicating its presence/absence or | |
6782 # count of its presence in a molecule. | |
6783 # | |
6784 # Key 245 description: F#I | |
6785 # | |
6786 sub _Generate322KeySetKey245 { | |
6787 my($This) = @_; | |
6788 my($BondSymbol) = '#'; | |
6789 | |
6790 return $This->_DetectBondKeys('F', 'I', $BondSymbol); | |
6791 } | |
6792 | |
6793 # Generate 322 keyset key 246 value as 1/0 indicating its presence/absence or | |
6794 # count of its presence in a molecule. | |
6795 # | |
6796 # Key 246 description: F#X | |
6797 # | |
6798 sub _Generate322KeySetKey246 { | |
6799 my($This) = @_; | |
6800 my($BondSymbol) = '#'; | |
6801 | |
6802 return $This->_DetectBondKeys('F', 'Z', $BondSymbol); | |
6803 } | |
6804 | |
6805 # Generate 322 keyset key 247 value as 1/0 indicating its presence/absence or | |
6806 # count of its presence in a molecule. | |
6807 # | |
6808 # Key 247 description: Br#Br | |
6809 # | |
6810 sub _Generate322KeySetKey247 { | |
6811 my($This) = @_; | |
6812 my($BondSymbol) = '#'; | |
6813 | |
6814 return $This->_DetectBondKeys('Br', 'Br', $BondSymbol); | |
6815 } | |
6816 | |
6817 # Generate 322 keyset key 248 value as 1/0 indicating its presence/absence or | |
6818 # count of its presence in a molecule. | |
6819 # | |
6820 # Key 248 description: Br#Si | |
6821 # | |
6822 sub _Generate322KeySetKey248 { | |
6823 my($This) = @_; | |
6824 my($BondSymbol) = '#'; | |
6825 | |
6826 return $This->_DetectBondKeys('Br', 'Si', $BondSymbol); | |
6827 } | |
6828 | |
6829 # Generate 322 keyset key 249 value as 1/0 indicating its presence/absence or | |
6830 # count of its presence in a molecule. | |
6831 # | |
6832 # Key 249 description: Br#I | |
6833 # | |
6834 sub _Generate322KeySetKey249 { | |
6835 my($This) = @_; | |
6836 my($BondSymbol) = '#'; | |
6837 | |
6838 return $This->_DetectBondKeys('Br', 'I', $BondSymbol); | |
6839 } | |
6840 | |
6841 # Generate 322 keyset key 250 value as 1/0 indicating its presence/absence or | |
6842 # count of its presence in a molecule. | |
6843 # | |
6844 # Key 250 description: Br#X | |
6845 # | |
6846 sub _Generate322KeySetKey250 { | |
6847 my($This) = @_; | |
6848 my($BondSymbol) = '#'; | |
6849 | |
6850 return $This->_DetectBondKeys('Br', 'Z', $BondSymbol); | |
6851 } | |
6852 | |
6853 # Generate 322 keyset key 251 value as 1/0 indicating its presence/absence or | |
6854 # count of its presence in a molecule. | |
6855 # | |
6856 # Key 251 description: Si#Si | |
6857 # | |
6858 sub _Generate322KeySetKey251 { | |
6859 my($This) = @_; | |
6860 my($BondSymbol) = '#'; | |
6861 | |
6862 return $This->_DetectBondKeys('Si', 'Si', $BondSymbol); | |
6863 } | |
6864 | |
6865 # Generate 322 keyset key 252 value as 1/0 indicating its presence/absence or | |
6866 # count of its presence in a molecule. | |
6867 # | |
6868 # Key 252 description: Si#I | |
6869 # | |
6870 sub _Generate322KeySetKey252 { | |
6871 my($This) = @_; | |
6872 my($BondSymbol) = '#'; | |
6873 | |
6874 return $This->_DetectBondKeys('Si', 'I', $BondSymbol); | |
6875 } | |
6876 | |
6877 # Generate 322 keyset key 253 value as 1/0 indicating its presence/absence or | |
6878 # count of its presence in a molecule. | |
6879 # | |
6880 # Key 253 description: Si#X | |
6881 # | |
6882 sub _Generate322KeySetKey253 { | |
6883 my($This) = @_; | |
6884 my($BondSymbol) = '#'; | |
6885 | |
6886 return $This->_DetectBondKeys('Si', 'Z', $BondSymbol); | |
6887 } | |
6888 | |
6889 # Generate 322 keyset key 254 value as 1/0 indicating its presence/absence or | |
6890 # count of its presence in a molecule. | |
6891 # | |
6892 # Key 254 description: I#I | |
6893 # | |
6894 sub _Generate322KeySetKey254 { | |
6895 my($This) = @_; | |
6896 my($BondSymbol) = '#'; | |
6897 | |
6898 return $This->_DetectBondKeys('I', 'I', $BondSymbol); | |
6899 } | |
6900 | |
6901 # Generate 322 keyset key 255 value as 1/0 indicating its presence/absence or | |
6902 # count of its presence in a molecule. | |
6903 # | |
6904 # Key 255 description: I#X | |
6905 # | |
6906 sub _Generate322KeySetKey255 { | |
6907 my($This) = @_; | |
6908 my($BondSymbol) = '#'; | |
6909 | |
6910 return $This->_DetectBondKeys('I', 'Z', $BondSymbol); | |
6911 } | |
6912 | |
6913 # Generate 322 keyset key 256 value as 1/0 indicating its presence/absence or | |
6914 # count of its presence in a molecule. | |
6915 # | |
6916 # Key 256 description: X#X | |
6917 # | |
6918 sub _Generate322KeySetKey256 { | |
6919 my($This) = @_; | |
6920 my($BondSymbol) = '#'; | |
6921 | |
6922 return $This->_DetectBondKeys('Z', 'Z', $BondSymbol); | |
6923 } | |
6924 | |
6925 # Generate 322 keyset key 257 value as 1/0 indicating its presence/absence or | |
6926 # count of its presence in a molecule. | |
6927 # | |
6928 # Key 257 description: C$C | |
6929 # | |
6930 sub _Generate322KeySetKey257 { | |
6931 my($This) = @_; | |
6932 my($BondSymbol) = '$'; | |
6933 | |
6934 return $This->_DetectBondKeys('C', 'C', $BondSymbol); | |
6935 } | |
6936 | |
6937 # Generate 322 keyset key 258 value as 1/0 indicating its presence/absence or | |
6938 # count of its presence in a molecule. | |
6939 # | |
6940 # Key 258 description: C$N | |
6941 # | |
6942 sub _Generate322KeySetKey258 { | |
6943 my($This) = @_; | |
6944 my($BondSymbol) = '$'; | |
6945 | |
6946 return $This->_DetectBondKeys('C', 'N', $BondSymbol); | |
6947 } | |
6948 | |
6949 # Generate 322 keyset key 259 value as 1/0 indicating its presence/absence or | |
6950 # count of its presence in a molecule. | |
6951 # | |
6952 # Key 259 description: C$O | |
6953 # | |
6954 sub _Generate322KeySetKey259 { | |
6955 my($This) = @_; | |
6956 my($BondSymbol) = '$'; | |
6957 | |
6958 return $This->_DetectBondKeys('C', 'O', $BondSymbol); | |
6959 } | |
6960 | |
6961 # Generate 322 keyset key 260 value as 1/0 indicating its presence/absence or | |
6962 # count of its presence in a molecule. | |
6963 # | |
6964 # Key 260 description: C$S | |
6965 # | |
6966 sub _Generate322KeySetKey260 { | |
6967 my($This) = @_; | |
6968 my($BondSymbol) = '$'; | |
6969 | |
6970 return $This->_DetectBondKeys('C', 'S', $BondSymbol); | |
6971 } | |
6972 | |
6973 # Generate 322 keyset key 261 value as 1/0 indicating its presence/absence or | |
6974 # count of its presence in a molecule. | |
6975 # | |
6976 # Key 261 description: C$Cl | |
6977 # | |
6978 sub _Generate322KeySetKey261 { | |
6979 my($This) = @_; | |
6980 my($BondSymbol) = '$'; | |
6981 | |
6982 return $This->_DetectBondKeys('C', 'Cl', $BondSymbol); | |
6983 } | |
6984 | |
6985 # Generate 322 keyset key 262 value as 1/0 indicating its presence/absence or | |
6986 # count of its presence in a molecule. | |
6987 # | |
6988 # Key 262 description: C$P | |
6989 # | |
6990 sub _Generate322KeySetKey262 { | |
6991 my($This) = @_; | |
6992 my($BondSymbol) = '$'; | |
6993 | |
6994 return $This->_DetectBondKeys('C', 'P', $BondSymbol); | |
6995 } | |
6996 | |
6997 # Generate 322 keyset key 263 value as 1/0 indicating its presence/absence or | |
6998 # count of its presence in a molecule. | |
6999 # | |
7000 # Key 263 description: C$F | |
7001 # | |
7002 sub _Generate322KeySetKey263 { | |
7003 my($This) = @_; | |
7004 my($BondSymbol) = '$'; | |
7005 | |
7006 return $This->_DetectBondKeys('C', 'F', $BondSymbol); | |
7007 } | |
7008 | |
7009 # Generate 322 keyset key 264 value as 1/0 indicating its presence/absence or | |
7010 # count of its presence in a molecule. | |
7011 # | |
7012 # Key 264 description: C$Br | |
7013 # | |
7014 sub _Generate322KeySetKey264 { | |
7015 my($This) = @_; | |
7016 my($BondSymbol) = '$'; | |
7017 | |
7018 return $This->_DetectBondKeys('C', 'Br', $BondSymbol); | |
7019 } | |
7020 | |
7021 # Generate 322 keyset key 265 value as 1/0 indicating its presence/absence or | |
7022 # count of its presence in a molecule. | |
7023 # | |
7024 # Key 265 description: C$Si | |
7025 # | |
7026 sub _Generate322KeySetKey265 { | |
7027 my($This) = @_; | |
7028 my($BondSymbol) = '$'; | |
7029 | |
7030 return $This->_DetectBondKeys('C', 'Si', $BondSymbol); | |
7031 } | |
7032 | |
7033 # Generate 322 keyset key 266 value as 1/0 indicating its presence/absence or | |
7034 # count of its presence in a molecule. | |
7035 # | |
7036 # Key 266 description: C$I | |
7037 # | |
7038 sub _Generate322KeySetKey266 { | |
7039 my($This) = @_; | |
7040 my($BondSymbol) = '$'; | |
7041 | |
7042 return $This->_DetectBondKeys('C', 'I', $BondSymbol); | |
7043 } | |
7044 | |
7045 # Generate 322 keyset key 267 value as 1/0 indicating its presence/absence or | |
7046 # count of its presence in a molecule. | |
7047 # | |
7048 # Key 267 description: C$X | |
7049 # | |
7050 sub _Generate322KeySetKey267 { | |
7051 my($This) = @_; | |
7052 my($BondSymbol) = '$'; | |
7053 | |
7054 return $This->_DetectBondKeys('C', 'Z', $BondSymbol); | |
7055 } | |
7056 | |
7057 # Generate 322 keyset key 268 value as 1/0 indicating its presence/absence or | |
7058 # count of its presence in a molecule. | |
7059 # | |
7060 # Key 268 description: N$N | |
7061 # | |
7062 sub _Generate322KeySetKey268 { | |
7063 my($This) = @_; | |
7064 my($BondSymbol) = '$'; | |
7065 | |
7066 return $This->_DetectBondKeys('N', 'N', $BondSymbol); | |
7067 } | |
7068 | |
7069 # Generate 322 keyset key 269 value as 1/0 indicating its presence/absence or | |
7070 # count of its presence in a molecule. | |
7071 # | |
7072 # Key 269 description: N$O | |
7073 # | |
7074 sub _Generate322KeySetKey269 { | |
7075 my($This) = @_; | |
7076 my($BondSymbol) = '$'; | |
7077 | |
7078 return $This->_DetectBondKeys('N', 'O', $BondSymbol); | |
7079 } | |
7080 | |
7081 # Generate 322 keyset key 270 value as 1/0 indicating its presence/absence or | |
7082 # count of its presence in a molecule. | |
7083 # | |
7084 # Key 270 description: N$S | |
7085 # | |
7086 sub _Generate322KeySetKey270 { | |
7087 my($This) = @_; | |
7088 my($BondSymbol) = '$'; | |
7089 | |
7090 return $This->_DetectBondKeys('N', 'S', $BondSymbol); | |
7091 } | |
7092 | |
7093 # Generate 322 keyset key 271 value as 1/0 indicating its presence/absence or | |
7094 # count of its presence in a molecule. | |
7095 # | |
7096 # Key 271 description: N$Cl | |
7097 # | |
7098 sub _Generate322KeySetKey271 { | |
7099 my($This) = @_; | |
7100 my($BondSymbol) = '$'; | |
7101 | |
7102 return $This->_DetectBondKeys('N', 'Cl', $BondSymbol); | |
7103 } | |
7104 | |
7105 # Generate 322 keyset key 272 value as 1/0 indicating its presence/absence or | |
7106 # count of its presence in a molecule. | |
7107 # | |
7108 # Key 272 description: N$P | |
7109 # | |
7110 sub _Generate322KeySetKey272 { | |
7111 my($This) = @_; | |
7112 my($BondSymbol) = '$'; | |
7113 | |
7114 return $This->_DetectBondKeys('N', 'P', $BondSymbol); | |
7115 } | |
7116 | |
7117 # Generate 322 keyset key 273 value as 1/0 indicating its presence/absence or | |
7118 # count of its presence in a molecule. | |
7119 # | |
7120 # Key 273 description: N$F | |
7121 # | |
7122 sub _Generate322KeySetKey273 { | |
7123 my($This) = @_; | |
7124 my($BondSymbol) = '$'; | |
7125 | |
7126 return $This->_DetectBondKeys('N', 'F', $BondSymbol); | |
7127 } | |
7128 | |
7129 # Generate 322 keyset key 274 value as 1/0 indicating its presence/absence or | |
7130 # count of its presence in a molecule. | |
7131 # | |
7132 # Key 274 description: N$Br | |
7133 # | |
7134 sub _Generate322KeySetKey274 { | |
7135 my($This) = @_; | |
7136 my($BondSymbol) = '$'; | |
7137 | |
7138 return $This->_DetectBondKeys('N', 'Br', $BondSymbol); | |
7139 } | |
7140 | |
7141 # Generate 322 keyset key 275 value as 1/0 indicating its presence/absence or | |
7142 # count of its presence in a molecule. | |
7143 # | |
7144 # Key 275 description: N$Si | |
7145 # | |
7146 sub _Generate322KeySetKey275 { | |
7147 my($This) = @_; | |
7148 my($BondSymbol) = '$'; | |
7149 | |
7150 return $This->_DetectBondKeys('N', 'Si', $BondSymbol); | |
7151 } | |
7152 | |
7153 # Generate 322 keyset key 276 value as 1/0 indicating its presence/absence or | |
7154 # count of its presence in a molecule. | |
7155 # | |
7156 # Key 276 description: N$I | |
7157 # | |
7158 sub _Generate322KeySetKey276 { | |
7159 my($This) = @_; | |
7160 my($BondSymbol) = '$'; | |
7161 | |
7162 return $This->_DetectBondKeys('N', 'I', $BondSymbol); | |
7163 } | |
7164 | |
7165 # Generate 322 keyset key 277 value as 1/0 indicating its presence/absence or | |
7166 # count of its presence in a molecule. | |
7167 # | |
7168 # Key 277 description: N$X | |
7169 # | |
7170 sub _Generate322KeySetKey277 { | |
7171 my($This) = @_; | |
7172 my($BondSymbol) = '$'; | |
7173 | |
7174 return $This->_DetectBondKeys('N', 'Z', $BondSymbol); | |
7175 } | |
7176 | |
7177 # Generate 322 keyset key 278 value as 1/0 indicating its presence/absence or | |
7178 # count of its presence in a molecule. | |
7179 # | |
7180 # Key 278 description: O$O | |
7181 # | |
7182 sub _Generate322KeySetKey278 { | |
7183 my($This) = @_; | |
7184 my($BondSymbol) = '$'; | |
7185 | |
7186 return $This->_DetectBondKeys('O', 'O', $BondSymbol); | |
7187 } | |
7188 | |
7189 # Generate 322 keyset key 279 value as 1/0 indicating its presence/absence or | |
7190 # count of its presence in a molecule. | |
7191 # | |
7192 # Key 279 description: O$S | |
7193 # | |
7194 sub _Generate322KeySetKey279 { | |
7195 my($This) = @_; | |
7196 my($BondSymbol) = '$'; | |
7197 | |
7198 return $This->_DetectBondKeys('O', 'S', $BondSymbol); | |
7199 } | |
7200 | |
7201 # Generate 322 keyset key 280 value as 1/0 indicating its presence/absence or | |
7202 # count of its presence in a molecule. | |
7203 # | |
7204 # Key 280 description: O$Cl | |
7205 # | |
7206 sub _Generate322KeySetKey280 { | |
7207 my($This) = @_; | |
7208 my($BondSymbol) = '$'; | |
7209 | |
7210 return $This->_DetectBondKeys('O', 'Cl', $BondSymbol); | |
7211 } | |
7212 | |
7213 # Generate 322 keyset key 281 value as 1/0 indicating its presence/absence or | |
7214 # count of its presence in a molecule. | |
7215 # | |
7216 # Key 281 description: O$P | |
7217 # | |
7218 sub _Generate322KeySetKey281 { | |
7219 my($This) = @_; | |
7220 my($BondSymbol) = '$'; | |
7221 | |
7222 return $This->_DetectBondKeys('O', 'P', $BondSymbol); | |
7223 } | |
7224 | |
7225 # Generate 322 keyset key 282 value as 1/0 indicating its presence/absence or | |
7226 # count of its presence in a molecule. | |
7227 # | |
7228 # Key 282 description: O$F | |
7229 # | |
7230 sub _Generate322KeySetKey282 { | |
7231 my($This) = @_; | |
7232 my($BondSymbol) = '$'; | |
7233 | |
7234 return $This->_DetectBondKeys('O', 'F', $BondSymbol); | |
7235 } | |
7236 | |
7237 # Generate 322 keyset key 283 value as 1/0 indicating its presence/absence or | |
7238 # count of its presence in a molecule. | |
7239 # | |
7240 # Key 283 description: O$Br | |
7241 # | |
7242 sub _Generate322KeySetKey283 { | |
7243 my($This) = @_; | |
7244 my($BondSymbol) = '$'; | |
7245 | |
7246 return $This->_DetectBondKeys('O', 'Br', $BondSymbol); | |
7247 } | |
7248 | |
7249 # Generate 322 keyset key 284 value as 1/0 indicating its presence/absence or | |
7250 # count of its presence in a molecule. | |
7251 # | |
7252 # Key 284 description: O$Si | |
7253 # | |
7254 sub _Generate322KeySetKey284 { | |
7255 my($This) = @_; | |
7256 my($BondSymbol) = '$'; | |
7257 | |
7258 return $This->_DetectBondKeys('O', 'Si', $BondSymbol); | |
7259 } | |
7260 | |
7261 # Generate 322 keyset key 285 value as 1/0 indicating its presence/absence or | |
7262 # count of its presence in a molecule. | |
7263 # | |
7264 # Key 285 description: O$I | |
7265 # | |
7266 sub _Generate322KeySetKey285 { | |
7267 my($This) = @_; | |
7268 my($BondSymbol) = '$'; | |
7269 | |
7270 return $This->_DetectBondKeys('O', 'I', $BondSymbol); | |
7271 } | |
7272 | |
7273 # Generate 322 keyset key 286 value as 1/0 indicating its presence/absence or | |
7274 # count of its presence in a molecule. | |
7275 # | |
7276 # Key 286 description: O$X | |
7277 # | |
7278 sub _Generate322KeySetKey286 { | |
7279 my($This) = @_; | |
7280 my($BondSymbol) = '$'; | |
7281 | |
7282 return $This->_DetectBondKeys('O', 'Z', $BondSymbol); | |
7283 } | |
7284 | |
7285 # Generate 322 keyset key 287 value as 1/0 indicating its presence/absence or | |
7286 # count of its presence in a molecule. | |
7287 # | |
7288 # Key 287 description: S$S | |
7289 # | |
7290 sub _Generate322KeySetKey287 { | |
7291 my($This) = @_; | |
7292 my($BondSymbol) = '$'; | |
7293 | |
7294 return $This->_DetectBondKeys('S', 'S', $BondSymbol); | |
7295 } | |
7296 | |
7297 # Generate 322 keyset key 288 value as 1/0 indicating its presence/absence or | |
7298 # count of its presence in a molecule. | |
7299 # | |
7300 # Key 288 description: S$Cl | |
7301 # | |
7302 sub _Generate322KeySetKey288 { | |
7303 my($This) = @_; | |
7304 my($BondSymbol) = '$'; | |
7305 | |
7306 return $This->_DetectBondKeys('S', 'Cl', $BondSymbol); | |
7307 } | |
7308 | |
7309 # Generate 322 keyset key 289 value as 1/0 indicating its presence/absence or | |
7310 # count of its presence in a molecule. | |
7311 # | |
7312 # Key 289 description: S$P | |
7313 # | |
7314 sub _Generate322KeySetKey289 { | |
7315 my($This) = @_; | |
7316 my($BondSymbol) = '$'; | |
7317 | |
7318 return $This->_DetectBondKeys('S', 'P', $BondSymbol); | |
7319 } | |
7320 | |
7321 # Generate 322 keyset key 290 value as 1/0 indicating its presence/absence or | |
7322 # count of its presence in a molecule. | |
7323 # | |
7324 # Key 290 description: S$F | |
7325 # | |
7326 sub _Generate322KeySetKey290 { | |
7327 my($This) = @_; | |
7328 my($BondSymbol) = '$'; | |
7329 | |
7330 return $This->_DetectBondKeys('S', 'F', $BondSymbol); | |
7331 } | |
7332 | |
7333 # Generate 322 keyset key 291 value as 1/0 indicating its presence/absence or | |
7334 # count of its presence in a molecule. | |
7335 # | |
7336 # Key 291 description: S$Br | |
7337 # | |
7338 sub _Generate322KeySetKey291 { | |
7339 my($This) = @_; | |
7340 my($BondSymbol) = '$'; | |
7341 | |
7342 return $This->_DetectBondKeys('S', 'Br', $BondSymbol); | |
7343 } | |
7344 | |
7345 # Generate 322 keyset key 292 value as 1/0 indicating its presence/absence or | |
7346 # count of its presence in a molecule. | |
7347 # | |
7348 # Key 292 description: S$Si | |
7349 # | |
7350 sub _Generate322KeySetKey292 { | |
7351 my($This) = @_; | |
7352 my($BondSymbol) = '$'; | |
7353 | |
7354 return $This->_DetectBondKeys('S', 'Si', $BondSymbol); | |
7355 } | |
7356 | |
7357 # Generate 322 keyset key 293 value as 1/0 indicating its presence/absence or | |
7358 # count of its presence in a molecule. | |
7359 # | |
7360 # Key 293 description: S$I | |
7361 # | |
7362 sub _Generate322KeySetKey293 { | |
7363 my($This) = @_; | |
7364 my($BondSymbol) = '$'; | |
7365 | |
7366 return $This->_DetectBondKeys('S', 'I', $BondSymbol); | |
7367 } | |
7368 | |
7369 # Generate 322 keyset key 294 value as 1/0 indicating its presence/absence or | |
7370 # count of its presence in a molecule. | |
7371 # | |
7372 # Key 294 description: S$X | |
7373 # | |
7374 sub _Generate322KeySetKey294 { | |
7375 my($This) = @_; | |
7376 my($BondSymbol) = '$'; | |
7377 | |
7378 return $This->_DetectBondKeys('S', 'Z', $BondSymbol); | |
7379 } | |
7380 | |
7381 # Generate 322 keyset key 295 value as 1/0 indicating its presence/absence or | |
7382 # count of its presence in a molecule. | |
7383 # | |
7384 # Key 295 description: Cl$Cl | |
7385 # | |
7386 sub _Generate322KeySetKey295 { | |
7387 my($This) = @_; | |
7388 my($BondSymbol) = '$'; | |
7389 | |
7390 return $This->_DetectBondKeys('Cl', 'Cl', $BondSymbol); | |
7391 } | |
7392 | |
7393 # Generate 322 keyset key 296 value as 1/0 indicating its presence/absence or | |
7394 # count of its presence in a molecule. | |
7395 # | |
7396 # Key 296 description: Cl$P | |
7397 # | |
7398 sub _Generate322KeySetKey296 { | |
7399 my($This) = @_; | |
7400 my($BondSymbol) = '$'; | |
7401 | |
7402 return $This->_DetectBondKeys('Cl', 'P', $BondSymbol); | |
7403 } | |
7404 | |
7405 # Generate 322 keyset key 297 value as 1/0 indicating its presence/absence or | |
7406 # count of its presence in a molecule. | |
7407 # | |
7408 # Key 297 description: Cl$F | |
7409 # | |
7410 sub _Generate322KeySetKey297 { | |
7411 my($This) = @_; | |
7412 my($BondSymbol) = '$'; | |
7413 | |
7414 return $This->_DetectBondKeys('Cl', 'F', $BondSymbol); | |
7415 } | |
7416 | |
7417 # Generate 322 keyset key 298 value as 1/0 indicating its presence/absence or | |
7418 # count of its presence in a molecule. | |
7419 # | |
7420 # Key 298 description: Cl$Br | |
7421 # | |
7422 sub _Generate322KeySetKey298 { | |
7423 my($This) = @_; | |
7424 my($BondSymbol) = '$'; | |
7425 | |
7426 return $This->_DetectBondKeys('Cl', 'Br', $BondSymbol); | |
7427 } | |
7428 | |
7429 # Generate 322 keyset key 299 value as 1/0 indicating its presence/absence or | |
7430 # count of its presence in a molecule. | |
7431 # | |
7432 # Key 299 description: Cl$Si | |
7433 # | |
7434 sub _Generate322KeySetKey299 { | |
7435 my($This) = @_; | |
7436 my($BondSymbol) = '$'; | |
7437 | |
7438 return $This->_DetectBondKeys('Cl', 'Si', $BondSymbol); | |
7439 } | |
7440 | |
7441 # Generate 322 keyset key 300 value as 1/0 indicating its presence/absence or | |
7442 # count of its presence in a molecule. | |
7443 # | |
7444 # Key 300 description: Cl$I | |
7445 # | |
7446 sub _Generate322KeySetKey300 { | |
7447 my($This) = @_; | |
7448 my($BondSymbol) = '$'; | |
7449 | |
7450 return $This->_DetectBondKeys('Cl', 'I', $BondSymbol); | |
7451 } | |
7452 | |
7453 # Generate 322 keyset key 301 value as 1/0 indicating its presence/absence or | |
7454 # count of its presence in a molecule. | |
7455 # | |
7456 # Key 301 description: Cl$X | |
7457 # | |
7458 sub _Generate322KeySetKey301 { | |
7459 my($This) = @_; | |
7460 my($BondSymbol) = '$'; | |
7461 | |
7462 return $This->_DetectBondKeys('Cl', 'Z', $BondSymbol); | |
7463 } | |
7464 | |
7465 # Generate 322 keyset key 302 value as 1/0 indicating its presence/absence or | |
7466 # count of its presence in a molecule. | |
7467 # | |
7468 # Key 302 description: P$P | |
7469 # | |
7470 sub _Generate322KeySetKey302 { | |
7471 my($This) = @_; | |
7472 my($BondSymbol) = '$'; | |
7473 | |
7474 return $This->_DetectBondKeys('P', 'P', $BondSymbol); | |
7475 } | |
7476 | |
7477 # Generate 322 keyset key 303 value as 1/0 indicating its presence/absence or | |
7478 # count of its presence in a molecule. | |
7479 # | |
7480 # Key 303 description: P$F | |
7481 # | |
7482 sub _Generate322KeySetKey303 { | |
7483 my($This) = @_; | |
7484 my($BondSymbol) = '$'; | |
7485 | |
7486 return $This->_DetectBondKeys('P', 'F', $BondSymbol); | |
7487 } | |
7488 | |
7489 # Generate 322 keyset key 304 value as 1/0 indicating its presence/absence or | |
7490 # count of its presence in a molecule. | |
7491 # | |
7492 # Key 304 description: P$Br | |
7493 # | |
7494 sub _Generate322KeySetKey304 { | |
7495 my($This) = @_; | |
7496 my($BondSymbol) = '$'; | |
7497 | |
7498 return $This->_DetectBondKeys('P', 'Br', $BondSymbol); | |
7499 } | |
7500 | |
7501 # Generate 322 keyset key 305 value as 1/0 indicating its presence/absence or | |
7502 # count of its presence in a molecule. | |
7503 # | |
7504 # Key 305 description: P$Si | |
7505 # | |
7506 sub _Generate322KeySetKey305 { | |
7507 my($This) = @_; | |
7508 my($BondSymbol) = '$'; | |
7509 | |
7510 return $This->_DetectBondKeys('P', 'Si', $BondSymbol); | |
7511 } | |
7512 | |
7513 # Generate 322 keyset key 306 value as 1/0 indicating its presence/absence or | |
7514 # count of its presence in a molecule. | |
7515 # | |
7516 # Key 306 description: P$I | |
7517 # | |
7518 sub _Generate322KeySetKey306 { | |
7519 my($This) = @_; | |
7520 my($BondSymbol) = '$'; | |
7521 | |
7522 return $This->_DetectBondKeys('P', 'I', $BondSymbol); | |
7523 } | |
7524 | |
7525 # Generate 322 keyset key 307 value as 1/0 indicating its presence/absence or | |
7526 # count of its presence in a molecule. | |
7527 # | |
7528 # Key 307 description: P$X | |
7529 # | |
7530 sub _Generate322KeySetKey307 { | |
7531 my($This) = @_; | |
7532 my($BondSymbol) = '$'; | |
7533 | |
7534 return $This->_DetectBondKeys('P', 'Z', $BondSymbol); | |
7535 } | |
7536 | |
7537 # Generate 322 keyset key 308 value as 1/0 indicating its presence/absence or | |
7538 # count of its presence in a molecule. | |
7539 # | |
7540 # Key 308 description: F$F | |
7541 # | |
7542 sub _Generate322KeySetKey308 { | |
7543 my($This) = @_; | |
7544 my($BondSymbol) = '$'; | |
7545 | |
7546 return $This->_DetectBondKeys('F', 'F', $BondSymbol); | |
7547 } | |
7548 | |
7549 # Generate 322 keyset key 309 value as 1/0 indicating its presence/absence or | |
7550 # count of its presence in a molecule. | |
7551 # | |
7552 # Key 309 description: F$Br | |
7553 # | |
7554 sub _Generate322KeySetKey309 { | |
7555 my($This) = @_; | |
7556 my($BondSymbol) = '$'; | |
7557 | |
7558 return $This->_DetectBondKeys('F', 'Br', $BondSymbol); | |
7559 } | |
7560 | |
7561 # Generate 322 keyset key 310 value as 1/0 indicating its presence/absence or | |
7562 # count of its presence in a molecule. | |
7563 # | |
7564 # Key 310 description: F$Si | |
7565 # | |
7566 sub _Generate322KeySetKey310 { | |
7567 my($This) = @_; | |
7568 my($BondSymbol) = '$'; | |
7569 | |
7570 return $This->_DetectBondKeys('F', 'Si', $BondSymbol); | |
7571 } | |
7572 | |
7573 # Generate 322 keyset key 311 value as 1/0 indicating its presence/absence or | |
7574 # count of its presence in a molecule. | |
7575 # | |
7576 # Key 311 description: F$I | |
7577 # | |
7578 sub _Generate322KeySetKey311 { | |
7579 my($This) = @_; | |
7580 my($BondSymbol) = '$'; | |
7581 | |
7582 return $This->_DetectBondKeys('F', 'I', $BondSymbol); | |
7583 } | |
7584 | |
7585 # Generate 322 keyset key 312 value as 1/0 indicating its presence/absence or | |
7586 # count of its presence in a molecule. | |
7587 # | |
7588 # Key 312 description: F$X | |
7589 # | |
7590 sub _Generate322KeySetKey312 { | |
7591 my($This) = @_; | |
7592 my($BondSymbol) = '$'; | |
7593 | |
7594 return $This->_DetectBondKeys('F', 'Z', $BondSymbol); | |
7595 } | |
7596 | |
7597 # Generate 322 keyset key 313 value as 1/0 indicating its presence/absence or | |
7598 # count of its presence in a molecule. | |
7599 # | |
7600 # Key 313 description: Br$Br | |
7601 # | |
7602 sub _Generate322KeySetKey313 { | |
7603 my($This) = @_; | |
7604 my($BondSymbol) = '$'; | |
7605 | |
7606 return $This->_DetectBondKeys('Br', 'Br', $BondSymbol); | |
7607 } | |
7608 | |
7609 # Generate 322 keyset key 314 value as 1/0 indicating its presence/absence or | |
7610 # count of its presence in a molecule. | |
7611 # | |
7612 # Key 314 description: Br$Si | |
7613 # | |
7614 sub _Generate322KeySetKey314 { | |
7615 my($This) = @_; | |
7616 my($BondSymbol) = '$'; | |
7617 | |
7618 return $This->_DetectBondKeys('Br', 'Si', $BondSymbol); | |
7619 } | |
7620 | |
7621 # Generate 322 keyset key 315 value as 1/0 indicating its presence/absence or | |
7622 # count of its presence in a molecule. | |
7623 # | |
7624 # Key 315 description: Br$I | |
7625 # | |
7626 sub _Generate322KeySetKey315 { | |
7627 my($This) = @_; | |
7628 my($BondSymbol) = '$'; | |
7629 | |
7630 return $This->_DetectBondKeys('Br', 'I', $BondSymbol); | |
7631 } | |
7632 | |
7633 # Generate 322 keyset key 316 value as 1/0 indicating its presence/absence or | |
7634 # count of its presence in a molecule. | |
7635 # | |
7636 # Key 316 description: Br$X | |
7637 # | |
7638 sub _Generate322KeySetKey316 { | |
7639 my($This) = @_; | |
7640 my($BondSymbol) = '$'; | |
7641 | |
7642 return $This->_DetectBondKeys('Br', 'Z', $BondSymbol); | |
7643 } | |
7644 | |
7645 # Generate 322 keyset key 317 value as 1/0 indicating its presence/absence or | |
7646 # count of its presence in a molecule. | |
7647 # | |
7648 # Key 317 description: Si$Si | |
7649 # | |
7650 sub _Generate322KeySetKey317 { | |
7651 my($This) = @_; | |
7652 my($BondSymbol) = '$'; | |
7653 | |
7654 return $This->_DetectBondKeys('Si', 'Si', $BondSymbol); | |
7655 } | |
7656 | |
7657 # Generate 322 keyset key 318 value as 1/0 indicating its presence/absence or | |
7658 # count of its presence in a molecule. | |
7659 # | |
7660 # Key 318 description: Si$I | |
7661 # | |
7662 sub _Generate322KeySetKey318 { | |
7663 my($This) = @_; | |
7664 my($BondSymbol) = '$'; | |
7665 | |
7666 return $This->_DetectBondKeys('Si', 'I', $BondSymbol); | |
7667 } | |
7668 | |
7669 # Generate 322 keyset key 319 value as 1/0 indicating its presence/absence or | |
7670 # count of its presence in a molecule. | |
7671 # | |
7672 # Key 319 description: Si$X | |
7673 # | |
7674 sub _Generate322KeySetKey319 { | |
7675 my($This) = @_; | |
7676 my($BondSymbol) = '$'; | |
7677 | |
7678 return $This->_DetectBondKeys('Si', 'Z', $BondSymbol); | |
7679 } | |
7680 | |
7681 # Generate 322 keyset key 320 value as 1/0 indicating its presence/absence or | |
7682 # count of its presence in a molecule. | |
7683 # | |
7684 # Key 320 description: I$I | |
7685 # | |
7686 sub _Generate322KeySetKey320 { | |
7687 my($This) = @_; | |
7688 my($BondSymbol) = '$'; | |
7689 | |
7690 return $This->_DetectBondKeys('I', 'I', $BondSymbol); | |
7691 } | |
7692 | |
7693 # Generate 322 keyset key 321 value as 1/0 indicating its presence/absence or | |
7694 # count of its presence in a molecule. | |
7695 # | |
7696 # Key 321 description: I$X | |
7697 # | |
7698 sub _Generate322KeySetKey321 { | |
7699 my($This) = @_; | |
7700 my($BondSymbol) = '$'; | |
7701 | |
7702 return $This->_DetectBondKeys('I', 'Z', $BondSymbol); | |
7703 } | |
7704 | |
7705 # Generate 322 keyset key 322 value as 1/0 indicating its presence/absence or | |
7706 # count of its presence in a molecule. | |
7707 # | |
7708 # Key 322 description: X$X | |
7709 # | |
7710 sub _Generate322KeySetKey322 { | |
7711 my($This) = @_; | |
7712 my($BondSymbol) = '$'; | |
7713 | |
7714 return $This->_DetectBondKeys('Z', 'Z', $BondSymbol); | |
7715 } | |
7716 | |
7717 # A : Any valid perodic table elemnet symbol | |
7718 sub _IsAtom { | |
7719 my($This, $Atom) = @_; | |
7720 | |
7721 return $Atom->GetAtomicNumber() ? 1 : 0; | |
7722 } | |
7723 | |
7724 # Q : Hetro atoms; any non-C or non-H atom | |
7725 sub _IsHeteroAtom { | |
7726 my($This, $Atom) = @_; | |
7727 | |
7728 return ($Atom->GetAtomicNumber() =~ /^(1|6)$/) ? 0 : 1; | |
7729 } | |
7730 | |
7731 # X : Halogens; F, Cl, Br, I | |
7732 sub _IsHalogenAtom { | |
7733 my($This, $Atom) = @_; | |
7734 | |
7735 return ($Atom->GetAtomicNumber() =~ /^(9|17|35|53)$/) ? 1 : 0; | |
7736 } | |
7737 | |
7738 # Z : Others; other than H, C, N, O, Si, P, S, F, Cl, Br, I | |
7739 sub _IsOtherAtom { | |
7740 my($This, $Atom) = @_; | |
7741 | |
7742 return ($Atom->GetAtomicNumber() =~ /^(1|6|7|8|9|14|15|16|17|35|53)$/) ? 0 : 1; | |
7743 } | |
7744 | |
7745 # Detect atom keys like Cl, Br and so on... | |
7746 # | |
7747 sub _DetectAtomKeys { | |
7748 my($This, $AtomSymbol, $MinKeyCount, $IsInRing, $MinHydrogenCount) = @_; | |
7749 my($Atom, $KeyValue); | |
7750 | |
7751 $KeyValue = 0; | |
7752 ATOM: for $Atom (@{$This->{Atoms}}) { | |
7753 if (!$This->_DoesAtomMatchesSymbol($Atom, $AtomSymbol)) { | |
7754 next ATOM; | |
7755 } | |
7756 if (defined($IsInRing) && $IsInRing && !$Atom->IsInRing()) { | |
7757 next ATOM; | |
7758 } | |
7759 if (defined $MinHydrogenCount) { | |
7760 if (!$This->_DoesAtomMinHydrogenCountMatch($Atom, $MinHydrogenCount)) { | |
7761 next ATOM; | |
7762 } | |
7763 } | |
7764 $KeyValue++; | |
7765 if (defined($MinKeyCount) && $KeyValue < $MinKeyCount) { | |
7766 next ATOM; | |
7767 } | |
7768 if ($This->{KeyBits}) { | |
7769 $KeyValue = 1; | |
7770 last ATOM; | |
7771 } | |
7772 } | |
7773 return $KeyValue; | |
7774 } | |
7775 | |
7776 # Detect bond keys like S-S, N-O and so on... | |
7777 # | |
7778 sub _DetectBondKeys { | |
7779 my($This, $AtomSymbol1, $AtomSymbol2, $BondSymbol, $MinKeyCount, $Atom1MinHydrogenCount, $Atom2MinHydrogenCount) = @_; | |
7780 my($Atom1, $Atom2, $Bond, $KeyValue, $MatchSpecifiedAtomOrder); | |
7781 | |
7782 $MatchSpecifiedAtomOrder = 0; | |
7783 | |
7784 $KeyValue = 0; | |
7785 BOND: for $Bond (@{$This->{Bonds}}) { | |
7786 ($Atom1, $Atom2) = $Bond->GetAtoms(); | |
7787 if (!$This->_DoBondAtomsMatchBondSymbols($Atom1, $Atom2, $AtomSymbol1, $AtomSymbol2, $BondSymbol, $MatchSpecifiedAtomOrder, $Atom1MinHydrogenCount, $Atom2MinHydrogenCount)) { | |
7788 next BOND; | |
7789 } | |
7790 $KeyValue++; | |
7791 if (defined($MinKeyCount) && $KeyValue < $MinKeyCount) { | |
7792 next BOND; | |
7793 } | |
7794 if ($This->{KeyBits}) { | |
7795 $KeyValue = 1; | |
7796 last BOND; | |
7797 } | |
7798 } | |
7799 return $KeyValue; | |
7800 } | |
7801 | |
7802 # Detect atom neighborhood keys like ON(C)C, OC(O)O and so on. | |
7803 # | |
7804 sub _DetectAtomNeighborhoodKeys { | |
7805 my($This, $CentralAtomSymbol, $NbrAtomSymbolsRef, $NbrBondSymbolsRef, $MinKeyCount, $CentralAtomMinHydrogenCount, $NbrAtomMinHydrogenCountRef) = @_; | |
7806 my($KeyValue, $CentralAtom); | |
7807 | |
7808 $KeyValue = 0; | |
7809 | |
7810 CENTRALATOM: for $CentralAtom (@{$This->{Atoms}}) { | |
7811 if (!$This->_DoesAtomNeighborhoodMatch($CentralAtom, $CentralAtomSymbol, $NbrAtomSymbolsRef, $NbrBondSymbolsRef, $CentralAtomMinHydrogenCount, $NbrAtomMinHydrogenCountRef)) { | |
7812 next CENTRALATOM; | |
7813 } | |
7814 $KeyValue++; | |
7815 if (defined($MinKeyCount) && $KeyValue < $MinKeyCount) { | |
7816 next CENTRALATOM; | |
7817 } | |
7818 if ($This->{KeyBits}) { | |
7819 $KeyValue = 1; | |
7820 last CENTRALATOM; | |
7821 } | |
7822 } | |
7823 return $KeyValue; | |
7824 } | |
7825 | |
7826 # Detect bond neighborhood keys like A%Anot%A%A and so on. | |
7827 # | |
7828 sub _DetectBondNeighborhoodKeys { | |
7829 my($This, $BondAtomSymbol1, $BondAtomSymbol2, $BondSymbol, $NbrAtomSymbolsRef, $NbrBondSymbolsRef, $MinKeyCount, $BondAtomMinHydrogenCountRef, $NbrsMinHydrogenCountRef) = @_; | |
7830 my($BondAtomIndex, $BondAtom1, $BondAtom2, $MatchedBondAtom1, $MatchedBondAtom2, $BondAtom, $Bond, $KeyValue, $BondAtomSymbol, $MatchSpecifiedAtomOrder, $BondAtom1MinHydrogenCount, $BondAtom2MinHydrogenCount, $MinHydrogenCount, @NbrsToExcludeFromMatch, @NbrAtomSymbols, @NbrBondSymbols, @NbrMinHydrogenCount, ); | |
7831 | |
7832 $MatchSpecifiedAtomOrder = 1; | |
7833 ($BondAtom1MinHydrogenCount, $BondAtom2MinHydrogenCount) = defined($BondAtomMinHydrogenCountRef) ? ( @{$BondAtomMinHydrogenCountRef} ) : (undef, undef); | |
7834 | |
7835 $KeyValue = 0; | |
7836 BOND: for $Bond (@{$This->{Bonds}}) { | |
7837 ($BondAtom1, $BondAtom2) = $Bond->GetAtoms(); | |
7838 | |
7839 # Match bond first... | |
7840 if ($This->_DoBondAtomsMatchBondSymbols($BondAtom1, $BondAtom2, $BondAtomSymbol1, $BondAtomSymbol2, $BondSymbol, $MatchSpecifiedAtomOrder, $BondAtom1MinHydrogenCount, $BondAtom2MinHydrogenCount)) { | |
7841 ($MatchedBondAtom1, $MatchedBondAtom2) = ($BondAtom1, $BondAtom2); | |
7842 } | |
7843 elsif ($This->_DoBondAtomsMatchBondSymbols($BondAtom2, $BondAtom1, $BondAtomSymbol1, $BondAtomSymbol2, $BondSymbol, $MatchSpecifiedAtomOrder, $BondAtom1MinHydrogenCount, $BondAtom2MinHydrogenCount)) { | |
7844 ($MatchedBondAtom1, $MatchedBondAtom2) = ($BondAtom2, $BondAtom1); | |
7845 } | |
7846 else { | |
7847 next BOND; | |
7848 } | |
7849 # Match neighbors of bonded atoms... | |
7850 for $BondAtomIndex (0 .. 1) { | |
7851 $MinHydrogenCount = undef; | |
7852 @NbrsToExcludeFromMatch = (); | |
7853 | |
7854 if ($BondAtomIndex == 0) { | |
7855 $BondAtom = $MatchedBondAtom1; | |
7856 $BondAtomSymbol = $BondAtomSymbol1; | |
7857 push @NbrsToExcludeFromMatch, $MatchedBondAtom2; | |
7858 } | |
7859 elsif ($BondAtomIndex == 1) { | |
7860 $BondAtom = $MatchedBondAtom2; | |
7861 $BondAtomSymbol = $BondAtomSymbol2; | |
7862 push @NbrsToExcludeFromMatch, $MatchedBondAtom1; | |
7863 } | |
7864 | |
7865 @NbrAtomSymbols = (defined($NbrAtomSymbolsRef) && defined($NbrAtomSymbolsRef->[$BondAtomIndex])) ? @{$NbrAtomSymbolsRef->[$BondAtomIndex]} : (); | |
7866 @NbrBondSymbols = (defined($NbrBondSymbolsRef) && defined($NbrBondSymbolsRef->[$BondAtomIndex]) ) ? @{$NbrBondSymbolsRef->[$BondAtomIndex]} : (); | |
7867 @NbrMinHydrogenCount = (defined($NbrsMinHydrogenCountRef) && defined($NbrsMinHydrogenCountRef->[$BondAtomIndex]) ) ? @{$NbrsMinHydrogenCountRef->[$BondAtomIndex]} : (); | |
7868 if (!$This->_DoesAtomNeighborhoodMatch($BondAtom, $BondAtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols, $MinHydrogenCount, \@NbrMinHydrogenCount, \@NbrsToExcludeFromMatch)) { | |
7869 next BOND; | |
7870 } | |
7871 } | |
7872 $KeyValue++; | |
7873 if (defined($MinKeyCount) && $KeyValue < $MinKeyCount) { | |
7874 next BOND; | |
7875 } | |
7876 if ($This->{KeyBits}) { | |
7877 $KeyValue = 1; | |
7878 last BOND; | |
7879 } | |
7880 } | |
7881 return $KeyValue; | |
7882 } | |
7883 | |
7884 # Detect extended atom neighborhood keys like QHAQH, QHAAQH, and so on... | |
7885 # | |
7886 sub _DetectExtendedAtomNeighborhoodKeys { | |
7887 my($This, $CentralAtomsSymbolsRef, $CentralAtomsBondSymbolsRef, $CentralAtomsMinHydrogenCountRef, $MinKeyCount, $NbrAtomSymbolsRef, $NbrBondSymbolsRef, $NbrsMinHydrogenCountRef) = @_; | |
7888 my($KeyValue, $Molecule, $FirstCentralAtomIndex, $LastCentralAtomIndex, $NumOfCentralAtoms); | |
7889 | |
7890 $KeyValue = 0; | |
7891 | |
7892 $Molecule = $This->GetMolecule(); | |
7893 $NumOfCentralAtoms = @{$CentralAtomsSymbolsRef}; | |
7894 $FirstCentralAtomIndex = 0; | |
7895 $LastCentralAtomIndex = $NumOfCentralAtoms - 1; | |
7896 | |
7897 # Retrieve first central atom information... | |
7898 my($FirstCentralAtomSymbol, $FirstCentralAtomMinHydrogenCount); | |
7899 $FirstCentralAtomSymbol = $CentralAtomsSymbolsRef->[$FirstCentralAtomIndex]; | |
7900 $FirstCentralAtomMinHydrogenCount = defined($CentralAtomsMinHydrogenCountRef) ? $CentralAtomsMinHydrogenCountRef->[$FirstCentralAtomIndex] : undef; | |
7901 | |
7902 # Retrieve last central atom information... | |
7903 my($LastCentralAtomSymbol, $LastCentralAtomMinHydrogenCount); | |
7904 $LastCentralAtomSymbol = $CentralAtomsSymbolsRef->[$LastCentralAtomIndex]; | |
7905 $LastCentralAtomMinHydrogenCount = defined($CentralAtomsMinHydrogenCountRef) ? $CentralAtomsMinHydrogenCountRef->[$LastCentralAtomIndex] : undef; | |
7906 | |
7907 my($Atom, $AtomPathRef, $AtomPathsRef, $FirstAtomIndex, $LastAtomIndex, $AtomIndex, $FirstPathAtom, $LastPathAtom, $FirstPathAtomID, $LastPathAtomID, $DetectedPathID, $PathAtom, $NextPathAtom, $PreviousPathAtom, $AtomSymbol, $NextAtomSymbol, $BondSymbol, $MatchSpecifiedAtomOrder, $MinHydrogenCount, @NbrsToExcludeFromMatch, @NbrAtomSymbols, @NbrBondSymbols, @NbrMinHydrogenCount, %AlreadyDetectedPaths); | |
7908 | |
7909 # Go over all the atoms... | |
7910 # | |
7911 ATOM: for $Atom (@{$This->{Atoms}}) { | |
7912 # Match first central atom... | |
7913 if (!$This->_DoesAtomNeighborhoodMatch($Atom, $FirstCentralAtomSymbol, undef, undef, $FirstCentralAtomMinHydrogenCount, undef)) { | |
7914 next ATOM; | |
7915 } | |
7916 # Get atom paths starting from matched central atom with length equal to NumOfCentralAtoms... | |
7917 # | |
7918 $AtomPathsRef = $Molecule->GetAllAtomPathsStartingAtWithLength($Atom, $NumOfCentralAtoms); | |
7919 if (!(defined($AtomPathsRef) && @{$AtomPathsRef})) { | |
7920 next ATOM; | |
7921 } | |
7922 ATOMPATH: for $AtomPathRef (@{$AtomPathsRef}) { | |
7923 $FirstAtomIndex = 0; | |
7924 $FirstPathAtom = $AtomPathRef->[$FirstAtomIndex]; | |
7925 $LastAtomIndex = @{$AtomPathRef} - 1; | |
7926 $LastPathAtom = $AtomPathRef->[$LastAtomIndex]; | |
7927 | |
7928 # Match last central atom to the last atom in path... | |
7929 if (!$This->_DoesAtomNeighborhoodMatch($LastPathAtom, $LastCentralAtomSymbol, undef, undef, $LastCentralAtomMinHydrogenCount, undef)) { | |
7930 next ATOMPATH; | |
7931 } | |
7932 | |
7933 # Match other path atoms with central atoms.. | |
7934 for $AtomIndex ($FirstAtomIndex .. $LastAtomIndex) { | |
7935 $PathAtom = $AtomPathRef->[$AtomIndex]; | |
7936 $AtomSymbol = $CentralAtomsSymbolsRef->[$AtomIndex]; | |
7937 $MinHydrogenCount = defined($CentralAtomsMinHydrogenCountRef) ? $CentralAtomsMinHydrogenCountRef->[$AtomIndex] : undef; | |
7938 | |
7939 @NbrsToExcludeFromMatch = (); | |
7940 if ($AtomIndex == $FirstAtomIndex) { | |
7941 $NextPathAtom = $AtomPathRef->[$AtomIndex + 1]; $PreviousPathAtom = undef; | |
7942 push @NbrsToExcludeFromMatch, $NextPathAtom; | |
7943 } | |
7944 elsif ($AtomIndex == $LastAtomIndex) { | |
7945 $NextPathAtom = undef; $PreviousPathAtom = $AtomPathRef->[$AtomIndex - 1]; | |
7946 push @NbrsToExcludeFromMatch, $PreviousPathAtom; | |
7947 } | |
7948 else { | |
7949 $NextPathAtom = $AtomPathRef->[$AtomIndex + 1]; $PreviousPathAtom = $AtomPathRef->[$AtomIndex - 1]; | |
7950 push @NbrsToExcludeFromMatch, ($PreviousPathAtom, $NextPathAtom); | |
7951 } | |
7952 | |
7953 @NbrAtomSymbols = (defined($NbrAtomSymbolsRef) && defined($NbrAtomSymbolsRef->[$AtomIndex])) ? @{$NbrAtomSymbolsRef->[$AtomIndex]} : (); | |
7954 @NbrBondSymbols = (defined($NbrBondSymbolsRef) && defined($NbrBondSymbolsRef->[$AtomIndex]) ) ? @{$NbrBondSymbolsRef->[$AtomIndex]} : (); | |
7955 @NbrMinHydrogenCount = (defined($NbrsMinHydrogenCountRef) && defined($NbrsMinHydrogenCountRef->[$AtomIndex]) ) ? @{$NbrsMinHydrogenCountRef->[$AtomIndex]} : (); | |
7956 | |
7957 if (!$This->_DoesAtomNeighborhoodMatch($PathAtom, $AtomSymbol, \@NbrAtomSymbols, \@NbrBondSymbols, $MinHydrogenCount, \@NbrMinHydrogenCount, \@NbrsToExcludeFromMatch)) { | |
7958 next ATOMPATH; | |
7959 } | |
7960 # Match path bond symbols... | |
7961 if (defined($CentralAtomsBondSymbolsRef) && ($AtomIndex < $LastAtomIndex)) { | |
7962 $NextAtomSymbol = $CentralAtomsSymbolsRef->[$AtomIndex + 1]; | |
7963 $BondSymbol = $CentralAtomsBondSymbolsRef->[$AtomIndex]; | |
7964 $MatchSpecifiedAtomOrder = 1; | |
7965 if (!$This->_DoBondAtomsMatchBondSymbols($PathAtom, $NextPathAtom, $AtomSymbol, $NextAtomSymbol, $BondSymbol, $MatchSpecifiedAtomOrder)) { | |
7966 next ATOMPATH; | |
7967 } | |
7968 } | |
7969 } | |
7970 # Keep track of the first and last atom ID in the matched path to avoid double counting of paths... | |
7971 if (defined($MinKeyCount) || !$This->{KeyBits}) { | |
7972 $FirstPathAtomID = $FirstPathAtom->GetID(); $LastPathAtomID = $LastPathAtom->GetID(); | |
7973 $DetectedPathID = ($FirstPathAtomID < $LastPathAtomID) ? "${FirstPathAtomID}-${LastPathAtomID}" : "${LastPathAtomID}-${FirstPathAtomID}"; | |
7974 if (exists $AlreadyDetectedPaths{$DetectedPathID}) { | |
7975 $AlreadyDetectedPaths{$DetectedPathID} += 1; | |
7976 next ATOMPATH; | |
7977 } | |
7978 $AlreadyDetectedPaths{$DetectedPathID} = 1; | |
7979 } | |
7980 | |
7981 $KeyValue++; | |
7982 if (defined($MinKeyCount) && $KeyValue < $MinKeyCount) { | |
7983 next ATOMPATH; | |
7984 } | |
7985 if ($This->{KeyBits}) { | |
7986 $KeyValue = 1; | |
7987 last ATOM; | |
7988 } | |
7989 } | |
7990 } | |
7991 return $KeyValue; | |
7992 } | |
7993 | |
7994 # Go over the atoms attached to central atom and match 'em against specified | |
7995 # neighborhood atom symbol and bond symbols... | |
7996 # | |
7997 sub _DoesAtomNeighborhoodMatch { | |
7998 my($This, $CentralAtom, $CentralAtomSymbol, $NbrAtomSymbolsRef, $NbrBondSymbolsRef, $CentralAtomMinHydrogenCount, $NbrAtomMinHydrogenCountRef, $NbrsToExcludeRef) = @_; | |
7999 | |
8000 # Match central atom first... | |
8001 if (!$This->_DoesAtomMatchesSymbol($CentralAtom, $CentralAtomSymbol)) { | |
8002 return 0; | |
8003 } | |
8004 if (defined $CentralAtomMinHydrogenCount) { | |
8005 if (!$This->_DoesAtomMinHydrogenCountMatch($CentralAtom, $CentralAtomMinHydrogenCount)) { | |
8006 return 0; | |
8007 } | |
8008 } | |
8009 if (!defined $NbrAtomSymbolsRef) { | |
8010 # No neighbors to match... | |
8011 return 1; | |
8012 } | |
8013 | |
8014 # Match neighbors... | |
8015 my($NbrAtom, $Index, $NbrAtomSymbol, $NbrBondSymbol, $NbrAtomMinHydrogenCount, $NbrAtomMatchCount, $MinNbrAtomMatchCount, $MatchSpecifiedAtomOrder, @CentralAtomNeighbors, %NbrAtomAlreadyMatchedMap); | |
8016 | |
8017 $MinNbrAtomMatchCount = @$NbrAtomSymbolsRef; | |
8018 if (!$MinNbrAtomMatchCount) { | |
8019 # No neighbors to match... | |
8020 return 1; | |
8021 } | |
8022 | |
8023 $NbrAtomMatchCount = 0; | |
8024 | |
8025 %NbrAtomAlreadyMatchedMap = (); | |
8026 $MatchSpecifiedAtomOrder = 1; | |
8027 | |
8028 @CentralAtomNeighbors = (); | |
8029 if (defined($NbrsToExcludeRef) && @{$NbrsToExcludeRef}) { | |
8030 push @CentralAtomNeighbors, $CentralAtom->GetNeighbors(@{$NbrsToExcludeRef}); | |
8031 } | |
8032 else { | |
8033 push @CentralAtomNeighbors, $CentralAtom->GetNeighbors(); | |
8034 } | |
8035 | |
8036 NBRATOM: for $NbrAtom (@CentralAtomNeighbors) { | |
8037 NBRATOMSYMBOL: for $Index (0 .. ($MinNbrAtomMatchCount - 1)) { | |
8038 if (exists $NbrAtomAlreadyMatchedMap{$Index}) { | |
8039 next NBRATOMSYMBOL; | |
8040 } | |
8041 $NbrAtomSymbol = $NbrAtomSymbolsRef->[$Index]; | |
8042 $NbrBondSymbol = $NbrBondSymbolsRef->[$Index]; | |
8043 if (!$This->_DoBondAtomsMatchBondSymbols($CentralAtom, $NbrAtom, $CentralAtomSymbol, $NbrAtomSymbol, $NbrBondSymbol, $MatchSpecifiedAtomOrder)) { | |
8044 next NBRATOMSYMBOL; | |
8045 } | |
8046 | |
8047 if (defined($NbrAtomMinHydrogenCountRef) && $NbrAtomMinHydrogenCountRef->[$Index]) { | |
8048 $NbrAtomMinHydrogenCount = $NbrAtomMinHydrogenCountRef->[$Index]; | |
8049 if (!$This->_DoesAtomMinHydrogenCountMatch($NbrAtom, $NbrAtomMinHydrogenCount)) { | |
8050 next NBRATOMSYMBOL; | |
8051 } | |
8052 } | |
8053 $NbrAtomAlreadyMatchedMap{$Index} = $Index; | |
8054 $NbrAtomMatchCount++; | |
8055 | |
8056 if ($NbrAtomMatchCount == $MinNbrAtomMatchCount) { | |
8057 last NBRATOM; | |
8058 } | |
8059 next NBRATOM; | |
8060 } | |
8061 } | |
8062 | |
8063 return ($NbrAtomMatchCount == $MinNbrAtomMatchCount) ? 1 : 0; | |
8064 } | |
8065 | |
8066 # Checks whether bond atoms match bond symbols... | |
8067 # | |
8068 sub _DoBondAtomsMatchBondSymbols { | |
8069 my($This, $Atom1, $Atom2, $AtomSymbol1, $AtomSymbol2, $BondSymbol, $MatchSpecifiedAtomOrder, $Atom1MinHydrogenCount, $Atom2MinHydrogenCount) = @_; | |
8070 my($Status, $ReverseMinHydrogenCountMatch); | |
8071 | |
8072 $ReverseMinHydrogenCountMatch = 0; | |
8073 | |
8074 if (defined($MatchSpecifiedAtomOrder) && $MatchSpecifiedAtomOrder) { | |
8075 if (!($This->_DoesAtomMatchesSymbol($Atom1, $AtomSymbol1) && $This->_DoesAtomMatchesSymbol($Atom2, $AtomSymbol2))) { | |
8076 return 0; | |
8077 } | |
8078 } | |
8079 else { | |
8080 if ($This->_DoesAtomMatchesSymbol($Atom1, $AtomSymbol1) && $This->_DoesAtomMatchesSymbol($Atom2, $AtomSymbol2)) { | |
8081 $ReverseMinHydrogenCountMatch = 0; | |
8082 } | |
8083 elsif ($This->_DoesAtomMatchesSymbol($Atom1, $AtomSymbol2) && $This->_DoesAtomMatchesSymbol($Atom2, $AtomSymbol1)) { | |
8084 $ReverseMinHydrogenCountMatch = 1; | |
8085 } | |
8086 else { | |
8087 return 0; | |
8088 } | |
8089 } | |
8090 | |
8091 # Match any hydrogen count... | |
8092 if (defined($Atom1MinHydrogenCount) || defined($Atom2MinHydrogenCount)) { | |
8093 my($MinHydrogenCountMatchAtom1, $MinHydrogenCountMatchAtom2); | |
8094 | |
8095 ($MinHydrogenCountMatchAtom1, $MinHydrogenCountMatchAtom2) = $ReverseMinHydrogenCountMatch ? ($Atom2, $Atom1) : ($Atom1, $Atom2); | |
8096 if (defined $Atom1MinHydrogenCount ) { | |
8097 if (!$This->_DoesAtomMinHydrogenCountMatch($MinHydrogenCountMatchAtom1, $Atom1MinHydrogenCount)) { | |
8098 return 0; | |
8099 } | |
8100 } | |
8101 if (defined $Atom2MinHydrogenCount ) { | |
8102 if (!$This->_DoesAtomMinHydrogenCountMatch($MinHydrogenCountMatchAtom2, $Atom2MinHydrogenCount)) { | |
8103 return 0; | |
8104 } | |
8105 } | |
8106 } | |
8107 | |
8108 if (defined($BondSymbol) && $BondSymbol) { | |
8109 my($Bond); | |
8110 $Bond = $Atom1->GetBondToAtom($Atom2); | |
8111 if (!$This->_DoesBondMatchesSymbol($Bond, $BondSymbol)) { | |
8112 return 0; | |
8113 } | |
8114 } | |
8115 return 1; | |
8116 } | |
8117 | |
8118 # Match both implicit and explicit hydrogens on central atom... | |
8119 sub _DoesAtomMinHydrogenCountMatch { | |
8120 my($This, $Atom, $MinHydrogenCount) = @_; | |
8121 | |
8122 if (!(defined($MinHydrogenCount) && $MinHydrogenCount)) { | |
8123 return 0; | |
8124 } | |
8125 return ($Atom->GetNumOfHydrogens() < $MinHydrogenCount) ? 0 : 1; | |
8126 } | |
8127 | |
8128 # Checks whether atom matches supported symbol... | |
8129 # | |
8130 sub _DoesAtomMatchesSymbol { | |
8131 my($This, $Atom, $Symbol) = @_; | |
8132 my($Status); | |
8133 | |
8134 $Status = 0; | |
8135 SYMBOL: { | |
8136 if ($Symbol =~ /^Q$/i) { $Status = $This->_IsHeteroAtom($Atom) ? 1 : 0; last SYMBOL; } | |
8137 if ($Symbol =~ /^X$/i) { $Status = $This->_IsHalogenAtom($Atom) ? 1 : 0; last SYMBOL; } | |
8138 if ($Symbol =~ /^Z$/i) { $Status = $This->_IsOtherAtom($Atom) ? 1 : 0; last SYMBOL; } | |
8139 if ($Symbol =~ /^A$/i) { $Status = $This->_IsAtom($Atom) ? 1 : 0; last SYMBOL; } | |
8140 $Status = ($Atom->GetAtomSymbol() =~ /^$Symbol$/i) ? 1 : 0; | |
8141 } | |
8142 return $Status; | |
8143 } | |
8144 | |
8145 # Checks whether bond matches supported symbol... | |
8146 # | |
8147 sub _DoesBondMatchesSymbol { | |
8148 my($This, $Bond, $Symbol) = @_; | |
8149 my($Status, $BondOrder); | |
8150 | |
8151 $Status = 0; | |
8152 SYMBOL: { | |
8153 if ($Symbol =~ /^(1|-)$/i) { $Status = $Bond->IsSingle() ? 1 : 0; last SYMBOL; } | |
8154 if ($Symbol =~ /^(2|=)$/i) { $Status = $Bond->IsDouble() ? 1 : 0; last SYMBOL; } | |
8155 if ($Symbol =~ /^(3|#|T)$/i) { $Status = $Bond->IsTriple() ? 1 : 0; last SYMBOL; } | |
8156 if ($Symbol =~ /^(1.5|%)$/i) { $Status = $Bond->IsAromatic() ? 1 : 0; last SYMBOL; } | |
8157 | |
8158 if ($Symbol =~ /^\~$/i) { $Status = ($Bond->IsSingle() || $Bond->IsDouble()) ? 1 : 0; last SYMBOL; } | |
8159 | |
8160 if ($Symbol =~ /^\$$/i) { $Status = $Bond->IsInRing() ? 1 : 0; last SYMBOL; } | |
8161 if ($Symbol =~ /^\!$/i) { $Status = $Bond->IsInRing() ? 0 : 1; last SYMBOL; } | |
8162 | |
8163 if ($Symbol =~ /^(\$-)$/i) { $Status = ($Bond->IsInRing() && $Bond->IsSingle()) ? 1 : 0; last SYMBOL; } | |
8164 if ($Symbol =~ /^(\$=)$/i) { $Status = ($Bond->IsInRing() && $Bond->IsDouble()) ? 1 : 0; last SYMBOL; } | |
8165 if ($Symbol =~ /^(\$#|\$T)$/i) { $Status = ($Bond->IsInRing() && $Bond->IsTriple()) ? 1 : 0; last SYMBOL; } | |
8166 | |
8167 if ($Symbol =~ /^(not%)$/i) { $Status = $Bond->IsAromatic() ? 0 : 1; last SYMBOL; } | |
8168 if ($Symbol =~ /^(not%not-)$/i) { $Status = $Bond->IsAromatic() ? 0 : ($Bond->IsSingle() ? 0 : 1); last SYMBOL; } | |
8169 if ($Symbol =~ /^(not%not=)$/i) { $Status = $Bond->IsAromatic() ? 0 : ($Bond->IsDouble() ? 0 : 1); last SYMBOL; } | |
8170 | |
8171 $Status = 0; | |
8172 } | |
8173 return $Status; | |
8174 } | |
8175 | |
8176 # Cache appropriate molecule data... | |
8177 # | |
8178 sub _SetupMoleculeDataCache { | |
8179 my($This) = @_; | |
8180 | |
8181 @{$This->{Atoms}} = $This->GetMolecule()->GetAtoms(); | |
8182 @{$This->{Bonds}} = $This->GetMolecule()->GetBonds(); | |
8183 | |
8184 return $This; | |
8185 } | |
8186 | |
8187 # Clear cached molecule data... | |
8188 # | |
8189 sub _ClearMoleculeDataCache { | |
8190 my($This) = @_; | |
8191 | |
8192 @{$This->{Atoms}} = (); | |
8193 @{$This->{Bonds}} = (); | |
8194 | |
8195 return $This; | |
8196 } | |
8197 | |
8198 # Return a string containg data for MACCSKeys object... | |
8199 sub StringifyMACCSKeys { | |
8200 my($This) = @_; | |
8201 my($MACCSKeysString); | |
8202 | |
8203 # Type of Keys... | |
8204 $MACCSKeysString = "Type: $This->{Type}; Size: $This->{Size}"; | |
8205 | |
8206 if ($This->{Type} =~ /^MACCSKeyBits$/i) { | |
8207 $MACCSKeysString .= "; FingerprintsBitVector: < $This->{FingerprintsBitVector} >"; | |
8208 } | |
8209 elsif ($This->{Type} =~ /^MACCSKeyCount$/i) { | |
8210 $MACCSKeysString .= "; FingerprintsVector: < $This->{FingerprintsVector} >"; | |
8211 } | |
8212 | |
8213 return $MACCSKeysString; | |
8214 } | |
8215 | |
8216 1; | |
8217 | |
8218 __END__ | |
8219 | |
8220 =head1 NAME | |
8221 | |
8222 MACCSKeys | |
8223 | |
8224 =head1 SYNOPSIS | |
8225 | |
8226 use Fingerprints::MACCSKeys; | |
8227 | |
8228 use Fingerprints::MACCSKeys qw(:all); | |
8229 | |
8230 =head1 DESCRIPTION | |
8231 | |
8232 B<MACCSKeys> [ Ref 45-47 ] class provides the following methods: | |
8233 | |
8234 new, GenerateFingerprints, GenerateMACCSKeys, GetDescription, SetSize, SetType, | |
8235 StringifyMACCSKeys | |
8236 | |
8237 B<MACCSKeys> is derived from B<Fingerprints> class which in turn is derived from | |
8238 B<ObjectProperty> base class that provides methods not explicitly defined in B<MACCSKeys>, | |
8239 B<Fingerprints> or B<ObjectProperty> classes using Perl's AUTOLOAD functionality. These | |
8240 methods are generated on-the-fly for a specified object property: | |
8241 | |
8242 Set<PropertyName>(<PropertyValue>); | |
8243 $PropertyValue = Get<PropertyName>(); | |
8244 Delete<PropertyName>(); | |
8245 | |
8246 For each MACCS (Molecular ACCess System) keys definition, atoms are processed to | |
8247 determine their membership to the key and the appropriate molecular fingerprints strings | |
8248 are generated. An atom can belong to multiple MACCS keys. | |
8249 | |
8250 For I<MACCSKeyBits> value of B<Type> option, a fingerprint bit-vector string containing | |
8251 zeros and ones is generated and for I<MACCSKeyCount> value, a fingerprint vector string | |
8252 corresponding to number of MACCS keys [ Ref 45-47 ] is generated. | |
8253 | |
8254 I<MACCSKeyBits or MACCSKeyCount> values for B<Type> along with two possible | |
8255 I<166 | 322> values of B<Size> supports generation of four different types of MACCS | |
8256 keys fingerprint: I<MACCS166KeyBits, MACCS166KeyCount, MACCS322KeyBits, MACCS322KeyCount>. | |
8257 | |
8258 The current release of MayaChemTools generates the following types of MACCS keys | |
8259 fingerprints bit-vector and vector strings: | |
8260 | |
8261 FingerprintsBitVector;MACCSKeyBits;166;BinaryString;Ascending;00000000 | |
8262 0000000000000000000000000000000001001000010010000000010010000000011100 | |
8263 0100101010111100011011000100110110000011011110100110111111111111011111 | |
8264 11111111111110111000 | |
8265 | |
8266 FingerprintsBitVector;MACCSKeyBits;166;HexadecimalString;Ascending;000 | |
8267 000000021210210e845f8d8c60b79dffbffffd1 | |
8268 | |
8269 FingerprintsBitVector;MACCSKeyBits;322;BinaryString;Ascending;11101011 | |
8270 1110011111100101111111000111101100110000000000000011100010000000000000 | |
8271 0000000000000000000000000000000000000000000000101000000000000000000000 | |
8272 0000000000000000000000000000000000000000000000000000000000000000000000 | |
8273 0000000000000000000000000000000000000011000000000000000000000000000000 | |
8274 0000000000000000000000000000000000000000 | |
8275 | |
8276 FingerprintsBitVector;MACCSKeyBits;322;HexadecimalString;Ascending;7d7 | |
8277 e7af3edc000c1100000000000000500000000000000000000000000000000300000000 | |
8278 000000000 | |
8279 | |
8280 FingerprintsVector;MACCSKeyCount;166;OrderedNumericalValues;ValuesStri | |
8281 ng;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | |
8282 0 0 0 0 0 0 0 1 0 0 3 0 0 0 0 4 0 0 2 0 0 0 0 0 0 0 0 2 0 0 2 0 0 0 0 | |
8283 0 0 0 0 1 1 8 0 0 0 1 0 0 1 0 1 0 1 0 3 1 3 1 0 0 0 1 2 0 11 1 0 0 0 | |
8284 5 0 0 1 2 0 1 1 0 0 0 0 0 1 1 0 1 1 1 1 0 4 0 0 1 1 0 4 6 1 1 1 2 1 1 | |
8285 3 5 2 2 0 5 3 5 1 1 2 5 1 2 1 2 4 8 3 5 5 2 2 0 3 5 4 1 | |
8286 | |
8287 FingerprintsVector;MACCSKeyCount;322;OrderedNumericalValues;ValuesStri | |
8288 ng;14 8 2 0 2 0 4 4 2 1 4 0 0 2 5 10 5 2 1 0 0 2 0 5 13 3 28 5 5 3 0 0 | |
8289 0 4 2 1 1 0 1 1 0 0 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 5 3 0 0 0 1 0 | |
8290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | |
8291 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 2 0 0 0 0 0 0 0 0 0 | |
8292 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... | |
8293 | |
8294 =head2 METHODS | |
8295 | |
8296 =over 4 | |
8297 | |
8298 =item B<new> | |
8299 | |
8300 $NewMACCSKeys = new MACCSKeys(%NamesAndValues); | |
8301 | |
8302 Using specified I<MACCSKeys> property names and values hash, B<new> method creates a new object | |
8303 and returns a reference to newly created B<PathLengthFingerprints> object. By default, the | |
8304 following properties are initialized: | |
8305 | |
8306 Molecule = ''; | |
8307 Type = '' | |
8308 Size = '' | |
8309 | |
8310 Examples: | |
8311 | |
8312 $MACCSKeys = new MACCSKeys('Molecule' => $Molecule, | |
8313 'Type' => 'MACCSKeyBits', | |
8314 'Size' => 166); | |
8315 | |
8316 $MACCSKeys = new MACCSKeys('Molecule' => $Molecule, | |
8317 'Type' => 'MACCSKeyCount', | |
8318 'Size' => 166); | |
8319 | |
8320 $MACCSKeys = new MACCSKeys('Molecule' => $Molecule, | |
8321 'Type' => 'MACCSKeyBit', | |
8322 'Size' => 322); | |
8323 | |
8324 $MACCSKeys = new MACCSKeys('Molecule' => $Molecule, | |
8325 'Type' => 'MACCSKeyCount', | |
8326 'Size' => 322); | |
8327 | |
8328 $MACCSKeys->GenerateMACCSKeys(); | |
8329 print "$MACCSKeys\n"; | |
8330 | |
8331 =item B<GetDescription> | |
8332 | |
8333 $Description = $MACCSKeys->GetDescription(); | |
8334 | |
8335 Returns a string containing description of MACCS keys fingerprints. | |
8336 | |
8337 =item B<GenerateMACCSKeys or GenerateFingerprints> | |
8338 | |
8339 $MACCSKeys = $MACCSKeys->GenerateMACCSKeys(); | |
8340 | |
8341 Generates MACCS keys fingerprints and returns I<MACCSKeys>. | |
8342 | |
8343 For I<MACCSKeyBits> value of B<Type>, a fingerprint bit-vector string containing | |
8344 zeros and ones is generated and for I<MACCSKeyCount> value, a fingerprint vector string | |
8345 corresponding to number of MACCS keys is generated. | |
8346 | |
8347 I<MACCSKeyBits or MACCSKeyCount> values for B<Type> option along with two possible | |
8348 I<166 | 322> values of B<Size> supports generation of four different types of MACCS | |
8349 keys fingerprint: I<MACCS166KeyBits, MACCS166KeyCount, MACCS322KeyBits, MACCS322KeyCount>. | |
8350 | |
8351 Definition of MACCS keys uses the following atom and bond symbols to define atom and | |
8352 bond environments: | |
8353 | |
8354 Atom symbols for 166 keys [ Ref 47 ]: | |
8355 | |
8356 A : Any valid periodic table element symbol | |
8357 Q : Hetro atoms; any non-C or non-H atom | |
8358 X : Halogens; F, Cl, Br, I | |
8359 Z : Others; other than H, C, N, O, Si, P, S, F, Cl, Br, I | |
8360 | |
8361 Atom symbols for 322 keys [ Ref 46 ]: | |
8362 | |
8363 A : Any valid periodic table element symbol | |
8364 Q : Hetro atoms; any non-C or non-H atom | |
8365 X : Others; other than H, C, N, O, Si, P, S, F, Cl, Br, I | |
8366 Z is neither defined nor used | |
8367 | |
8368 Bond types: | |
8369 | |
8370 - : Single | |
8371 = : Double | |
8372 T : Triple | |
8373 # : Triple | |
8374 ~ : Single or double query bond | |
8375 % : An aromatic query bond | |
8376 | |
8377 None : Any bond type; no explicit bond specified | |
8378 | |
8379 $ : Ring bond; $ before a bond type specifies ring bond | |
8380 ! : Chain or non-ring bond; ! before a bond type specifies chain bond | |
8381 | |
8382 @ : A ring linkage and the number following it specifies the | |
8383 atoms position in the line, thus @1 means linked back to the first | |
8384 atom in the list. | |
8385 | |
8386 Aromatic: Kekule or Arom5 | |
8387 | |
8388 Kekule: Bonds in 6-membered rings with alternate single/double bonds | |
8389 or perimeter bonds | |
8390 Arom5: Bonds in 5-membered rings with two double bonds and a hetro | |
8391 atom at the apex of the ring. | |
8392 | |
8393 MACCS 166 keys [ Ref 45-47 ] are defined as follows: | |
8394 | |
8395 Key Description | |
8396 | |
8397 1 ISOTOPE | |
8398 2 103 < ATOMIC NO. < 256 | |
8399 3 GROUP IVA,VA,VIA PERIODS 4-6 (Ge...) | |
8400 4 ACTINIDE | |
8401 5 GROUP IIIB,IVB (Sc...) | |
8402 6 LANTHANIDE | |
8403 7 GROUP VB,VIB,VIIB (V...) | |
8404 8 QAAA@1 | |
8405 9 GROUP VIII (Fe...) | |
8406 10 GROUP IIA (ALKALINE EARTH) | |
8407 11 4M RING | |
8408 12 GROUP IB,IIB (Cu...) | |
8409 13 ON(C)C | |
8410 14 S-S | |
8411 15 OC(O)O | |
8412 16 QAA@1 | |
8413 17 CTC | |
8414 18 GROUP IIIA (B...) | |
8415 19 7M RING | |
8416 20 SI | |
8417 21 C=C(Q)Q | |
8418 22 3M RING | |
8419 23 NC(O)O | |
8420 24 N-O | |
8421 25 NC(N)N | |
8422 26 C$=C($A)$A | |
8423 27 I | |
8424 28 QCH2Q | |
8425 29 P | |
8426 30 CQ(C)(C)A | |
8427 31 QX | |
8428 32 CSN | |
8429 33 NS | |
8430 34 CH2=A | |
8431 35 GROUP IA (ALKALI METAL) | |
8432 36 S HETEROCYCLE | |
8433 37 NC(O)N | |
8434 38 NC(C)N | |
8435 39 OS(O)O | |
8436 40 S-O | |
8437 41 CTN | |
8438 42 F | |
8439 43 QHAQH | |
8440 44 OTHER | |
8441 45 C=CN | |
8442 46 BR | |
8443 47 SAN | |
8444 48 OQ(O)O | |
8445 49 CHARGE | |
8446 50 C=C(C)C | |
8447 51 CSO | |
8448 52 NN | |
8449 53 QHAAAQH | |
8450 54 QHAAQH | |
8451 55 OSO | |
8452 56 ON(O)C | |
8453 57 O HETEROCYCLE | |
8454 58 QSQ | |
8455 59 Snot%A%A | |
8456 60 S=O | |
8457 61 AS(A)A | |
8458 62 A$A!A$A | |
8459 63 N=O | |
8460 64 A$A!S | |
8461 65 C%N | |
8462 66 CC(C)(C)A | |
8463 67 QS | |
8464 68 QHQH (&...) | |
8465 69 QQH | |
8466 70 QNQ | |
8467 71 NO | |
8468 72 OAAO | |
8469 73 S=A | |
8470 74 CH3ACH3 | |
8471 75 A!N$A | |
8472 76 C=C(A)A | |
8473 77 NAN | |
8474 78 C=N | |
8475 79 NAAN | |
8476 80 NAAAN | |
8477 81 SA(A)A | |
8478 82 ACH2QH | |
8479 83 QAAAA@1 | |
8480 84 NH2 | |
8481 85 CN(C)C | |
8482 86 CH2QCH2 | |
8483 87 X!A$A | |
8484 88 S | |
8485 89 OAAAO | |
8486 90 QHAACH2A | |
8487 91 QHAAACH2A | |
8488 92 OC(N)C | |
8489 93 QCH3 | |
8490 94 QN | |
8491 95 NAAO | |
8492 96 5M RING | |
8493 97 NAAAO | |
8494 98 QAAAAA@1 | |
8495 99 C=C | |
8496 100 ACH2N | |
8497 101 8M RING | |
8498 102 QO | |
8499 103 CL | |
8500 104 QHACH2A | |
8501 105 A$A($A)$A | |
8502 106 QA(Q)Q | |
8503 107 XA(A)A | |
8504 108 CH3AAACH2A | |
8505 109 ACH2O | |
8506 110 NCO | |
8507 111 NACH2A | |
8508 112 AA(A)(A)A | |
8509 113 Onot%A%A | |
8510 114 CH3CH2A | |
8511 115 CH3ACH2A | |
8512 116 CH3AACH2A | |
8513 117 NAO | |
8514 118 ACH2CH2A > 1 | |
8515 119 N=A | |
8516 120 HETEROCYCLIC ATOM > 1 (&...) | |
8517 121 N HETEROCYCLE | |
8518 122 AN(A)A | |
8519 123 OCO | |
8520 124 QQ | |
8521 125 AROMATIC RING > 1 | |
8522 126 A!O!A | |
8523 127 A$A!O > 1 (&...) | |
8524 128 ACH2AAACH2A | |
8525 129 ACH2AACH2A | |
8526 130 QQ > 1 (&...) | |
8527 131 QH > 1 | |
8528 132 OACH2A | |
8529 133 A$A!N | |
8530 134 X (HALOGEN) | |
8531 135 Nnot%A%A | |
8532 136 O=A > 1 | |
8533 137 HETEROCYCLE | |
8534 138 QCH2A > 1 (&...) | |
8535 139 OH | |
8536 140 O > 3 (&...) | |
8537 141 CH3 > 2 (&...) | |
8538 142 N > 1 | |
8539 143 A$A!O | |
8540 144 Anot%A%Anot%A | |
8541 145 6M RING > 1 | |
8542 146 O > 2 | |
8543 147 ACH2CH2A | |
8544 148 AQ(A)A | |
8545 149 CH3 > 1 | |
8546 150 A!A$A!A | |
8547 151 NH | |
8548 152 OC(C)C | |
8549 153 QCH2A | |
8550 154 C=O | |
8551 155 A!CH2!A | |
8552 156 NA(A)A | |
8553 157 C-O | |
8554 158 C-N | |
8555 159 O > 1 | |
8556 160 CH3 | |
8557 161 N | |
8558 162 AROMATIC | |
8559 163 6M RING | |
8560 164 O | |
8561 165 RING | |
8562 166 FRAGMENTS | |
8563 | |
8564 MACCS 322 keys set as defined in tables 1, 2 and 3 [ Ref 46 ] include: | |
8565 | |
8566 o 26 atom properties of type P, as listed in Table 1 | |
8567 o 32 one-atom environments, as listed in Table 3 | |
8568 o 264 atom-bond-atom combinations listed in Table 4 | |
8569 | |
8570 Total number of keys in three tables is : 322 | |
8571 | |
8572 Atom symbol, X, used for 322 keys [ Ref 46 ] doesn't refer to Halogens as it does for 166 keys. In | |
8573 order to keep the definition of 322 keys consistent with the published definitions, the symbol X is | |
8574 used to imply "others" atoms, but it's internally mapped to symbol X as defined for 166 keys | |
8575 during the generation of key values. | |
8576 | |
8577 Atom properties-based keys (26): | |
8578 | |
8579 Key Description | |
8580 1 A(AAA) or AA(A)A - atom with at least three neighbors | |
8581 2 Q - heteroatom | |
8582 3 Anot%not-A - atom involved in one or more multiple bonds, not aromatic | |
8583 4 A(AAAA) or AA(A)(A)A - atom with at least four neighbors | |
8584 5 A(QQ) or QA(Q) - atom with at least two heteroatom neighbors | |
8585 6 A(QQQ) or QA(Q)Q - atom with at least three heteroatom neighbors | |
8586 7 QH - heteroatom with at least one hydrogen attached | |
8587 8 CH2(AA) or ACH2A - carbon with at least two single bonds and at least | |
8588 two hydrogens attached | |
8589 9 CH3(A) or ACH3 - carbon with at least one single bond and at least three | |
8590 hydrogens attached | |
8591 10 Halogen | |
8592 11 A(-A-A-A) or A-A(-A)-A - atom has at least three single bonds | |
8593 12 AAAAAA@1 > 2 - atom is in at least two different six-membered rings | |
8594 13 A($A$A$A) or A$A($A)$A - atom has more than two ring bonds | |
8595 14 A$A!A$A - atom is at a ring/chain boundary. When a comparison is done | |
8596 with another atom the path passes through the chain bond. | |
8597 15 Anot%A%Anot%A - atom is at an aromatic/nonaromatic boundary. When a | |
8598 comparison is done with another atom the path | |
8599 passes through the aromatic bond. | |
8600 16 A!A!A - atom with more than one chain bond | |
8601 17 A!A$A!A - atom is at a ring/chain boundary. When a comparison is done | |
8602 with another atom the path passes through the ring bond. | |
8603 18 A%Anot%A%A - atom is at an aromatic/nonaromatic boundary. When a | |
8604 comparison is done with another atom the | |
8605 path passes through the nonaromatic bond. | |
8606 19 HETEROCYCLE - atom is a heteroatom in a ring. | |
8607 20 rare properties: atom with five or more neighbors, atom in | |
8608 four or more rings, or atom types other than | |
8609 H, C, N, O, S, F, Cl, Br, or I | |
8610 21 rare properties: atom has a charge, is an isotope, has two or | |
8611 more multiple bonds, or has a triple bond. | |
8612 22 N - nitrogen | |
8613 23 S - sulfur | |
8614 24 O - oxygen | |
8615 25 A(AA)A(A)A(AA) - atom has two neighbors, each with three or | |
8616 more neighbors (including the central atom). | |
8617 26 CHACH2 - atom has two hydrocarbon (CH2) neighbors | |
8618 | |
8619 Atomic environments properties-based keys (32): | |
8620 | |
8621 Key Description | |
8622 27 C(CC) | |
8623 28 C(CCC) | |
8624 29 C(CN) | |
8625 30 C(CCN) | |
8626 31 C(NN) | |
8627 32 C(NNC) | |
8628 33 C(NNN) | |
8629 34 C(CO) | |
8630 35 C(CCO) | |
8631 36 C(NO) | |
8632 37 C(NCO) | |
8633 38 C(NNO) | |
8634 39 C(OO) | |
8635 40 C(COO) | |
8636 41 C(NOO) | |
8637 42 C(OOO) | |
8638 43 Q(CC) | |
8639 44 Q(CCC) | |
8640 45 Q(CN) | |
8641 46 Q(CCN) | |
8642 47 Q(NN) | |
8643 48 Q(CNN) | |
8644 49 Q(NNN) | |
8645 50 Q(CO) | |
8646 51 Q(CCO) | |
8647 52 Q(NO) | |
8648 53 Q(CNO) | |
8649 54 Q(NNO) | |
8650 55 Q(OO) | |
8651 56 Q(COO) | |
8652 57 Q(NOO) | |
8653 58 Q(OOO) | |
8654 | |
8655 Note: The first symbol is the central atom, with atoms bonded to the central atom listed in | |
8656 parentheses. Q is any non-C, non-H atom. If only two atoms are in parentheses, there is | |
8657 no implication concerning the other atoms bonded to the central atom. | |
8658 | |
8659 Atom-Bond-Atom properties-based keys: (264) | |
8660 | |
8661 Key Description | |
8662 59 C-C | |
8663 60 C-N | |
8664 61 C-O | |
8665 62 C-S | |
8666 63 C-Cl | |
8667 64 C-P | |
8668 65 C-F | |
8669 66 C-Br | |
8670 67 C-Si | |
8671 68 C-I | |
8672 69 C-X | |
8673 70 N-N | |
8674 71 N-O | |
8675 72 N-S | |
8676 73 N-Cl | |
8677 74 N-P | |
8678 75 N-F | |
8679 76 N-Br | |
8680 77 N-Si | |
8681 78 N-I | |
8682 79 N-X | |
8683 80 O-O | |
8684 81 O-S | |
8685 82 O-Cl | |
8686 83 O-P | |
8687 84 O-F | |
8688 85 O-Br | |
8689 86 O-Si | |
8690 87 O-I | |
8691 88 O-X | |
8692 89 S-S | |
8693 90 S-Cl | |
8694 91 S-P | |
8695 92 S-F | |
8696 93 S-Br | |
8697 94 S-Si | |
8698 95 S-I | |
8699 96 S-X | |
8700 97 Cl-Cl | |
8701 98 Cl-P | |
8702 99 Cl-F | |
8703 100 Cl-Br | |
8704 101 Cl-Si | |
8705 102 Cl-I | |
8706 103 Cl-X | |
8707 104 P-P | |
8708 105 P-F | |
8709 106 P-Br | |
8710 107 P-Si | |
8711 108 P-I | |
8712 109 P-X | |
8713 110 F-F | |
8714 111 F-Br | |
8715 112 F-Si | |
8716 113 F-I | |
8717 114 F-X | |
8718 115 Br-Br | |
8719 116 Br-Si | |
8720 117 Br-I | |
8721 118 Br-X | |
8722 119 Si-Si | |
8723 120 Si-I | |
8724 121 Si-X | |
8725 122 I-I | |
8726 123 I-X | |
8727 124 X-X | |
8728 125 C=C | |
8729 126 C=N | |
8730 127 C=O | |
8731 128 C=S | |
8732 129 C=Cl | |
8733 130 C=P | |
8734 131 C=F | |
8735 132 C=Br | |
8736 133 C=Si | |
8737 134 C=I | |
8738 135 C=X | |
8739 136 N=N | |
8740 137 N=O | |
8741 138 N=S | |
8742 139 N=Cl | |
8743 140 N=P | |
8744 141 N=F | |
8745 142 N=Br | |
8746 143 N=Si | |
8747 144 N=I | |
8748 145 N=X | |
8749 146 O=O | |
8750 147 O=S | |
8751 148 O=Cl | |
8752 149 O=P | |
8753 150 O=F | |
8754 151 O=Br | |
8755 152 O=Si | |
8756 153 O=I | |
8757 154 O=X | |
8758 155 S=S | |
8759 156 S=Cl | |
8760 157 S=P | |
8761 158 S=F | |
8762 159 S=Br | |
8763 160 S=Si | |
8764 161 S=I | |
8765 162 S=X | |
8766 163 Cl=Cl | |
8767 164 Cl=P | |
8768 165 Cl=F | |
8769 166 Cl=Br | |
8770 167 Cl=Si | |
8771 168 Cl=I | |
8772 169 Cl=X | |
8773 170 P=P | |
8774 171 P=F | |
8775 172 P=Br | |
8776 173 P=Si | |
8777 174 P=I | |
8778 175 P=X | |
8779 176 F=F | |
8780 177 F=Br | |
8781 178 F=Si | |
8782 179 F=I | |
8783 180 F=X | |
8784 181 Br=Br | |
8785 182 Br=Si | |
8786 183 Br=I | |
8787 184 Br=X | |
8788 185 Si=Si | |
8789 186 Si=I | |
8790 187 Si=X | |
8791 188 I=I | |
8792 189 I=X | |
8793 190 X=X | |
8794 191 C#C | |
8795 192 C#N | |
8796 193 C#O | |
8797 194 C#S | |
8798 195 C#Cl | |
8799 196 C#P | |
8800 197 C#F | |
8801 198 C#Br | |
8802 199 C#Si | |
8803 200 C#I | |
8804 201 C#X | |
8805 202 N#N | |
8806 203 N#O | |
8807 204 N#S | |
8808 205 N#Cl | |
8809 206 N#P | |
8810 207 N#F | |
8811 208 N#Br | |
8812 209 N#Si | |
8813 210 N#I | |
8814 211 N#X | |
8815 212 O#O | |
8816 213 O#S | |
8817 214 O#Cl | |
8818 215 O#P | |
8819 216 O#F | |
8820 217 O#Br | |
8821 218 O#Si | |
8822 219 O#I | |
8823 220 O#X | |
8824 221 S#S | |
8825 222 S#Cl | |
8826 223 S#P | |
8827 224 S#F | |
8828 225 S#Br | |
8829 226 S#Si | |
8830 227 S#I | |
8831 228 S#X | |
8832 229 Cl#Cl | |
8833 230 Cl#P | |
8834 231 Cl#F | |
8835 232 Cl#Br | |
8836 233 Cl#Si | |
8837 234 Cl#I | |
8838 235 Cl#X | |
8839 236 P#P | |
8840 237 P#F | |
8841 238 P#Br | |
8842 239 P#Si | |
8843 240 P#I | |
8844 241 P#X | |
8845 242 F#F | |
8846 243 F#Br | |
8847 244 F#Si | |
8848 245 F#I | |
8849 246 F#X | |
8850 247 Br#Br | |
8851 248 Br#Si | |
8852 249 Br#I | |
8853 250 Br#X | |
8854 251 Si#Si | |
8855 252 Si#I | |
8856 253 Si#X | |
8857 254 I#I | |
8858 255 I#X | |
8859 256 X#X | |
8860 257 C$C | |
8861 258 C$N | |
8862 259 C$O | |
8863 260 C$S | |
8864 261 C$Cl | |
8865 262 C$P | |
8866 263 C$F | |
8867 264 C$Br | |
8868 265 C$Si | |
8869 266 C$I | |
8870 267 C$X | |
8871 268 N$N | |
8872 269 N$O | |
8873 270 N$S | |
8874 271 N$Cl | |
8875 272 N$P | |
8876 273 N$F | |
8877 274 N$Br | |
8878 275 N$Si | |
8879 276 N$I | |
8880 277 N$X | |
8881 278 O$O | |
8882 279 O$S | |
8883 280 O$Cl | |
8884 281 O$P | |
8885 282 O$F | |
8886 283 O$Br | |
8887 284 O$Si | |
8888 285 O$I | |
8889 286 O$X | |
8890 287 S$S | |
8891 288 S$Cl | |
8892 289 S$P | |
8893 290 S$F | |
8894 291 S$Br | |
8895 292 S$Si | |
8896 293 S$I | |
8897 294 S$X | |
8898 295 Cl$Cl | |
8899 296 Cl$P | |
8900 297 Cl$F | |
8901 298 Cl$Br | |
8902 299 Cl$Si | |
8903 300 Cl$I | |
8904 301 Cl$X | |
8905 302 P$P | |
8906 303 P$F | |
8907 304 P$Br | |
8908 305 P$Si | |
8909 306 P$I | |
8910 307 P$X | |
8911 308 F$F | |
8912 309 F$Br | |
8913 310 F$Si | |
8914 311 F$I | |
8915 312 F$X | |
8916 313 Br$Br | |
8917 314 Br$Si | |
8918 315 Br$I | |
8919 316 Br$X | |
8920 317 Si$Si | |
8921 318 Si$I | |
8922 319 Si$X | |
8923 320 I$I | |
8924 321 I$X | |
8925 322 X$X | |
8926 | |
8927 =item B<SetSize> | |
8928 | |
8929 $MACCSKeys->SetSize($Size); | |
8930 | |
8931 Sets size of MACCS keys and returns I<MACCSKeys>. Possible values: I<166 or 322>. | |
8932 | |
8933 =item B<SetType> | |
8934 | |
8935 $MACCSKeys->SetType($Type); | |
8936 | |
8937 Sets type of MACCS keys and returns I<MACCSKeys>. Possible values: I<MACCSKeysBits or | |
8938 MACCSKeysCount>. | |
8939 | |
8940 =item B<StringifyMACCSKeys> | |
8941 | |
8942 $String = $MACCSKeys->StringifyMACCSKeys(); | |
8943 | |
8944 Returns a string containing information about I<MACCSKeys> object. | |
8945 | |
8946 =back | |
8947 | |
8948 =head1 AUTHOR | |
8949 | |
8950 Manish Sud <msud@san.rr.com> | |
8951 | |
8952 =head1 SEE ALSO | |
8953 | |
8954 Fingerprints.pm, FingerprintsStringUtil.pm, AtomNeighborhoodsFingerprints.pm, | |
8955 AtomTypesFingerprints.pm, EStateIndiciesFingerprints.pm, ExtendedConnectivityFingerprints.pm, | |
8956 PathLengthFingerprints.pm, TopologicalAtomPairsFingerprints.pm, TopologicalAtomTripletsFingerprints.pm, | |
8957 TopologicalAtomTorsionsFingerprints.pm, TopologicalPharmacophoreAtomPairsFingerprints.pm, | |
8958 TopologicalPharmacophoreAtomTripletsFingerprints.pm | |
8959 | |
8960 =head1 COPYRIGHT | |
8961 | |
8962 Copyright (C) 2015 Manish Sud. All rights reserved. | |
8963 | |
8964 This file is part of MayaChemTools. | |
8965 | |
8966 MayaChemTools is free software; you can redistribute it and/or modify it under | |
8967 the terms of the GNU Lesser General Public License as published by the Free | |
8968 Software Foundation; either version 3 of the License, or (at your option) | |
8969 any later version. | |
8970 | |
8971 =cut |