/* PUBLIC DOMAIN NOTICE NIH Chemical Genomics Center National Human Genome Research Institute This software/database is a "United States Government Work" under the terms of the United States Copyright Act. It was written as part of the author's official duties as United States Government employee and thus cannot be copyrighted. This software/database is freely available to the public for use. The NIH Chemical Genomics Center (NCGC) and the U.S. Government have not placed any restriction on its use or reproduction. Although all reasonable efforts have been taken to ensure the accuracy and reliability of the software and data, the NCGC and the U.S. Government do not and cannot warrant the performance or results that may be obtained by using this software or data. The NCGC and the U.S. Government disclaim all warranties, express or implied, including warranties of performance, merchantability or fitness for any particular purpose. Please cite the authors in any work or product based on this material. */ // $Id$ package gov.nih.ncgc.descriptor; import java.util.*; import java.io.*; import java.util.zip.*; import chemaxon.struc.*; import chemaxon.formats.*; import chemaxon.sss.search.*; import chemaxon.util.MolHandler; public class PubChemFp { // number of bits in this fingerprint public static int FP_SIZE = 881; static class MolInstrument { private Molecule m_mol; public MolInstrument (Molecule m) { m_mol = m; m_mol.aromatize(Molecule.AROM_BASIC); } public Molecule getMolecule () { return m_mol; } } static class CountElements extends MolInstrument { int []counts = new int[512]; public CountElements (Molecule m) { super (m); MolAtom atoms[] = m.getAtomArray(); for (int i = 0; i < atoms.length; ++i) { ++counts[atoms[i].getAtno()]; } } public int getCount (int atno) { return counts[atno]; } public int getCount (String symb) { return counts[MolAtom.numOf(symb)]; } } static class CountRings extends MolInstrument { int [][]sssr = {}; public CountRings (Molecule m) { super (m); sssr = m.getSSSR(); } public int countAnyRing (int size) { int c = 0; for (int i = 0; i < sssr.length; ++i) { if (sssr[i].length == size) ++c; } return c; } private boolean isCarbonOnlyRing (int[] atoms) { Molecule m = getMolecule (); for (int i = 0; i < atoms.length; ++i) { if (m.getAtom(atoms[i]).getAtno() != 6) return false; } return true; } private boolean isRingSaturated (int[] atoms) { Molecule m = getMolecule (); for (int i = 0; i < atoms.length; ++i) { MolAtom a = m.getAtom(atoms[i]); for (int j = 0; j < a.getBondCount(); ++j) { if (a.getBond(j).getType() != 1) return false; } } return true; } private boolean isRingUnsaturated (int[] atoms) { return !isRingSaturated (atoms); } private int countNitrogenInRing (int[] atoms) { int c = 0; Molecule m = getMolecule (); for (int i = 0; i < atoms.length; ++i) { if (7 == m.getAtom(atoms[i]).getAtno()) ++c; } return c; } private int countHeteroInRing (int[] atoms) { int c = 0; Molecule m = getMolecule (); for (int i = 0; i < atoms.length; ++i) { int atno = m.getAtom(atoms[i]).getAtno(); if (atno != 6 && atno != 1) ++c; } return c; } private boolean isAromaticRing (int[] atoms) { Molecule m = getMolecule (); Map partOfRing = new HashMap(); for (int i = 0; i < atoms.length; ++i) { partOfRing.put(m.getAtom(atoms[i]), true); } Vector bondsInRing = new Vector(); for (int i = 0; i < atoms.length; ++i) { MolAtom a = m.getAtom(atoms[i]); for (int j = 0; j < a.getBondCount(); ++j) { MolBond b = a.getBond(j); if (partOfRing.containsKey(b.getAtom1()) && partOfRing.containsKey(b.getAtom2())) { bondsInRing.add(b); } } } for (MolBond b : bondsInRing) { switch (b.getType()) { case MolBond.AROMATIC: case MolBond.SINGLE_OR_AROMATIC: case MolBond.DOUBLE_OR_AROMATIC: break; default: return false; } } return true; } public int countAromaticRing () { int c = 0; for (int i = 0; i < sssr.length; ++i) { int[] ring = sssr[i]; if (isAromaticRing (ring)) ++c; } return c; } public int countHeteroAromaticRing () { int c = 0; for (int i = 0; i < sssr.length; ++i) { int[] ring = sssr[i]; if (!isCarbonOnlyRing (ring) && isAromaticRing (ring)) ++c; } return c; } public int countSaturatedOrAromaticCarbonOnlyRing (int size) { int c = 0; for (int i = 0; i < sssr.length; ++i) { int []ring = sssr[i]; if (ring.length == size && isCarbonOnlyRing (ring) && (isRingSaturated (ring) || isAromaticRing (ring))) ++c; } return c; } public int countSaturatedOrAromaticNitrogenContainingRing (int size) { int c = 0; for (int i = 0; i < sssr.length; ++i) { int ring[] = sssr[i]; if (ring.length == size && (isRingSaturated (ring) || isAromaticRing (ring)) && countNitrogenInRing (ring) > 0) ++c; } return c; } public int countSaturatedOrAromaticHeteroContainingRing (int size) { int c = 0; for (int i = 0; i < sssr.length; ++i) { int[] ring = sssr[i]; if (ring.length == size && (isRingSaturated (ring) || isAromaticRing (ring)) && countHeteroInRing (ring) > 0) ++c; } return c; } public int countUnsaturatedCarbonOnlyRing (int size) { int c = 0; for (int i = 0; i < sssr.length; ++i) { int ring[] = sssr[i]; if (ring.length == size && isRingUnsaturated (ring) && !isAromaticRing (ring) && isCarbonOnlyRing (ring)) ++c; } return c; } public int countUnsaturatedNitrogenContainingRing (int size) { int c = 0; for (int i = 0; i < sssr.length; ++i) { int ring[] = sssr[i]; if (ring.length == size && isRingUnsaturated (ring) && !isAromaticRing (ring) && countNitrogenInRing (ring) > 0) ++c; } return c; } public int countUnsaturatedHeteroContainingRing (int size) { int c = 0; for (int i = 0; i < sssr.length; ++i) { int[] ring = sssr[i]; if (ring.length == size && isRingUnsaturated (ring) && !isAromaticRing (ring) && countHeteroInRing (ring) > 0) ++c; } return c; } } static class CountSubstructures extends MolInstrument { MolSearch search; MolHandler mh; public CountSubstructures (Molecule m) { super (m); search = new MolSearch (); search.setOption(MolSearch.OPTION_CHARGE_MATCHING, 0); search.setTarget(getMolecule ()); mh = new MolHandler (); } public int countSubstructure (String smarts) { int c = 0; try { mh.setMolecule(smarts); Molecule query = mh.getMolecule(); //query.aromatize(Molecule.AROM_GENERAL); search.setQuery(query); int[][] hits = search.findAll(); if (hits != null) c = hits.length; } catch (Exception ex) { ex.printStackTrace(); } return c; } } static private void _generateFp (byte[] fp, Molecule mol) { countElements (fp, mol); countRings (fp, mol); countSubstructures (fp, mol); } static private byte[] _generateFp (Molecule mol) { byte fp[] = new byte[(FP_SIZE+7)>>3]; _generateFp (fp, mol); return fp; } private byte[] m_bits; public PubChemFp () { m_bits = new byte[(FP_SIZE+7)>>3]; } private PubChemFp (byte[] bits) { this.m_bits = bits; } public void generateFp (Molecule mol) { for (int i = 0; i < m_bits.length; ++i) { m_bits[i] = 0; } _generateFp(m_bits, mol); } public boolean isBitOn (int bit) { return (m_bits[bit>>3] & MASK[bit%8]) != 0; } public static double tanimotoSimilarity (byte[] a, byte[] b) { assert (a.length == b.length); int Nc = 0, Nb = 0, Na = 0; for (int i = 0; i < a.length; ++i) { Nc += BITCOUNT[a[i] & b[i] & 0xff]; Nb += BITCOUNT[b[i] & 0xff]; Na += BITCOUNT[a[i] & 0xff]; } return (double)Nc/(Na + Nb - Nc); } public static double diceSimilarity (byte[] a, byte[] b) { assert (a.length == b.length); int Nc = 0, Nb = 0, Na = 0; for (int i = 0; i < a.length; ++i) { Nc += BITCOUNT[a[i] & b[i] & 0xff]; Nb += BITCOUNT[b[i] & 0xff]; Na += BITCOUNT[a[i] & 0xff]; } return 2.*Nc/(Na + Nb); } public static double cosineSimilarity (byte[] a, byte[] b) { assert (a.length == b.length); int Nc = 0, Nb = 0, Na = 0; for (int i = 0; i < a.length; ++i) { Nc += BITCOUNT[a[i] & b[i] & 0xff]; Nb += BITCOUNT[b[i] & 0xff]; Na += BITCOUNT[a[i] & 0xff]; } return (double)Nc/Math.sqrt(Na * Nb); } // hamming distance public static double hammingDistance (byte[] a, byte[] b) { assert (a.length == b.length); double dist = 0.; for (int i = 0; i < a.length; ++i) { dist += BITCOUNT[(a[i] ^ b[i]) & 0xff]; } return dist; } public double tanimotoSimilarity (PubChemFp fp) { return tanimotoSimilarity (this.m_bits, fp.m_bits); } public double diceSimilarity (PubChemFp fp) { return diceSimilarity (this.m_bits, fp.m_bits); } public double cosineSimilarity (PubChemFp fp) { return cosineSimilarity (this.m_bits, fp.m_bits); } public double hammingDistance (PubChemFp fp) { return hammingDistance (m_bits, fp.m_bits); } public byte[] getFingerprintInBytes () { return m_bits; } public static PubChemFp decode (String enc) { byte[] fp = base64Decode (enc); if (fp.length < 4) { throw new IllegalArgumentException ("Input is not a proper PubChem base64 encoded fingerprint"); } int len = (fp[0] << 24) | (fp[1] << 16) | (fp[2] << 8) | (fp[3] & 0xff); if (len != FP_SIZE) { throw new IllegalArgumentException ("Input is not a proper PubChem base64 encoded fingerprint"); } PubChemFp pc = new PubChemFp (); for (int i = 0; i < pc.m_bits.length; ++i) { pc.m_bits[i] = fp[i+4]; } return pc; } // the first four bytes contains the length of the fingerprint public String encode () { byte[] pack = new byte[4 + m_bits.length]; pack[0] = (byte)((FP_SIZE & 0xffffffff) >> 24); pack[1] = (byte)((FP_SIZE & 0x00ffffff) >> 16); pack[2] = (byte)((FP_SIZE & 0x0000ffff) >> 8); pack[3] = (byte)(FP_SIZE & 0x000000ff); for (int i = 0; i < m_bits.length; ++i) { pack[i+4] = m_bits[i]; } return base64Encode (pack); } private static String BASE64_LUT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; // based on NCBI C implementation public static String base64Encode (byte[] data) { char c64[] = new char[data.length*4/3+5]; for (int i = 0, k = 0; i < data.length; i += 3, k += 4) { c64[k+0] = (char)(data[i] >> 2); c64[k+1] = (char)((data[i] & 0x03) << 4); c64[k+2] = c64[k+3] = 64; if ((i + i) < data.length) { c64[k+1] |= data[i+1] >> 4; c64[k+2] = (char)((data[i+1] & 0x0f) << 2); } if ((i + 2) < data.length) { c64[k+2] |= data[i+2] >> 6; c64[k+3] = (char)(data[i+2] & 0x3f); } for (int j = 0; j < 4; ++j) { c64[k+j] = BASE64_LUT.charAt(c64[k+j]); } } return new String (c64); } // based on NCBI C implementation public static byte[] base64Decode (String data) { int len = data.length(); byte[] b64 = new byte[len*3/4]; byte[] buf = new byte[4]; boolean done = false; for (int i = 0, j, k = 0; i < len && !done;) { buf[0] = buf[1] = buf[2] = buf[3] = 0; for (j = 0; j < 4 && i < len; ++j) { char c = data.charAt(i); if (c >= 'A' && c <= 'Z') { c -= 'A'; } else if (c >= 'a' && c <= 'z') { c = (char)(c - 'a' + 26); } else if (c >= '0' && c <= '9') { c = (char)(c - '0' + 52); } else if (c == '+') { c = 62; } else if (c == '/') { c = 63; } else if (c == '=' || c == '-') { done = true; break; } else { ++i; --j; continue; } buf[j] = (byte)c; ++i; } if (k < b64.length && j >= 1) { b64[k++] = (byte)((buf[0] << 2) | ((buf[1] & 0x30) >> 4)); } if (k < b64.length && j >= 3) { b64[k++] = (byte)(((buf[1] & 0x0f) << 4) | ((buf[2] & 0x3c) >> 2)); } if (k < b64.length && j >= 4) { b64[k++] = (byte)(((buf[2] & 0x03) << 6)| (buf[3] & 0x3f)); } } return b64; } public static void main (String argv[]) throws Exception { if (argv.length == 0) { System.out.println("PubChemFp FILES..."); System.exit(1); } PubChemFp fp = new PubChemFp (); for (int i = 0; i < argv.length; ++i) { MolImporter importer = null; try { importer = new MolImporter (new GZIPInputStream (new FileInputStream (argv[i]))); } catch (IOException ex) { importer = new MolImporter (argv[i]); } for (Molecule mol; (mol = importer.read()) != null; ) { fp.generateFp(mol); System.out.print(mol.getName()); for (int b = 0; b < FP_SIZE; ++b) { if (fp.isBitOn(b)) { System.out.print(" " + b); } } System.out.println(); String enc = mol.getProperty("PUBCHEM_CACTVS_SUBSKEYS"); if (enc != null) { System.out.println("** PubChem's original bits **"); PubChemFp pcFp = PubChemFp.decode(enc); System.out.print(mol.getName()); for (int b = 0; b < FP_SIZE; ++b) { if (pcFp.isBitOn(b)) { System.out.print(" " + b); } } System.out.println(); System.out.println("Hamming distance = " + fp.hammingDistance(pcFp)); } } } } static final int BITCOUNT[] = { 0,1,1,2,1,2,2,3, 1,2,2,3,2,3,3,4, 1,2,2,3,2,3,3,4, 2,3,3,4,3,4,4,5, 1,2,2,3,2,3,3,4, 2,3,3,4,3,4,4,5, 2,3,3,4,3,4,4,5, 3,4,4,5,4,5,5,6, 1,2,2,3,2,3,3,4, 2,3,3,4,3,4,4,5, 2,3,3,4,3,4,4,5, 3,4,4,5,4,5,5,6, 2,3,3,4,3,4,4,5, 3,4,4,5,4,5,5,6, 3,4,4,5,4,5,5,6, 4,5,5,6,5,6,6,7, 1,2,2,3,2,3,3,4, 2,3,3,4,3,4,4,5, 2,3,3,4,3,4,4,5, 3,4,4,5,4,5,5,6, 2,3,3,4,3,4,4,5, 3,4,4,5,4,5,5,6, 3,4,4,5,4,5,5,6, 4,5,5,6,5,6,6,7, 2,3,3,4,3,4,4,5, 3,4,4,5,4,5,5,6, 3,4,4,5,4,5,5,6, 4,5,5,6,5,6,6,7, 3,4,4,5,4,5,5,6, 4,5,5,6,5,6,6,7, 4,5,5,6,5,6,6,7, 5,6,6,7,6,7,7,8 }; static final int MASK[] = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 }; /* Section 1: Hierarchic Element Counts - These bs test for the presence or count of individual chemical atoms represented by their atomic symbol. */ private static void countElements (byte []fp, Molecule mol) { int b; CountElements ce = new CountElements (mol); b = 0; if (ce.getCount("H") >= 4 ) fp[b>>3] |= MASK[b%8]; b = 1; if (ce.getCount("H") >= 8) fp[b>>3] |= MASK[b%8]; b = 2; if (ce.getCount("H") >= 16) fp[b>>3] |= MASK[b%8]; b = 3; if (ce.getCount("H") >= 32) fp[b>>3] |= MASK[b%8]; b = 4; if (ce.getCount("Li") >= 1) fp[b>>3] |= MASK[b%8]; b = 5; if (ce.getCount("Li") >= 2) fp[b>>3] |= MASK[b%8]; b = 6; if (ce.getCount("B") >= 1) fp[b>>3] |= MASK[b%8]; b = 7; if (ce.getCount("B") >= 2) fp[b>>3] |= MASK[b%8]; b = 8; if (ce.getCount("B") >= 4) fp[b>>3] |= MASK[b%8]; b = 9; if (ce.getCount("C") >= 2) fp[b>>3] |= MASK[b%8]; b = 10; if (ce.getCount("C") >= 4) fp[b>>3] |= MASK[b%8]; b = 11; if (ce.getCount("C") >= 8) fp[b>>3] |= MASK[b%8]; b = 12; if (ce.getCount("C") >= 16) fp[b>>3] |= MASK[b%8]; b = 13; if (ce.getCount("C") >= 32) fp[b>>3] |= MASK[b%8]; b = 14; if (ce.getCount("N") >= 1) fp[b>>3] |= MASK[b%8]; b = 15; if (ce.getCount("N") >= 2) fp[b>>3] |= MASK[b%8]; b = 16; if (ce.getCount("N") >= 4) fp[b>>3] |= MASK[b%8]; b = 17; if (ce.getCount("N") >= 8) fp[b>>3] |= MASK[b%8]; b = 18; if (ce.getCount("O") >= 1) fp[b>>3] |= MASK[b%8]; b = 19; if (ce.getCount("O") >= 2) fp[b>>3] |= MASK[b%8]; b = 20; if (ce.getCount("O") >= 4) fp[b>>3] |= MASK[b%8]; b = 21; if (ce.getCount("O") >= 8) fp[b>>3] |= MASK[b%8]; b = 22; if (ce.getCount("O") >= 16) fp[b>>3] |= MASK[b%8]; b = 23; if (ce.getCount("F") >= 1) fp[b>>3] |= MASK[b%8]; b = 24; if (ce.getCount("F") >= 2) fp[b>>3] |= MASK[b%8]; b = 25; if (ce.getCount("F") >= 4) fp[b>>3] |= MASK[b%8]; b = 26; if (ce.getCount("Na") >= 1) fp[b>>3] |= MASK[b%8]; b = 27; if (ce.getCount("Na") >= 2) fp[b>>3] |= MASK[b%8]; b = 28; if (ce.getCount("Si") >= 1) fp[b>>3] |= MASK[b%8]; b = 29; if (ce.getCount("Si") >= 2) fp[b>>3] |= MASK[b%8]; b = 30; if (ce.getCount("P") >= 1) fp[b>>3] |= MASK[b%8]; b = 31; if (ce.getCount("P") >= 2) fp[b>>3] |= MASK[b%8]; b = 32; if (ce.getCount("P") >= 4) fp[b>>3] |= MASK[b%8]; b = 33; if (ce.getCount("S") >= 1) fp[b>>3] |= MASK[b%8]; b = 34; if (ce.getCount("S") >= 2) fp[b>>3] |= MASK[b%8]; b = 35; if (ce.getCount("S") >= 4) fp[b>>3] |= MASK[b%8]; b = 36; if (ce.getCount("S") >= 8) fp[b>>3] |= MASK[b%8]; b = 37; if (ce.getCount("Cl") >= 1) fp[b>>3] |= MASK[b%8]; b = 38; if (ce.getCount("Cl") >= 2) fp[b>>3] |= MASK[b%8]; b = 39; if (ce.getCount("Cl") >= 4) fp[b>>3] |= MASK[b%8]; b = 40; if (ce.getCount("Cl") >= 8) fp[b>>3] |= MASK[b%8]; b = 41; if (ce.getCount("K") >= 1) fp[b>>3] |= MASK[b%8]; b = 42; if (ce.getCount("K") >= 2) fp[b>>3] |= MASK[b%8]; b = 43; if (ce.getCount("Br") >= 1) fp[b>>3] |= MASK[b%8]; b = 44; if (ce.getCount("Br") >= 2) fp[b>>3] |= MASK[b%8]; b = 45; if (ce.getCount("Br") >= 4) fp[b>>3] |= MASK[b%8]; b = 46; if (ce.getCount("I") >= 1) fp[b>>3] |= MASK[b%8]; b = 47; if (ce.getCount("I") >= 2) fp[b>>3] |= MASK[b%8]; b = 48; if (ce.getCount("I") >= 4) fp[b>>3] |= MASK[b%8]; b = 49; if (ce.getCount("Be") >= 1) fp[b>>3] |= MASK[b%8]; b = 50; if (ce.getCount("Mg") >= 1) fp[b>>3] |= MASK[b%8]; b = 51; if (ce.getCount("Al") >= 1) fp[b>>3] |= MASK[b%8]; b = 52; if (ce.getCount("Ca") >= 1) fp[b>>3] |= MASK[b%8]; b = 53; if (ce.getCount("Sc") >= 1) fp[b>>3] |= MASK[b%8]; b = 54; if (ce.getCount("Ti") >= 1) fp[b>>3] |= MASK[b%8]; b = 55; if (ce.getCount("V") >= 1) fp[b>>3] |= MASK[b%8]; b = 56; if (ce.getCount("Cr") >= 1) fp[b>>3] |= MASK[b%8]; b = 57; if (ce.getCount("Mn") >= 1) fp[b>>3] |= MASK[b%8]; b = 58; if (ce.getCount("Fe") >= 1) fp[b>>3] |= MASK[b%8]; b = 59; if (ce.getCount("Co") >= 1) fp[b>>3] |= MASK[b%8]; b = 60; if (ce.getCount("Ni") >= 1) fp[b>>3] |= MASK[b%8]; b = 61; if (ce.getCount("Cu") >= 1) fp[b>>3] |= MASK[b%8]; b = 62; if (ce.getCount("Zn") >= 1) fp[b>>3] |= MASK[b%8]; b = 63; if (ce.getCount("Ga") >= 1) fp[b>>3] |= MASK[b%8]; b = 64; if (ce.getCount("Ge") >= 1) fp[b>>3] |= MASK[b%8]; b = 65; if (ce.getCount("As") >= 1) fp[b>>3] |= MASK[b%8]; b = 66; if (ce.getCount("Se") >= 1) fp[b>>3] |= MASK[b%8]; b = 67; if (ce.getCount("Kr") >= 1) fp[b>>3] |= MASK[b%8]; b = 68; if (ce.getCount("Rb") >= 1) fp[b>>3] |= MASK[b%8]; b = 69; if (ce.getCount("Sr") >= 1) fp[b>>3] |= MASK[b%8]; b = 70; if (ce.getCount("Y") >= 1) fp[b>>3] |= MASK[b%8]; b = 71; if (ce.getCount("Zr") >= 1) fp[b>>3] |= MASK[b%8]; b = 72; if (ce.getCount("Nb") >= 1) fp[b>>3] |= MASK[b%8]; b = 73; if (ce.getCount("Mo") >= 1) fp[b>>3] |= MASK[b%8]; b = 74; if (ce.getCount("Ru") >= 1) fp[b>>3] |= MASK[b%8]; b = 75; if (ce.getCount("Rh") >= 1) fp[b>>3] |= MASK[b%8]; b = 76; if (ce.getCount("Pd") >= 1) fp[b>>3] |= MASK[b%8]; b = 77; if (ce.getCount("Ag") >= 1) fp[b>>3] |= MASK[b%8]; b = 78; if (ce.getCount("Cd") >= 1) fp[b>>3] |= MASK[b%8]; b = 79; if (ce.getCount("In") >= 1) fp[b>>3] |= MASK[b%8]; b = 80; if (ce.getCount("Sn") >= 1) fp[b>>3] |= MASK[b%8]; b = 81; if (ce.getCount("Sb") >= 1) fp[b>>3] |= MASK[b%8]; b = 82; if (ce.getCount("Te") >= 1) fp[b>>3] |= MASK[b%8]; b = 83; if (ce.getCount("Xe") >= 1) fp[b>>3] |= MASK[b%8]; b = 84; if (ce.getCount("Cs") >= 1) fp[b>>3] |= MASK[b%8]; b = 85; if (ce.getCount("Ba") >= 1) fp[b>>3] |= MASK[b%8]; b = 86; if (ce.getCount("Lu") >= 1) fp[b>>3] |= MASK[b%8]; b = 87; if (ce.getCount("Hf") >= 1) fp[b>>3] |= MASK[b%8]; b = 88; if (ce.getCount("Ta") >= 1) fp[b>>3] |= MASK[b%8]; b = 89; if (ce.getCount("W") >= 1) fp[b>>3] |= MASK[b%8]; b = 90; if (ce.getCount("Re") >= 1) fp[b>>3] |= MASK[b%8]; b = 91; if (ce.getCount("Os") >= 1) fp[b>>3] |= MASK[b%8]; b = 92; if (ce.getCount("Ir") >= 1) fp[b>>3] |= MASK[b%8]; b = 93; if (ce.getCount("Pt") >= 1) fp[b>>3] |= MASK[b%8]; b = 94; if (ce.getCount("Au") >= 1) fp[b>>3] |= MASK[b%8]; b = 95; if (ce.getCount("Hg") >= 1) fp[b>>3] |= MASK[b%8]; b = 96; if (ce.getCount("Tl") >= 1) fp[b>>3] |= MASK[b%8]; b = 97; if (ce.getCount("Pb") >= 1) fp[b>>3] |= MASK[b%8]; b = 98; if (ce.getCount("Bi") >= 1) fp[b>>3] |= MASK[b%8]; b = 99; if (ce.getCount("La") >= 1) fp[b>>3] |= MASK[b%8]; b = 100; if (ce.getCount("Ce") >= 1) fp[b>>3] |= MASK[b%8]; b = 101; if (ce.getCount("Pr") >= 1) fp[b>>3] |= MASK[b%8]; b = 102; if (ce.getCount("Nd") >= 1) fp[b>>3] |= MASK[b%8]; b = 103; if (ce.getCount("Pm") >= 1) fp[b>>3] |= MASK[b%8]; b = 104; if (ce.getCount("Sm") >= 1) fp[b>>3] |= MASK[b%8]; b = 105; if (ce.getCount("Eu") >= 1) fp[b>>3] |= MASK[b%8]; b = 106; if (ce.getCount("Gd") >= 1) fp[b>>3] |= MASK[b%8]; b = 107; if (ce.getCount("Tb") >= 1) fp[b>>3] |= MASK[b%8]; b = 108; if (ce.getCount("Dy") >= 1) fp[b>>3] |= MASK[b%8]; b = 109; if (ce.getCount("Ho") >= 1) fp[b>>3] |= MASK[b%8]; b = 110; if (ce.getCount("Er") >= 1) fp[b>>3] |= MASK[b%8]; b = 111; if (ce.getCount("Tm") >= 1) fp[b>>3] |= MASK[b%8]; b = 112; if (ce.getCount("Yb") >= 1) fp[b>>3] |= MASK[b%8]; b = 113; if (ce.getCount("Tc") >= 1) fp[b>>3] |= MASK[b%8]; b = 114; if (ce.getCount("U") >= 1) fp[b>>3] |= MASK[b%8]; } /* Section 2: Rings in a canonic ESSR ring set-These bs test for the presence or count of the described chemical ring system. An ESSR ring is any ring which does not share three consecutive atoms with any other ring in the chemical structure. For example, naphthalene has three ESSR rings (two phenyl fragments and the 10-membered envelope), while biphenyl will yield a count of only two ESSR rings. */ private static void countRings (byte[] fp, Molecule mol) { CountRings cr = new CountRings (mol); int b; b = 115; if (cr.countAnyRing(3) >= 1) fp[b>>3] |= MASK[b%8]; b = 116; if (cr.countSaturatedOrAromaticCarbonOnlyRing(3) >= 1) fp[b>>3] |= MASK[b%8]; b = 117; if (cr.countSaturatedOrAromaticNitrogenContainingRing(3) >= 1) fp[b>>3] |= MASK[b%8]; b = 118; if (cr.countSaturatedOrAromaticHeteroContainingRing(3) >= 1) fp[b>>3] |= MASK[b%8]; b = 119; if (cr.countUnsaturatedCarbonOnlyRing(3) >= 1) fp[b>>3] |= MASK[b%8]; b = 120; if (cr.countUnsaturatedNitrogenContainingRing(3) >= 1) fp[b>>3] |= MASK[b%8]; b = 121; if (cr.countUnsaturatedHeteroContainingRing(3) >= 1) fp[b>>3] |= MASK[b%8]; b = 122; if (cr.countAnyRing(3) >= 2) fp[b>>3] |= MASK[b%8]; b = 123; if (cr.countSaturatedOrAromaticCarbonOnlyRing(3) >= 2) fp[b>>3] |= MASK[b%8]; b = 124; if (cr.countSaturatedOrAromaticNitrogenContainingRing(3) >= 2) fp[b>>3] |= MASK[b%8]; b = 125; if (cr.countSaturatedOrAromaticHeteroContainingRing(3) >= 2) fp[b>>3] |= MASK[b%8]; b = 126; if (cr.countUnsaturatedCarbonOnlyRing(3) >= 2) fp[b>>3] |= MASK[b%8]; b = 127; if (cr.countUnsaturatedNitrogenContainingRing(3) >= 2) fp[b>>3] |= MASK[b%8]; b = 128; if (cr.countUnsaturatedHeteroContainingRing(3) >= 2) fp[b>>3] |= MASK[b%8]; b = 129; if (cr.countAnyRing(4) >= 1) fp[b>>3] |= MASK[b%8]; b = 130; if (cr.countSaturatedOrAromaticCarbonOnlyRing(4) >= 1) fp[b>>3] |= MASK[b%8]; b = 131; if (cr.countSaturatedOrAromaticNitrogenContainingRing(4) >= 1) fp[b>>3] |= MASK[b%8]; b = 132; if (cr.countSaturatedOrAromaticHeteroContainingRing(4) >= 1) fp[b>>3] |= MASK[b%8]; b = 133; if (cr.countUnsaturatedCarbonOnlyRing(4) >= 1) fp[b>>3] |= MASK[b%8]; b = 134; if (cr.countUnsaturatedNitrogenContainingRing(4) >= 1) fp[b>>3] |= MASK[b%8]; b = 135; if (cr.countUnsaturatedHeteroContainingRing(4) >= 1) fp[b>>3] |= MASK[b%8]; b = 136; if (cr.countAnyRing(4) >= 2) fp[b>>3] |= MASK[b%8]; b = 137; if (cr.countSaturatedOrAromaticCarbonOnlyRing(4) >= 2) fp[b>>3] |= MASK[b%8]; b = 138; if (cr.countSaturatedOrAromaticNitrogenContainingRing(4) >= 2) fp[b>>3] |= MASK[b%8]; b = 139; if (cr.countSaturatedOrAromaticHeteroContainingRing(4) >= 2) fp[b>>3] |= MASK[b%8]; b = 140; if (cr.countUnsaturatedCarbonOnlyRing(4) >= 2) fp[b>>3] |= MASK[b%8]; b = 141; if (cr.countUnsaturatedNitrogenContainingRing(4) >= 2) fp[b>>3] |= MASK[b%8]; b = 142; if (cr.countUnsaturatedHeteroContainingRing(4) >= 2) fp[b>>3] |= MASK[b%8]; b = 143; if (cr.countAnyRing(5) >= 1) fp[b>>3] |= MASK[b%8]; b = 144; if (cr.countSaturatedOrAromaticCarbonOnlyRing(5) >= 1) fp[b>>3] |= MASK[b%8]; b = 145; if (cr.countSaturatedOrAromaticNitrogenContainingRing(5) >= 1) fp[b>>3] |= MASK[b%8]; b = 146; if (cr.countSaturatedOrAromaticHeteroContainingRing(5) >= 1) fp[b>>3] |= MASK[b%8]; b = 147; if (cr.countUnsaturatedCarbonOnlyRing(5) >= 1) fp[b>>3] |= MASK[b%8]; b = 148; if (cr.countUnsaturatedNitrogenContainingRing(5) >= 1) fp[b>>3] |= MASK[b%8]; b = 149; if (cr.countUnsaturatedHeteroContainingRing(5) >= 1) fp[b>>3] |= MASK[b%8]; b = 150; if (cr.countAnyRing(5) >= 2) fp[b>>3] |= MASK[b%8]; b = 151; if (cr.countSaturatedOrAromaticCarbonOnlyRing(5) >= 2) fp[b>>3] |= MASK[b%8]; b = 152; if (cr.countSaturatedOrAromaticNitrogenContainingRing(5) >= 2) fp[b>>3] |= MASK[b%8]; b = 153; if (cr.countSaturatedOrAromaticHeteroContainingRing(5) >= 2) fp[b>>3] |= MASK[b%8]; b = 154; if (cr.countUnsaturatedCarbonOnlyRing(5) >= 2) fp[b>>3] |= MASK[b%8]; b = 155; if (cr.countUnsaturatedNitrogenContainingRing(5) >= 2) fp[b>>3] |= MASK[b%8]; b = 156; if (cr.countUnsaturatedHeteroContainingRing(5) >= 2) fp[b>>3] |= MASK[b%8]; b = 157; if (cr.countAnyRing(5) >= 3) fp[b>>3] |= MASK[b%8]; b = 158; if (cr.countSaturatedOrAromaticCarbonOnlyRing(5) >= 3) fp[b>>3] |= MASK[b%8]; b = 159; if (cr.countSaturatedOrAromaticNitrogenContainingRing(5) >= 3) fp[b>>3] |= MASK[b%8]; b = 160; if (cr.countSaturatedOrAromaticHeteroContainingRing(5) >= 3) fp[b>>3] |= MASK[b%8]; b = 161; if (cr.countUnsaturatedCarbonOnlyRing(5) >= 3) fp[b>>3] |= MASK[b%8]; b = 162; if (cr.countUnsaturatedNitrogenContainingRing(5) >= 3) fp[b>>3] |= MASK[b%8]; b = 163; if (cr.countUnsaturatedHeteroContainingRing(5) >= 3) fp[b>>3] |= MASK[b%8]; b = 164; if (cr.countAnyRing(5) >= 4) fp[b>>3] |= MASK[b%8]; b = 165; if (cr.countSaturatedOrAromaticCarbonOnlyRing(5) >= 4) fp[b>>3] |= MASK[b%8]; b = 166; if (cr.countSaturatedOrAromaticNitrogenContainingRing(5) >= 4) fp[b>>3] |= MASK[b%8]; b = 167; if (cr.countSaturatedOrAromaticHeteroContainingRing(5) >= 4) fp[b>>3] |= MASK[b%8]; b = 168; if (cr.countUnsaturatedCarbonOnlyRing(5) >= 4) fp[b>>3] |= MASK[b%8]; b = 169; if (cr.countUnsaturatedNitrogenContainingRing(5) >= 4) fp[b>>3] |= MASK[b%8]; b = 170; if (cr.countUnsaturatedHeteroContainingRing(5) >= 4) fp[b>>3] |= MASK[b%8]; b = 171; if (cr.countAnyRing(5) >= 5) fp[b>>3] |= MASK[b%8]; b = 172; if (cr.countSaturatedOrAromaticCarbonOnlyRing(5) >= 5) fp[b>>3] |= MASK[b%8]; b = 173; if (cr.countSaturatedOrAromaticNitrogenContainingRing(5) >= 5) fp[b>>3] |= MASK[b%8]; b = 174; if (cr.countSaturatedOrAromaticHeteroContainingRing(5) >= 5) fp[b>>3] |= MASK[b%8]; b = 175; if (cr.countUnsaturatedCarbonOnlyRing(5) >= 5) fp[b>>3] |= MASK[b%8]; b = 176; if (cr.countUnsaturatedNitrogenContainingRing(5) >= 5) fp[b>>3] |= MASK[b%8]; b = 177; if (cr.countUnsaturatedHeteroContainingRing(5) >= 5) fp[b>>3] |= MASK[b%8]; b = 178; if (cr.countAnyRing(6) >= 1) fp[b>>3] |= MASK[b%8]; b = 179; if (cr.countSaturatedOrAromaticCarbonOnlyRing(6) >= 1) fp[b>>3] |= MASK[b%8]; b = 180; if (cr.countSaturatedOrAromaticNitrogenContainingRing(6) >= 1) fp[b>>3] |= MASK[b%8]; b = 181; if (cr.countSaturatedOrAromaticHeteroContainingRing(6) >= 1) fp[b>>3] |= MASK[b%8]; b = 182; if (cr.countUnsaturatedCarbonOnlyRing(6) >= 1) fp[b>>3] |= MASK[b%8]; b = 183; if (cr.countUnsaturatedNitrogenContainingRing(6) >= 1) fp[b>>3] |= MASK[b%8]; b = 184; if (cr.countUnsaturatedHeteroContainingRing(6) >= 1) fp[b>>3] |= MASK[b%8]; b = 185; if (cr.countAnyRing(6) >= 2) fp[b>>3] |= MASK[b%8]; b = 186; if (cr.countSaturatedOrAromaticCarbonOnlyRing(6) >= 2) fp[b>>3] |= MASK[b%8]; b = 187; if (cr.countSaturatedOrAromaticNitrogenContainingRing(6) >= 2) fp[b>>3] |= MASK[b%8]; b = 188; if (cr.countSaturatedOrAromaticHeteroContainingRing(6) >= 2) fp[b>>3] |= MASK[b%8]; b = 189; if (cr.countUnsaturatedCarbonOnlyRing(6) >= 2) fp[b>>3] |= MASK[b%8]; b = 190; if (cr.countUnsaturatedNitrogenContainingRing(6) >= 2) fp[b>>3] |= MASK[b%8]; b = 191; if (cr.countUnsaturatedHeteroContainingRing(6) >= 2) fp[b>>3] |= MASK[b%8]; b = 192; if (cr.countAnyRing(6) >= 3) fp[b>>3] |= MASK[b%8]; b = 193; if (cr.countSaturatedOrAromaticCarbonOnlyRing(6) >= 3) fp[b>>3] |= MASK[b%8]; b = 194; if (cr.countSaturatedOrAromaticNitrogenContainingRing(6) >= 3) fp[b>>3] |= MASK[b%8]; b = 195; if (cr.countSaturatedOrAromaticHeteroContainingRing(6) >= 3) fp[b>>3] |= MASK[b%8]; b = 196; if (cr.countUnsaturatedCarbonOnlyRing(6) >= 3) fp[b>>3] |= MASK[b%8]; b = 197; if (cr.countUnsaturatedNitrogenContainingRing(6) >= 3) fp[b>>3] |= MASK[b%8]; b = 198; if (cr.countUnsaturatedHeteroContainingRing(6) >= 3) fp[b>>3] |= MASK[b%8]; b = 199; if (cr.countAnyRing(6) >= 4) fp[b>>3] |= MASK[b%8]; b = 200; if (cr.countSaturatedOrAromaticCarbonOnlyRing(6) >= 4) fp[b>>3] |= MASK[b%8]; b = 201; if (cr.countSaturatedOrAromaticNitrogenContainingRing(6) >= 4) fp[b>>3] |= MASK[b%8]; b = 202; if (cr.countSaturatedOrAromaticHeteroContainingRing(6) >= 4) fp[b>>3] |= MASK[b%8]; b = 203; if (cr.countUnsaturatedCarbonOnlyRing(6) >= 4) fp[b>>3] |= MASK[b%8]; b = 204; if (cr.countUnsaturatedNitrogenContainingRing(6) >= 4) fp[b>>3] |= MASK[b%8]; b = 205; if (cr.countUnsaturatedHeteroContainingRing(6) >= 4) fp[b>>3] |= MASK[b%8]; b = 206; if (cr.countAnyRing(6) >= 5) fp[b>>3] |= MASK[b%8]; b = 207; if (cr.countSaturatedOrAromaticCarbonOnlyRing(6) >= 5) fp[b>>3] |= MASK[b%8]; b = 208; if (cr.countSaturatedOrAromaticNitrogenContainingRing(6) >= 5) fp[b>>3] |= MASK[b%8]; b = 209; if (cr.countSaturatedOrAromaticHeteroContainingRing(6) >= 5) fp[b>>3] |= MASK[b%8]; b = 210; if (cr.countUnsaturatedCarbonOnlyRing(6) >= 5) fp[b>>3] |= MASK[b%8]; b = 211; if (cr.countUnsaturatedNitrogenContainingRing(6) >= 5) fp[b>>3] |= MASK[b%8]; b = 212; if (cr.countUnsaturatedHeteroContainingRing(6) >= 5) fp[b>>3] |= MASK[b%8]; b = 213; if (cr.countAnyRing(7) >= 1) fp[b>>3] |= MASK[b%8]; b = 214; if (cr.countSaturatedOrAromaticCarbonOnlyRing(7) >= 1) fp[b>>3] |= MASK[b%8]; b = 215; if (cr.countSaturatedOrAromaticNitrogenContainingRing(7) >= 1) fp[b>>3] |= MASK[b%8]; b = 216; if (cr.countSaturatedOrAromaticHeteroContainingRing(7) >= 1) fp[b>>3] |= MASK[b%8]; b = 217; if (cr.countUnsaturatedCarbonOnlyRing(7) >= 1) fp[b>>3] |= MASK[b%8]; b = 218; if (cr.countUnsaturatedNitrogenContainingRing(7) >= 1) fp[b>>3] |= MASK[b%8]; b = 219; if (cr.countUnsaturatedHeteroContainingRing(7) >= 1) fp[b>>3] |= MASK[b%8]; b = 220; if (cr.countAnyRing(7) >= 2) fp[b>>3] |= MASK[b%8]; b = 221; if (cr.countSaturatedOrAromaticCarbonOnlyRing(7) >= 2) fp[b>>3] |= MASK[b%8]; b = 222; if (cr.countSaturatedOrAromaticNitrogenContainingRing(7) >= 2) fp[b>>3] |= MASK[b%8]; b = 223; if (cr.countSaturatedOrAromaticHeteroContainingRing(7) >= 2) fp[b>>3] |= MASK[b%8]; b = 224; if (cr.countUnsaturatedCarbonOnlyRing(7) >= 2) fp[b>>3] |= MASK[b%8]; b = 225; if (cr.countUnsaturatedNitrogenContainingRing(7) >= 2) fp[b>>3] |= MASK[b%8]; b = 226; if (cr.countUnsaturatedHeteroContainingRing(7) >= 2) fp[b>>3] |= MASK[b%8]; b = 227; if (cr.countAnyRing(8) >= 1) fp[b>>3] |= MASK[b%8]; b = 228; if (cr.countSaturatedOrAromaticCarbonOnlyRing(8) >= 1) fp[b>>3] |= MASK[b%8]; b = 229; if (cr.countSaturatedOrAromaticNitrogenContainingRing(8) >= 1) fp[b>>3] |= MASK[b%8]; b = 230; if (cr.countSaturatedOrAromaticHeteroContainingRing(8) >= 1) fp[b>>3] |= MASK[b%8]; b = 231; if (cr.countUnsaturatedCarbonOnlyRing(8) >= 1) fp[b>>3] |= MASK[b%8]; b = 232; if (cr.countUnsaturatedNitrogenContainingRing(8) >= 1) fp[b>>3] |= MASK[b%8]; b = 233; if (cr.countUnsaturatedHeteroContainingRing(8) >= 1) fp[b>>3] |= MASK[b%8]; b = 234; if (cr.countAnyRing(8) >= 2) fp[b>>3] |= MASK[b%8]; b = 235; if (cr.countSaturatedOrAromaticCarbonOnlyRing(8) >= 2) fp[b>>3] |= MASK[b%8]; b = 236; if (cr.countSaturatedOrAromaticNitrogenContainingRing(8) >= 2) fp[b>>3] |= MASK[b%8]; b = 237; if (cr.countSaturatedOrAromaticHeteroContainingRing(8) >= 2) fp[b>>3] |= MASK[b%8]; b = 238; if (cr.countUnsaturatedCarbonOnlyRing(8) >= 2) fp[b>>3] |= MASK[b%8]; b = 239; if (cr.countUnsaturatedNitrogenContainingRing(8) >= 2) fp[b>>3] |= MASK[b%8]; b = 240; if (cr.countUnsaturatedHeteroContainingRing(8) >= 2) fp[b>>3] |= MASK[b%8]; b = 241; if (cr.countAnyRing(9) >= 1) fp[b>>3] |= MASK[b%8]; b = 242; if (cr.countSaturatedOrAromaticCarbonOnlyRing(9) >= 1) fp[b>>3] |= MASK[b%8]; b = 243; if (cr.countSaturatedOrAromaticNitrogenContainingRing(9) >= 1) fp[b>>3] |= MASK[b%8]; b = 244; if (cr.countSaturatedOrAromaticHeteroContainingRing(9) >= 1) fp[b>>3] |= MASK[b%8]; b = 245; if (cr.countUnsaturatedCarbonOnlyRing(9) >= 1) fp[b>>3] |= MASK[b%8]; b = 246; if (cr.countUnsaturatedNitrogenContainingRing(9) >= 1) fp[b>>3] |= MASK[b%8]; b = 247; if (cr.countUnsaturatedHeteroContainingRing(9) >= 1) fp[b>>3] |= MASK[b%8]; b = 248; if (cr.countAnyRing(10) >= 1) fp[b>>3] |= MASK[b%8]; b = 249; if (cr.countSaturatedOrAromaticCarbonOnlyRing(10) >= 1) fp[b>>3] |= MASK[b%8]; b = 250; if (cr.countSaturatedOrAromaticNitrogenContainingRing(10) >= 1) fp[b>>3] |= MASK[b%8]; b = 251; if (cr.countSaturatedOrAromaticHeteroContainingRing(10) >= 1) fp[b>>3] |= MASK[b%8]; b = 252; if (cr.countUnsaturatedCarbonOnlyRing(10) >= 1) fp[b>>3] |= MASK[b%8]; b = 253; if (cr.countUnsaturatedNitrogenContainingRing(10) >= 1) fp[b>>3] |= MASK[b%8]; b = 254; if (cr.countUnsaturatedHeteroContainingRing(10) >= 1) fp[b>>3] |= MASK[b%8]; b = 255; if (cr.countAromaticRing() >= 1) fp[b>>3] |= MASK[b%8]; b = 256; if (cr.countHeteroAromaticRing() >= 1) fp[b>>3] |= MASK[b%8]; b = 257; if (cr.countAromaticRing() >= 2) fp[b>>3] |= MASK[b%8]; b = 258; if (cr.countHeteroAromaticRing() >= 2) fp[b>>3] |= MASK[b%8]; b = 259; if (cr.countAromaticRing() >= 3) fp[b>>3] |= MASK[b%8]; b = 260; if (cr.countHeteroAromaticRing() >= 3) fp[b>>3] |= MASK[b%8]; b = 261; if (cr.countAromaticRing() >= 4) fp[b>>3] |= MASK[b%8]; b = 262; if (cr.countHeteroAromaticRing() >= 4) fp[b>>3] |= MASK[b%8]; } private static void countSubstructures (byte[] fp, Molecule mol) { CountSubstructures cs = new CountSubstructures (mol); int b; /* Section 3: Simple atom pairs. These bits test for the presence of patterns of bonded atom pairs, regardless of bond order or count. */ b = 263; if (cs.countSubstructure("[Li]~[H]") > 0) fp[b>>3] |= MASK[b%8]; b = 264; if (cs.countSubstructure("[Li]~[Li]") > 0) fp[b>>3] |= MASK[b%8]; b = 265; if (cs.countSubstructure("[Li]~[B]") > 0) fp[b>>3] |= MASK[b%8]; b = 266; if (cs.countSubstructure("[Li]~[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 267; if (cs.countSubstructure("[Li]~[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 268; if (cs.countSubstructure("[Li]~[F]") > 0) fp[b>>3] |= MASK[b%8]; b = 269; if (cs.countSubstructure("[Li]~[#15]") > 0) fp[b>>3] |= MASK[b%8]; b = 270; if (cs.countSubstructure("[Li]~[#16]") > 0) fp[b>>3] |= MASK[b%8]; b = 271; if (cs.countSubstructure("[Li]~[Cl]") > 0) fp[b>>3] |= MASK[b%8]; b = 272; if (cs.countSubstructure("[#5]~[H]") > 0) fp[b>>3] |= MASK[b%8]; b = 273; if (cs.countSubstructure("[#5]~[#5]") > 0) fp[b>>3] |= MASK[b%8]; b = 274; if (cs.countSubstructure("[#5]~[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 275; if (cs.countSubstructure("[#5]~[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 276; if (cs.countSubstructure("[#5]~[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 277; if (cs.countSubstructure("[#5]~[F]") > 0) fp[b>>3] |= MASK[b%8]; b = 278; if (cs.countSubstructure("[#5]~[Si]") > 0) fp[b>>3] |= MASK[b%8]; b = 279; if (cs.countSubstructure("[#5]~[#15]") > 0) fp[b>>3] |= MASK[b%8]; b = 280; if (cs.countSubstructure("[#5]~[#16]") > 0) fp[b>>3] |= MASK[b%8]; b = 281; if (cs.countSubstructure("[#5]~[Cl]") > 0) fp[b>>3] |= MASK[b%8]; b = 282; if (cs.countSubstructure("[#5]~[Br]") > 0) fp[b>>3] |= MASK[b%8]; b = 283; if (cs.countSubstructure("[#6]~[H]") > 0) fp[b>>3] |= MASK[b%8]; b = 284; if (cs.countSubstructure("[#6]~[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 285; if (cs.countSubstructure("[#6]~[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 286; if (cs.countSubstructure("[#6]~[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 287; if (cs.countSubstructure("[#6]~[F]") > 0) fp[b>>3] |= MASK[b%8]; b = 288; if (cs.countSubstructure("[#6]~[Na]") > 0) fp[b>>3] |= MASK[b%8]; b = 289; if (cs.countSubstructure("[#6]~[Mg]") > 0) fp[b>>3] |= MASK[b%8]; b = 290; if (cs.countSubstructure("[#6]~[Al]") > 0) fp[b>>3] |= MASK[b%8]; b = 291; if (cs.countSubstructure("[#6]~[Si]") > 0) fp[b>>3] |= MASK[b%8]; b = 292; if (cs.countSubstructure("[#6]~[#15]") > 0) fp[b>>3] |= MASK[b%8]; b = 293; if (cs.countSubstructure("[#6]~[#16]") > 0) fp[b>>3] |= MASK[b%8]; b = 294; if (cs.countSubstructure("[#6]~[Cl]") > 0) fp[b>>3] |= MASK[b%8]; b = 295; if (cs.countSubstructure("[#6]~[As]") > 0) fp[b>>3] |= MASK[b%8]; b = 296; if (cs.countSubstructure("[#6]~[Se]") > 0) fp[b>>3] |= MASK[b%8]; b = 297; if (cs.countSubstructure("[#6]~[Br]") > 0) fp[b>>3] |= MASK[b%8]; b = 298; if (cs.countSubstructure("[#6]~[I]") > 0) fp[b>>3] |= MASK[b%8]; b = 299; if (cs.countSubstructure("[#7]~[H]") > 0) fp[b>>3] |= MASK[b%8]; b = 300; if (cs.countSubstructure("[#7]~[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 301; if (cs.countSubstructure("[#7]~[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 302; if (cs.countSubstructure("[#7]~[F]") > 0) fp[b>>3] |= MASK[b%8]; b = 303; if (cs.countSubstructure("[#7]~[Si]") > 0) fp[b>>3] |= MASK[b%8]; b = 304; if (cs.countSubstructure("[#7]~[#15]") > 0) fp[b>>3] |= MASK[b%8]; b = 305; if (cs.countSubstructure("[#7]~[#16]") > 0) fp[b>>3] |= MASK[b%8]; b = 306; if (cs.countSubstructure("[#7]~[Cl]") > 0) fp[b>>3] |= MASK[b%8]; b = 307; if (cs.countSubstructure("[#7]~[Br]") > 0) fp[b>>3] |= MASK[b%8]; b = 308; if (cs.countSubstructure("[#8]~[H]") > 0) fp[b>>3] |= MASK[b%8]; b = 309; if (cs.countSubstructure("[#8]~[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 310; if (cs.countSubstructure("[#8]~[Mg]") > 0) fp[b>>3] |= MASK[b%8]; b = 311; if (cs.countSubstructure("[#8]~[Na]") > 0) fp[b>>3] |= MASK[b%8]; b = 312; if (cs.countSubstructure("[#8]~[Al]") > 0) fp[b>>3] |= MASK[b%8]; b = 313; if (cs.countSubstructure("[#8]~[Si]") > 0) fp[b>>3] |= MASK[b%8]; b = 314; if (cs.countSubstructure("[#8]~[#15]") > 0) fp[b>>3] |= MASK[b%8]; b = 315; if (cs.countSubstructure("[#8]~[K]") > 0) fp[b>>3] |= MASK[b%8]; b = 316; if (cs.countSubstructure("[F]~[#15]") > 0) fp[b>>3] |= MASK[b%8]; b = 317; if (cs.countSubstructure("[F]~[#16]") > 0) fp[b>>3] |= MASK[b%8]; b = 318; if (cs.countSubstructure("[Al]~[H]") > 0) fp[b>>3] |= MASK[b%8]; b = 319; if (cs.countSubstructure("[Al]~[Cl]") > 0) fp[b>>3] |= MASK[b%8]; b = 320; if (cs.countSubstructure("[Si]~[H]") > 0) fp[b>>3] |= MASK[b%8]; b = 321; if (cs.countSubstructure("[Si]~[Si]") > 0) fp[b>>3] |= MASK[b%8]; b = 322; if (cs.countSubstructure("[Si]~[Cl]") > 0) fp[b>>3] |= MASK[b%8]; b = 323; if (cs.countSubstructure("[#15]~[H]") > 0) fp[b>>3] |= MASK[b%8]; b = 324; if (cs.countSubstructure("[#15]~[#15]") > 0) fp[b>>3] |= MASK[b%8]; b = 325; if (cs.countSubstructure("[As]~[H]") > 0) fp[b>>3] |= MASK[b%8]; b = 326; if (cs.countSubstructure("[As]~[As]") > 0) fp[b>>3] |= MASK[b%8]; /* Section 4: Simple atom nearest neighbors. These bits test for the presence of atom nearest neighbor patterns, regardless of bond order or count, but where bond aromaticity (denoted by "~") is significant. */ b = 327; if (cs.countSubstructure("[#6](~Br)(~[#6])") > 0) fp[b>>3] |= MASK[b%8]; b = 328; if (cs.countSubstructure("[#6](~Br)(~[#6])(~[#6])") > 0) fp[b>>3] |= MASK[b%8]; b = 329; if (cs.countSubstructure("[#6](~[Br])([H])") > 0) fp[b>>3] |= MASK[b%8]; b = 330; if (cs.countSubstructure("[#6](~[Br])(:[c])") > 0) fp[b>>3] |= MASK[b%8]; b = 331; if (cs.countSubstructure("[#6](~[Br])(:[n])") > 0) fp[b>>3] |= MASK[b%8]; b = 332; if (cs.countSubstructure("[#6](~[#6])(~[#6])") > 0) fp[b>>3] |= MASK[b%8]; b = 333; if (cs.countSubstructure("[#6](~[#6])(~[#6])(~[#6])") > 0) fp[b>>3] |= MASK[b%8]; b = 334; if (cs.countSubstructure("[#6](~[#6])(~[#6])(~[#6])(~[#6])") > 0) fp[b>>3] |= MASK[b%8]; b = 335; if (cs.countSubstructure("[#6](~[#6])(~[#6])(~[#6])([H])") > 0) fp[b>>3] |= MASK[b%8]; b = 336; if (cs.countSubstructure("[#6](~[#6])(~[#6])(~[#6])(~[#7])") > 0) fp[b>>3] |= MASK[b%8]; b = 337; if (cs.countSubstructure("[#6](~[#6])(~[#6])(~[#6])(~[#8])") > 0) fp[b>>3] |= MASK[b%8]; b = 338; if (cs.countSubstructure("[#6](~[#6])(~[#6])([H])(~[#7])") > 0) fp[b>>3] |= MASK[b%8]; b = 339; if (cs.countSubstructure("[#6](~[#6])(~[#6])([H])(~[#8])") > 0) fp[b>>3] |= MASK[b%8]; b = 340; if (cs.countSubstructure("[#6](~[#6])(~[#6])(~[#7])") > 0) fp[b>>3] |= MASK[b%8]; b = 341; if (cs.countSubstructure("[#6](~[#6])(~[#6])(~[#8])") > 0) fp[b>>3] |= MASK[b%8]; b = 342; if (cs.countSubstructure("[#6](~[#6])(~[Cl])") > 0) fp[b>>3] |= MASK[b%8]; b = 343; if (cs.countSubstructure("[#6](~[#6])(~[Cl])([H])") > 0) fp[b>>3] |= MASK[b%8]; b = 344; if (cs.countSubstructure("[#6](~[#6])([H])") > 0) fp[b>>3] |= MASK[b%8]; b = 345; if (cs.countSubstructure("[#6](~[#6])([H])(~[#7])") > 0) fp[b>>3] |= MASK[b%8]; b = 346; if (cs.countSubstructure("[#6](~[#6])([H])(~[#8])") > 0) fp[b>>3] |= MASK[b%8]; b = 347; if (cs.countSubstructure("[#6](~[#6])([H])(~[#8])(~[#8])") > 0) fp[b>>3] |= MASK[b%8]; b = 348; if (cs.countSubstructure("[#6](~[#6])([H])(~[#15])") > 0) fp[b>>3] |= MASK[b%8]; b = 349; if (cs.countSubstructure("[#6](~[#6])([H])(~[#16])") > 0) fp[b>>3] |= MASK[b%8]; b = 350; if (cs.countSubstructure("[#6](~[#6])(~[I])") > 0) fp[b>>3] |= MASK[b%8]; b = 351; if (cs.countSubstructure("[#6](~[#6])(~[#7])") > 0) fp[b>>3] |= MASK[b%8]; b = 352; if (cs.countSubstructure("[#6](~[#6])(~[#8])") > 0) fp[b>>3] |= MASK[b%8]; b = 353; if (cs.countSubstructure("[#6](~[#6])(~[#16])") > 0) fp[b>>3] |= MASK[b%8]; b = 354; if (cs.countSubstructure("[#6](~[#6])(~[Si])") > 0) fp[b>>3] |= MASK[b%8]; b = 355; if (cs.countSubstructure("[#6](~[#6])(:c)") > 0) fp[b>>3] |= MASK[b%8]; b = 356; if (cs.countSubstructure("[#6](~[#6])(:c)(:c)") > 0) fp[b>>3] |= MASK[b%8]; b = 357; if (cs.countSubstructure("[#6](~[#6])(:c)(:n)") > 0) fp[b>>3] |= MASK[b%8]; b = 358; if (cs.countSubstructure("[#6](~[#6])(:n)") > 0) fp[b>>3] |= MASK[b%8]; b = 359; if (cs.countSubstructure("[#6](~[#6])(:n)(:n)") > 0) fp[b>>3] |= MASK[b%8]; b = 360; if (cs.countSubstructure("[#6](~[Cl])(~[Cl])") > 0) fp[b>>3] |= MASK[b%8]; b = 361; if (cs.countSubstructure("[#6](~[Cl])([H])") > 0) fp[b>>3] |= MASK[b%8]; b = 362; if (cs.countSubstructure("[#6](~[Cl])(:c)") > 0) fp[b>>3] |= MASK[b%8]; b = 363; if (cs.countSubstructure("[#6](~[F])(~[F])") > 0) fp[b>>3] |= MASK[b%8]; b = 364; if (cs.countSubstructure("[#6](~[F])(:c)") > 0) fp[b>>3] |= MASK[b%8]; b = 365; if (cs.countSubstructure("[#6]([H])(~[#7])") > 0) fp[b>>3] |= MASK[b%8]; b = 366; if (cs.countSubstructure("[#6]([H])(~[#8])") > 0) fp[b>>3] |= MASK[b%8]; b = 367; if (cs.countSubstructure("[#6]([H])(~[#8])(~[#8])") > 0) fp[b>>3] |= MASK[b%8]; b = 368; if (cs.countSubstructure("[#6]([H])(~[#16])") > 0) fp[b>>3] |= MASK[b%8]; b = 369; if (cs.countSubstructure("[#6]([H])(~[Si])") > 0) fp[b>>3] |= MASK[b%8]; b = 370; if (cs.countSubstructure("[#6]([H])(:c)") > 0) fp[b>>3] |= MASK[b%8]; b = 371; if (cs.countSubstructure("[#6]([H])(:c)(:c)") > 0) fp[b>>3] |= MASK[b%8]; b = 372; if (cs.countSubstructure("[#6]([H])(:c)(:n)") > 0) fp[b>>3] |= MASK[b%8]; b = 373; if (cs.countSubstructure("[#6]([H])(:n)") > 0) fp[b>>3] |= MASK[b%8]; b = 374; if (cs.countSubstructure("[#6]([H])([H])([H])") > 0) fp[b>>3] |= MASK[b%8]; b = 375; if (cs.countSubstructure("[#6](~[#7])(~[#7])") > 0) fp[b>>3] |= MASK[b%8]; b = 376; if (cs.countSubstructure("[#6](~[#7])(:c)") > 0) fp[b>>3] |= MASK[b%8]; b = 377; if (cs.countSubstructure("[#6](~[#7])(:c)(:c)") > 0) fp[b>>3] |= MASK[b%8]; b = 378; if (cs.countSubstructure("[#6](~[#7])(:c)(:n)") > 0) fp[b>>3] |= MASK[b%8]; b = 379; if (cs.countSubstructure("[#6](~[#7])(:n)") > 0) fp[b>>3] |= MASK[b%8]; b = 380; if (cs.countSubstructure("[#6](~[#8])(~[#8])") > 0) fp[b>>3] |= MASK[b%8]; b = 381; if (cs.countSubstructure("[#6](~[#8])(:c)") > 0) fp[b>>3] |= MASK[b%8]; b = 382; if (cs.countSubstructure("[#6](~[#8])(:c)(:c)") > 0) fp[b>>3] |= MASK[b%8]; b = 383; if (cs.countSubstructure("[#6](~[#16])(:c)") > 0) fp[b>>3] |= MASK[b%8]; b = 384; if (cs.countSubstructure("[#6](:c)(:c)") > 0) fp[b>>3] |= MASK[b%8]; b = 385; if (cs.countSubstructure("[#6](:c)(:c)(:c)") > 0) fp[b>>3] |= MASK[b%8]; b = 386; if (cs.countSubstructure("[#6](:c)(:c)(:n)") > 0) fp[b>>3] |= MASK[b%8]; b = 387; if (cs.countSubstructure("[#6](:c)(:n)") > 0) fp[b>>3] |= MASK[b%8]; b = 388; if (cs.countSubstructure("[#6](:c)(:n)(:n)") > 0) fp[b>>3] |= MASK[b%8]; b = 389; if (cs.countSubstructure("[#6](:n)(:n)") > 0) fp[b>>3] |= MASK[b%8]; b = 390; if (cs.countSubstructure("[#7](~[#6])(~[#6])") > 0) fp[b>>3] |= MASK[b%8]; b = 391; if (cs.countSubstructure("[#7](~[#6])(~[#6])(~[#6])") > 0) fp[b>>3] |= MASK[b%8]; b = 392; if (cs.countSubstructure("[#7](~[#6])(~[#6])([H])") > 0) fp[b>>3] |= MASK[b%8]; b = 393; if (cs.countSubstructure("[#7](~[#6])([H])") > 0) fp[b>>3] |= MASK[b%8]; b = 394; if (cs.countSubstructure("[#7](~[#6])([H])(~[#7])") > 0) fp[b>>3] |= MASK[b%8]; b = 395; if (cs.countSubstructure("[#7](~[#6])(~[#8])") > 0) fp[b>>3] |= MASK[b%8]; b = 396; if (cs.countSubstructure("[#7](~[#6])(:c)") > 0) fp[b>>3] |= MASK[b%8]; b = 397; if (cs.countSubstructure("[#7](~[#6])(:c)(:c)") > 0) fp[b>>3] |= MASK[b%8]; b = 398; if (cs.countSubstructure("[#7]([H])(~[#7])") > 0) fp[b>>3] |= MASK[b%8]; b = 399; if (cs.countSubstructure("[#7]([H])(:c)") > 0) fp[b>>3] |= MASK[b%8]; b = 400; if (cs.countSubstructure("[#7]([H])(:c)(:c)") > 0) fp[b>>3] |= MASK[b%8]; b = 401; if (cs.countSubstructure("[#7](~[#8])(~[#8])") > 0) fp[b>>3] |= MASK[b%8]; b = 402; if (cs.countSubstructure("[#7](~[#8])(:o)") > 0) fp[b>>3] |= MASK[b%8]; b = 403; if (cs.countSubstructure("[#7](:c)(:c)") > 0) fp[b>>3] |= MASK[b%8]; b = 404; if (cs.countSubstructure("[#7](:c)(:c)(:c)") > 0) fp[b>>3] |= MASK[b%8]; b = 405; if (cs.countSubstructure("[#8](~[#6])(~[#6])") > 0) fp[b>>3] |= MASK[b%8]; b = 406; if (cs.countSubstructure("[#8](~[#6])([H])") > 0) fp[b>>3] |= MASK[b%8]; b = 407; if (cs.countSubstructure("[#8](~[#6])(~[#15])") > 0) fp[b>>3] |= MASK[b%8]; b = 408; if (cs.countSubstructure("[#8]([H])(~[#16])") > 0) fp[b>>3] |= MASK[b%8]; b = 409; if (cs.countSubstructure("[#8](:c)(:c)") > 0) fp[b>>3] |= MASK[b%8]; b = 410; if (cs.countSubstructure("[#15](~[#6])(~[#6])") > 0) fp[b>>3] |= MASK[b%8]; b = 411; if (cs.countSubstructure("[#15](~[#8])(~[#8])") > 0) fp[b>>3] |= MASK[b%8]; b = 412; if (cs.countSubstructure("[#16](~[#6])(~[#6])") > 0) fp[b>>3] |= MASK[b%8]; b = 413; if (cs.countSubstructure("[#16](~[#6])([H])") > 0) fp[b>>3] |= MASK[b%8]; b = 414; if (cs.countSubstructure("[#16](~[#6])(~[#8])") > 0) fp[b>>3] |= MASK[b%8]; b = 415; if (cs.countSubstructure("[Si](~[#6])(~[#6])") > 0) fp[b>>3] |= MASK[b%8]; /* Section 5: Detailed atom neighborhoods - These bits test for the presence of detailed atom neighborhood patterns, regardless of count, but where bond orders are specific, bond aromaticity matches both single and double bonds, and where "-", "=", and "#" matches a single bond, double bond, and triple bond order, respectively. */ b = 416; if (cs.countSubstructure("[#6]=,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 417; if (cs.countSubstructure("[#6]#[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 418; if (cs.countSubstructure("[#6]=,:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 419; if (cs.countSubstructure("[#6]#[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 420; if (cs.countSubstructure("[#6]=,:[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 421; if (cs.countSubstructure("[#6]=,:[#16]") > 0) fp[b>>3] |= MASK[b%8]; b = 422; if (cs.countSubstructure("[#7]=,:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 423; if (cs.countSubstructure("[#7]=,:[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 424; if (cs.countSubstructure("[#7]=,:[#15]") > 0) fp[b>>3] |= MASK[b%8]; b = 425; if (cs.countSubstructure("[#15]=,:[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 426; if (cs.countSubstructure("[#15]=,:[#15]") > 0) fp[b>>3] |= MASK[b%8]; b = 427; if (cs.countSubstructure("[#6](#[#6])(-,:[#6])") > 0) fp[b>>3] |= MASK[b%8]; b = 428; if (cs.countSubstructure("[#6](#[#6])([H])") > 0) fp[b>>3] |= MASK[b%8]; b = 429; if (cs.countSubstructure("[#6](#[#7])(-,:[#6])") > 0) fp[b>>3] |= MASK[b%8]; b = 430; if (cs.countSubstructure("[#6](-,:[#6])(-,:[#6])(=,:[#6])") > 0) fp[b>>3] |= MASK[b%8]; b = 431; if (cs.countSubstructure("[#6](-,:[#6])(-,:[#6])(=,:[#7])") > 0) fp[b>>3] |= MASK[b%8]; b = 432; if (cs.countSubstructure("[#6](-,:[#6])(-,:[#6])(=,:[#8])") > 0) fp[b>>3] |= MASK[b%8]; b = 433; if (cs.countSubstructure("[#6](-,:[#6])([Cl])(=,:[#8])") > 0) fp[b>>3] |= MASK[b%8]; b = 434; if (cs.countSubstructure("[#6](-,:[#6])([H])(=,:[#6])") > 0) fp[b>>3] |= MASK[b%8]; b = 435; if (cs.countSubstructure("[#6](-,:[#6])([H])(=,:[#7])") > 0) fp[b>>3] |= MASK[b%8]; b = 436; if (cs.countSubstructure("[#6](-,:[#6])([H])(=,:[#8])") > 0) fp[b>>3] |= MASK[b%8]; b = 437; if (cs.countSubstructure("[#6](-,:[#6])(-,:[#7])(=,:[#6])") > 0) fp[b>>3] |= MASK[b%8]; b = 438; if (cs.countSubstructure("[#6](-,:[#6])(-,:[#7])(=,:[#7])") > 0) fp[b>>3] |= MASK[b%8]; b = 439; if (cs.countSubstructure("[#6](-,:[#6])(-,:[#7])(=,:[#8])") > 0) fp[b>>3] |= MASK[b%8]; b = 440; if (cs.countSubstructure("[#6](-,:[#6])(-,:[#8])(=,:[#8])") > 0) fp[b>>3] |= MASK[b%8]; b = 441; if (cs.countSubstructure("[#6](-,:[#6])(=,:[#6])") > 0) fp[b>>3] |= MASK[b%8]; b = 442; if (cs.countSubstructure("[#6](-,:[#6])(=,:[#7])") > 0) fp[b>>3] |= MASK[b%8]; b = 443; if (cs.countSubstructure("[#6](-,:[#6])(=,:[#8])") > 0) fp[b>>3] |= MASK[b%8]; b = 444; if (cs.countSubstructure("[#6]([Cl])(=,:[#8])") > 0) fp[b>>3] |= MASK[b%8]; b = 445; if (cs.countSubstructure("[#6]([H])(-,:[#7])(=,:[#6])") > 0) fp[b>>3] |= MASK[b%8]; b = 446; if (cs.countSubstructure("[#6]([H])(=,:[#6])") > 0) fp[b>>3] |= MASK[b%8]; b = 447; if (cs.countSubstructure("[#6]([H])(=,:[#7])") > 0) fp[b>>3] |= MASK[b%8]; b = 448; if (cs.countSubstructure("[#6]([H])(=,:[#8])") > 0) fp[b>>3] |= MASK[b%8]; b = 449; if (cs.countSubstructure("[#6](-,:[#7])(=,:[#6])") > 0) fp[b>>3] |= MASK[b%8]; b = 450; if (cs.countSubstructure("[#6](-,:[#7])(=,:[#7])") > 0) fp[b>>3] |= MASK[b%8]; b = 451; if (cs.countSubstructure("[#6](-,:[#7])(=,:[#8])") > 0) fp[b>>3] |= MASK[b%8]; b = 452; if (cs.countSubstructure("[#6](-,:[#8])(=,:[#8])") > 0) fp[b>>3] |= MASK[b%8]; b = 453; if (cs.countSubstructure("[#7](-,:[#6])(=,:[#6])") > 0) fp[b>>3] |= MASK[b%8]; b = 454; if (cs.countSubstructure("[#7](-,:[#6])(=,:[#8])") > 0) fp[b>>3] |= MASK[b%8]; b = 455; if (cs.countSubstructure("[#7](-,:[#8])(=,:[#8])") > 0) fp[b>>3] |= MASK[b%8]; b = 456; if (cs.countSubstructure("[#15](-,:[#8])(=,:[#8])") > 0) fp[b>>3] |= MASK[b%8]; b = 457; if (cs.countSubstructure("[#16](-,:[#6])(=,:[#8])") > 0) fp[b>>3] |= MASK[b%8]; b = 458; if (cs.countSubstructure("[#16](-,:[#8])(=,:[#8])") > 0) fp[b>>3] |= MASK[b%8]; b = 459; if (cs.countSubstructure("[#16](=,:[#8])(=,:[#8])") > 0) fp[b>>3] |= MASK[b%8]; /* Section 6: Simple SMARTS patterns - These bits test for the presence of simple SMARTS patterns, regardless of count, but where bond orders are specific and bond aromaticity matches both single and double bonds. */ b = 460; if (cs.countSubstructure("[#6]-,:[#6]-,:[#6]#[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 461; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]=,:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 462; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]=,:[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 463; if (cs.countSubstructure("[#7]:[#6]-,:[#16]-[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 464; if (cs.countSubstructure("[#7]-,:[#6]-,:[#6]=,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 465; if (cs.countSubstructure("[#8]=,:[#16]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 466; if (cs.countSubstructure("[#7]#[#6]-,:[#6]=,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 467; if (cs.countSubstructure("[#6]=,:[#7]-,:[#7]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 468; if (cs.countSubstructure("[#8]=,:[#16]-,:[#6]-,:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 469; if (cs.countSubstructure("[#16]-,:[#16]-,:[#6]:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 470; if (cs.countSubstructure("[#6]:[#6]-,:[#6]=,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 471; if (cs.countSubstructure("[#16]:[#6]:[#6]:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 472; if (cs.countSubstructure("[#6]:[#7]:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 473; if (cs.countSubstructure("[#16]-,:[#6]:[#7]:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 474; if (cs.countSubstructure("[#16]:[#6]:[#6]:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 475; if (cs.countSubstructure("[#16]-,:[#6]=,:[#7]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 476; if (cs.countSubstructure("[#6]-,:[#8]-,:[#6]=,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 477; if (cs.countSubstructure("[#7]-,:[#7]-,:[#6]:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 478; if (cs.countSubstructure("[#16]-,:[#6]=,:[#7]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 479; if (cs.countSubstructure("[#16]-,:[#6]-,:[#16]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 480; if (cs.countSubstructure("[#6]:[#16]:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 481; if (cs.countSubstructure("[#8]-,:[#16]-,:[#6]:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 482; if (cs.countSubstructure("[#6]:[#7]-,:[#6]:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 483; if (cs.countSubstructure("[#7]-,:[#16]-,:[#6]:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 484; if (cs.countSubstructure("[#7]-,:[#6]:[#7]:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 485; if (cs.countSubstructure("[#7]:[#6]:[#6]:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 486; if (cs.countSubstructure("[#7]-,:[#6]:[#7]:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 487; if (cs.countSubstructure("[#7]-,:[#6]=,:[#7]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 488; if (cs.countSubstructure("[#7]-,:[#6]=,:[#7]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 489; if (cs.countSubstructure("[#7]-,:[#6]-,:[#16]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 490; if (cs.countSubstructure("[#6]-,:[#6]-,:[#6]=,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 491; if (cs.countSubstructure("[#6]-,:[#7]:[#6]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 492; if (cs.countSubstructure("[#7]-,:[#6]:[#8]:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 493; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 494; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 495; if (cs.countSubstructure("[#6]-,:[#7]-,:[#6]:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 496; if (cs.countSubstructure("[#7]:[#7]-,:[#6]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 497; if (cs.countSubstructure("[#8]-,:[#6]:[#6]:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 498; if (cs.countSubstructure("[#8]-,:[#6]=,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 499; if (cs.countSubstructure("[#7]-,:[#6]:[#6]:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 500; if (cs.countSubstructure("[#6]-,:[#16]-,:[#6]:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 501; if (cs.countSubstructure("[Cl]-,:[#6]:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 502; if (cs.countSubstructure("[#7]-,:[#6]=,:[#6]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 503; if (cs.countSubstructure("[Cl]-,:[#6]:[#6]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 504; if (cs.countSubstructure("[#7]:[#6]:[#7]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 505; if (cs.countSubstructure("[Cl]-,:[#6]:[#6]-,:[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 506; if (cs.countSubstructure("[#6]-,:[#6]:[#7]:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 507; if (cs.countSubstructure("[#6]-,:[#6]-,:[#16]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 508; if (cs.countSubstructure("[#16]=,:[#6]-,:[#7]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 509; if (cs.countSubstructure("[Br]-,:[#6]:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 510; if (cs.countSubstructure("[#1]-,:[#7]-,:[#7]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 511; if (cs.countSubstructure("[#16]=,:[#6]-,:[#7]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 512; if (cs.countSubstructure("[#6]-,:[As]-[#8]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 513; if (cs.countSubstructure("[#16]:[#6]:[#6]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 514; if (cs.countSubstructure("[#8]-,:[#7]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 515; if (cs.countSubstructure("[#7]-,:[#7]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 516; if (cs.countSubstructure("[#1]-,:[#6]=,:[#6]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 517; if (cs.countSubstructure("[#7]-,:[#7]-,:[#6]-,:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 518; if (cs.countSubstructure("[#8]=,:[#6]-,:[#7]-,:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 519; if (cs.countSubstructure("[#7]=,:[#6]-,:[#7]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 520; if (cs.countSubstructure("[#6]=,:[#6]-,:[#6]:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 521; if (cs.countSubstructure("[#6]:[#7]-,:[#6]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 522; if (cs.countSubstructure("[#6]-,:[#7]-,:[#7]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 523; if (cs.countSubstructure("[#7]:[#6]:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 524; if (cs.countSubstructure("[#6]-,:[#6]=,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 525; if (cs.countSubstructure("[As]-,:[#6]:[#6]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 526; if (cs.countSubstructure("[Cl]-,:[#6]:[#6]-,:[Cl]") > 0) fp[b>>3] |= MASK[b%8]; b = 527; if (cs.countSubstructure("[#6]:[#6]:[#7]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 528; if (cs.countSubstructure("[#1]-,:[#7]-,:[#6]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 529; if (cs.countSubstructure("[Cl]-,:[#6]-,:[#6]-,:[Cl]") > 0) fp[b>>3] |= MASK[b%8]; b = 530; if (cs.countSubstructure("[#7]:[#6]-,:[#6]:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 531; if (cs.countSubstructure("[#16]-,:[#6]:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 532; if (cs.countSubstructure("[#16]-,:[#6]:[#6]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 533; if (cs.countSubstructure("[#16]-,:[#6]:[#6]-,:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 534; if (cs.countSubstructure("[#16]-,:[#6]:[#6]-,:[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 535; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 536; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]-,:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 537; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]-,:[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 538; if (cs.countSubstructure("[#7]=,:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 539; if (cs.countSubstructure("[#7]=,:[#6]-,:[#6]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 540; if (cs.countSubstructure("[#6]-,:[#7]-,:[#6]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 541; if (cs.countSubstructure("[#8]-,:[#6]:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 542; if (cs.countSubstructure("[#8]-,:[#6]:[#6]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 543; if (cs.countSubstructure("[#8]-,:[#6]:[#6]-,:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 544; if (cs.countSubstructure("[#8]-,:[#6]:[#6]-,:[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 545; if (cs.countSubstructure("[#7]-,:[#6]:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 546; if (cs.countSubstructure("[#7]-,:[#6]:[#6]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 547; if (cs.countSubstructure("[#7]-,:[#6]:[#6]-,:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 548; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 549; if (cs.countSubstructure("[#7]-,:[#6]-,:[#6]:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 550; if (cs.countSubstructure("[Cl]-,:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 551; if (cs.countSubstructure("[Cl]-,:[#6]-,:[#6]-,:[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 552; if (cs.countSubstructure("[#6]:[#6]-,:[#6]:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 553; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]=,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 554; if (cs.countSubstructure("[Br]-,:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 555; if (cs.countSubstructure("[#7]=,:[#6]-,:[#6]=,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 556; if (cs.countSubstructure("[#6]=,:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 557; if (cs.countSubstructure("[#7]:[#6]-,:[#8]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 558; if (cs.countSubstructure("[#8]=,:[#7]-,:c:c") > 0) fp[b>>3] |= MASK[b%8]; b = 559; if (cs.countSubstructure("[#8]-,:[#6]-,:[#7]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 560; if (cs.countSubstructure("[#7]-,:[#6]-,:[#7]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 561; if (cs.countSubstructure("[Cl]-,:[#6]-,:[#6]=,:[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 562; if (cs.countSubstructure("[Br]-,:[#6]-,:[#6]=,:[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 563; if (cs.countSubstructure("[#8]-,:[#6]-,:[#8]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 564; if (cs.countSubstructure("[#6]=,:[#6]-,:[#6]=,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 565; if (cs.countSubstructure("[#6]:[#6]-,:[#8]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 566; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]-,:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 567; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]-,:[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 568; if (cs.countSubstructure("N#[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 569; if (cs.countSubstructure("[#7]-,:[#6]-,:[#6]-,:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 570; if (cs.countSubstructure("[#6]:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 571; if (cs.countSubstructure("[#1]-[#6]-,:[#8]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 572; if (cs.countSubstructure("n:c:n:c") > 0) fp[b>>3] |= MASK[b%8]; b = 573; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]=,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 574; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 575; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]:[#6]-,:[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 576; if (cs.countSubstructure("[#7]=,:[#6]-,:[#6]:[#6]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 577; if (cs.countSubstructure("c:c-,:[#7]-,:c:c") > 0) fp[b>>3] |= MASK[b%8]; b = 578; if (cs.countSubstructure("[#6]-,:[#6]:[#6]-,:c:c") > 0) fp[b>>3] |= MASK[b%8]; b = 579; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 580; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]-,:[#6]-,:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 581; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]-,:[#6]-,:[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 582; if (cs.countSubstructure("[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 583; if (cs.countSubstructure("[Cl]-,:[#6]:[#6]-,:[#8]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 584; if (cs.countSubstructure("c:c-,:[#6]=,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 585; if (cs.countSubstructure("[#6]-,:[#6]:[#6]-,:[#7]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 586; if (cs.countSubstructure("[#6]-,:[#16]-,:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 587; if (cs.countSubstructure("[#7]-,:[#6]:[#6]-,:[#8]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 588; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]-,:[#6]=,:[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 589; if (cs.countSubstructure("[#6]-,:[#6]:[#6]-,:[#8]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 590; if (cs.countSubstructure("[#6]-,:[#6]:[#6]-,:[#8]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 591; if (cs.countSubstructure("[Cl]-,:[#6]-,:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 592; if (cs.countSubstructure("[#7]-,:[#6]-,:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 593; if (cs.countSubstructure("[#7]-,:[#6]-,:[#6]-,:[#6]-,:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 594; if (cs.countSubstructure("[#6]-,:[#8]-,:[#6]-,:[#6]=,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 595; if (cs.countSubstructure("c:c-,:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 596; if (cs.countSubstructure("[#7]=,:[#6]-,:[#7]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 597; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]-,:c:c") > 0) fp[b>>3] |= MASK[b%8]; b = 598; if (cs.countSubstructure("[Cl]-,:[#6]:[#6]:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 599; if (cs.countSubstructure("[#1]-,:[#6]-,:[#6]=,:[#6]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 600; if (cs.countSubstructure("[#7]-,:[#6]:[#6]:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 601; if (cs.countSubstructure("[#7]-,:[#6]:[#6]:[#6]-,:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 602; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]-,:[#7]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 603; if (cs.countSubstructure("[#6]-,:c:c:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 604; if (cs.countSubstructure("[#6]-,:[#8]-,:[#6]-,:[#6]:c") > 0) fp[b>>3] |= MASK[b%8]; b = 605; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]-,:[#8]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 606; if (cs.countSubstructure("[#8]-,:[#6]:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 607; if (cs.countSubstructure("[#7]-,:[#6]-,:[#6]-,:[#6]:c") > 0) fp[b>>3] |= MASK[b%8]; b = 608; if (cs.countSubstructure("[#6]-,:[#6]-,:[#6]-,:[#6]:c") > 0) fp[b>>3] |= MASK[b%8]; b = 609; if (cs.countSubstructure("[Cl]-,:[#6]-,:[#6]-,:[#7]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 610; if (cs.countSubstructure("[#6]-,:[#8]-,:[#6]-,:[#8]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 611; if (cs.countSubstructure("[#7]-,:[#6]-,:[#6]-,:[#7]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 612; if (cs.countSubstructure("[#7]-,:[#6]-,:[#8]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 613; if (cs.countSubstructure("[#6]-,:[#7]-,:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 614; if (cs.countSubstructure("[#6]-,:[#6]-,:[#8]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 615; if (cs.countSubstructure("[#7]-,:[#6]-,:[#6]-,:[#8]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 616; if (cs.countSubstructure("c:c:n:n:c") > 0) fp[b>>3] |= MASK[b%8]; b = 617; if (cs.countSubstructure("[#6]-,:[#6]-,:[#6]-,:[#8]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 618; if (cs.countSubstructure("c:[#6]-,:[#6]-,:[#6]:c") > 0) fp[b>>3] |= MASK[b%8]; b = 619; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]=,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 620; if (cs.countSubstructure("c:c-,:[#8]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 621; if (cs.countSubstructure("[#7]-,:[#6]:c:c:n") > 0) fp[b>>3] |= MASK[b%8]; b = 622; if (cs.countSubstructure("[#8]=,:[#6]-,:[#8]-,:[#6]:c") > 0) fp[b>>3] |= MASK[b%8]; b = 623; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 624; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]:[#6]-,:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 625; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]:[#6]-,:[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 626; if (cs.countSubstructure("[#6]-,:[#8]-,:[#6]:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 627; if (cs.countSubstructure("[#8]=,:[As]-,:[#6]:c:c") > 0) fp[b>>3] |= MASK[b%8]; b = 628; if (cs.countSubstructure("[#6]-,:[#7]-,:[#6]-,:[#6]:c") > 0) fp[b>>3] |= MASK[b%8]; b = 629; if (cs.countSubstructure("[#16]-,:[#6]:c:c-,:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 630; if (cs.countSubstructure("[#8]-,:[#6]:[#6]-,:[#8]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 631; if (cs.countSubstructure("[#8]-,:[#6]:[#6]-,:[#8]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 632; if (cs.countSubstructure("[#6]-,:[#6]-,:[#8]-,:[#6]:c") > 0) fp[b>>3] |= MASK[b%8]; b = 633; if (cs.countSubstructure("[#7]-,:[#6]-,:[#6]:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 634; if (cs.countSubstructure("[#6]-,:[#6]-,:[#6]:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 635; if (cs.countSubstructure("[#7]-,:[#7]-,:[#6]-,:[#7]-[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 636; if (cs.countSubstructure("[#6]-,:[#7]-,:[#6]-,:[#7]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 637; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 638; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]-,:[#6]-,:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 639; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]-,:[#6]-,:[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 640; if (cs.countSubstructure("[#6]=,:[#6]-,:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 641; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]-,:[#6]=,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 642; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]-,:[#6]=,:[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 643; if (cs.countSubstructure("[#1]-[#6]-,:[#6]-,:[#7]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 644; if (cs.countSubstructure("[#6]-,:[#6]=,:[#7]-,:[#7]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 645; if (cs.countSubstructure("[#8]=,:[#6]-,:[#7]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 646; if (cs.countSubstructure("[#8]=,:[#6]-,:[#7]-,:[#6]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 647; if (cs.countSubstructure("[#8]=,:[#6]-,:[#7]-,:[#6]-,:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 648; if (cs.countSubstructure("[#8]=,:[#7]-,:[#6]:[#6]-,:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 649; if (cs.countSubstructure("[#8]=,:[#7]-,:c:c-,:[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 650; if (cs.countSubstructure("[#8]=,:[#6]-,:[#7]-,:[#6]=,:[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 651; if (cs.countSubstructure("[#8]-,:[#6]:[#6]:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 652; if (cs.countSubstructure("[#8]-,:[#6]:[#6]:[#6]-,:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 653; if (cs.countSubstructure("[#8]-,:[#6]:[#6]:[#6]-,:[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 654; if (cs.countSubstructure("[#7]-,:[#6]-,:[#7]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 655; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]-,:[#6]:c") > 0) fp[b>>3] |= MASK[b%8]; b = 656; if (cs.countSubstructure("[#6]-,:[#6]-,:[#7]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 657; if (cs.countSubstructure("[#6]-,:[#7]-,:[#6]:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 658; if (cs.countSubstructure("[#6]-,:[#6]-,:[#16]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 659; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]-,:[#7]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 660; if (cs.countSubstructure("[#6]-,:[#6]=,:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 661; if (cs.countSubstructure("[#8]-,:[#6]-,:[#8]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 662; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]-,:[#8]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 663; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]-,:[#8]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 664; if (cs.countSubstructure("[#6]-,:[#6]=,:[#6]-,:[#6]=,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 665; if (cs.countSubstructure("[#7]-,:[#6]:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 666; if (cs.countSubstructure("[#6]=,:[#6]-,:[#6]-,:[#8]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 667; if (cs.countSubstructure("[#6]=,:[#6]-,:[#6]-,:[#8]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 668; if (cs.countSubstructure("[#6]-,:[#6]:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 669; if (cs.countSubstructure("[Cl]-,:[#6]:[#6]-,:[#6]=,:[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 670; if (cs.countSubstructure("[Br]-,:[#6]:c:c-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 671; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]=,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 672; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]=,:[#6]-,:[#1]") > 0) fp[b>>3] |= MASK[b%8]; b = 673; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]=,:[#6]-,:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 674; if (cs.countSubstructure("[#7]-,:[#6]-,:[#7]-,:[#6]:c") > 0) fp[b>>3] |= MASK[b%8]; b = 675; if (cs.countSubstructure("[Br]-,:[#6]-,:[#6]-,:[#6]:c") > 0) fp[b>>3] |= MASK[b%8]; b = 676; if (cs.countSubstructure("[#7]#[#6]-,:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 677; if (cs.countSubstructure("[#6]-,:[#6]=,:[#6]-,:[#6]:c") > 0) fp[b>>3] |= MASK[b%8]; b = 678; if (cs.countSubstructure("[#6]-,:[#6]-,:[#6]=,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 679; if (cs.countSubstructure("[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 680; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 681; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 682; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 683; if (cs.countSubstructure("[#7]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 684; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 685; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 686; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 687; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]-,:[#6]-,:[#6]=,:[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 688; if (cs.countSubstructure("[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 689; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 690; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 691; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 692; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 693; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 694; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]=,:[#8]") > 0) fp[b>>3] |= MASK[b%8]; b = 695; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#7]") > 0) fp[b>>3] |= MASK[b%8]; b = 696; if (cs.countSubstructure("[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 697; if (cs.countSubstructure("[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6](-,:[#6])-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 698; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 699; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6](-,:[#6])-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 700; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#8]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 701; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6](-,:[#8])-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 702; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#7]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 703; if (cs.countSubstructure("[#8]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6](-,:[#7])-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 704; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 705; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6](-,:[#8])-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 706; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6](=,:[#8])-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 707; if (cs.countSubstructure("[#8]=,:[#6]-,:[#6]-,:[#6]-,:[#6]-,:[#6](-,:[#7])-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 708; if (cs.countSubstructure("[#6]-,:[#6](-,:[#6])-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 709; if (cs.countSubstructure("[#6]-,:[#6](-,:[#6])-,:[#6]-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 710; if (cs.countSubstructure("[#6]-,:[#6]-,:[#6](-,:[#6])-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 711; if (cs.countSubstructure("[#6]-,:[#6](-,:[#6])(-,:[#6])-,:[#6]-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; b = 712; if (cs.countSubstructure("[#6]-,:[#6](-,:[#6])-,:[#6](-,:[#6])-,:[#6]") > 0) fp[b>>3] |= MASK[b%8]; /* Section 7: Complex SMARTS patterns - These bits test for the presence of complex SMARTS patterns, regardless of count, but where bond orders and bond aromaticity are specific. */ b = 713; if (cs.countSubstructure("[#6]c1ccc([#6])cc1") > 0) fp[b>>3] |= MASK[b%8]; b = 714; if (cs.countSubstructure("[#6]c1ccc([#8])cc1") > 0) fp[b>>3] |= MASK[b%8]; b = 715; if (cs.countSubstructure("[#6]c1ccc([#16])cc1") > 0) fp[b>>3] |= MASK[b%8]; b = 716; if (cs.countSubstructure("[#6]c1ccc([#7])cc1") > 0) fp[b>>3] |= MASK[b%8]; b = 717; if (cs.countSubstructure("[#6]c1ccc(Cl)cc1") > 0) fp[b>>3] |= MASK[b%8]; b = 718; if (cs.countSubstructure("[#6]c1ccc(Br)cc1") > 0) fp[b>>3] |= MASK[b%8]; b = 719; if (cs.countSubstructure("[#8]c1ccc([#8])cc1") > 0) fp[b>>3] |= MASK[b%8]; b = 720; if (cs.countSubstructure("[#8]c1ccc([#16])cc1") > 0) fp[b>>3] |= MASK[b%8]; b = 721; if (cs.countSubstructure("[#8]c1ccc([#7])cc1") > 0) fp[b>>3] |= MASK[b%8]; b = 722; if (cs.countSubstructure("[#8]c1ccc(Cl)cc1") > 0) fp[b>>3] |= MASK[b%8]; b = 723; if (cs.countSubstructure("[#8]c1ccc(Br)cc1") > 0) fp[b>>3] |= MASK[b%8]; b = 724; if (cs.countSubstructure("[#16]c1ccc([#16])cc1") > 0) fp[b>>3] |= MASK[b%8]; b = 725; if (cs.countSubstructure("[#16]c1ccc([#7])cc1") > 0) fp[b>>3] |= MASK[b%8]; b = 726; if (cs.countSubstructure("[#16]c1ccc(Cl)cc1") > 0) fp[b>>3] |= MASK[b%8]; b = 727; if (cs.countSubstructure("[#16]c1ccc(Br)cc1") > 0) fp[b>>3] |= MASK[b%8]; b = 728; if (cs.countSubstructure("[#7]c1ccc([#7])cc1") > 0) fp[b>>3] |= MASK[b%8]; b = 729; if (cs.countSubstructure("[#7]c1ccc(Cl)cc1") > 0) fp[b>>3] |= MASK[b%8]; b = 730; if (cs.countSubstructure("[#7]c1ccc(Br)cc1") > 0) fp[b>>3] |= MASK[b%8]; b = 731; if (cs.countSubstructure("Clc1ccc(Cl)cc1") > 0) fp[b>>3] |= MASK[b%8]; b = 732; if (cs.countSubstructure("Clc1ccc(Br)cc1") > 0) fp[b>>3] |= MASK[b%8]; b = 733; if (cs.countSubstructure("Brc1ccc(Br)cc1") > 0) fp[b>>3] |= MASK[b%8]; b = 734; if (cs.countSubstructure("[#6]c1cc([#6])ccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 735; if (cs.countSubstructure("[#6]c1cc([#8])ccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 736; if (cs.countSubstructure("[#6]c1cc([#16])ccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 737; if (cs.countSubstructure("[#6]c1cc([#7])ccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 738; if (cs.countSubstructure("[#6]c1cc(Cl)ccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 739; if (cs.countSubstructure("[#6]c1cc(Br)ccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 740; if (cs.countSubstructure("[#8]c1cc([#8])ccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 741; if (cs.countSubstructure("[#8]c1cc([#16])ccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 742; if (cs.countSubstructure("[#8]c1cc([#7])ccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 743; if (cs.countSubstructure("[#8]c1cc(Cl)ccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 744; if (cs.countSubstructure("[#8]c1cc(Br)ccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 745; if (cs.countSubstructure("[#16]c1cc([#16])ccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 746; if (cs.countSubstructure("[#16]c1cc([#7])ccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 747; if (cs.countSubstructure("[#16]c1cc(Cl)ccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 748; if (cs.countSubstructure("[#16]c1cc(Br)ccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 749; if (cs.countSubstructure("[#7]c1cc([#7])ccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 750; if (cs.countSubstructure("[#7]c1cc(Cl)ccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 751; if (cs.countSubstructure("[#7]c1cc(Br)ccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 752; if (cs.countSubstructure("Clc1cc(Cl)ccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 753; if (cs.countSubstructure("Clc1cc(Br)ccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 754; if (cs.countSubstructure("Brc1cc(Br)ccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 755; if (cs.countSubstructure("[#6]c1c([#6])cccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 756; if (cs.countSubstructure("[#6]c1c([#8])cccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 757; if (cs.countSubstructure("[#6]c1c([#16])cccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 758; if (cs.countSubstructure("[#6]c1c([#7])cccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 759; if (cs.countSubstructure("[#6]c1c(Cl)cccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 760; if (cs.countSubstructure("[#6]c1c(Br)cccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 761; if (cs.countSubstructure("[#8]c1c([#8])cccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 762; if (cs.countSubstructure("[#8]c1c([#16])cccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 763; if (cs.countSubstructure("[#8]c1c([#7])cccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 764; if (cs.countSubstructure("[#8]c1c(Cl)cccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 765; if (cs.countSubstructure("[#8]c1c(Br)cccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 766; if (cs.countSubstructure("[#16]c1c([#16])cccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 767; if (cs.countSubstructure("[#16]c1c([#7])cccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 768; if (cs.countSubstructure("[#16]c1c(Cl)cccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 769; if (cs.countSubstructure("[#16]c1c(Br)cccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 770; if (cs.countSubstructure("[#7]c1c([#7])cccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 771; if (cs.countSubstructure("[#7]c1c(Cl)cccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 772; if (cs.countSubstructure("[#7]c1c(Br)cccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 773; if (cs.countSubstructure("Clc1c(Cl)cccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 774; if (cs.countSubstructure("Clc1c(Br)cccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 775; if (cs.countSubstructure("Brc1c(Br)cccc1") > 0) fp[b>>3] |= MASK[b%8]; b = 776; if (cs.countSubstructure("[#6][#6]1[#6][#6][#6]([#6])[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 777; if (cs.countSubstructure("[#6][#6]1[#6][#6][#6]([#8])[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 778; if (cs.countSubstructure("[#6][#6]1[#6][#6][#6]([#16])[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 779; if (cs.countSubstructure("[#6][#6]1[#6][#6][#6]([#7])[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 780; if (cs.countSubstructure("[#6][#6]1[#6][#6][#6](Cl)[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 781; if (cs.countSubstructure("[#6][#6]1[#6][#6][#6](Br)[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 782; if (cs.countSubstructure("[#8][#6]1[#6][#6][#6]([#8])[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 783; if (cs.countSubstructure("[#8][#6]1[#6][#6][#6]([#16])[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 784; if (cs.countSubstructure("[#8][#6]1[#6][#6][#6]([#7])[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 785; if (cs.countSubstructure("[#8][#6]1[#6][#6][#6](Cl)[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 786; if (cs.countSubstructure("[#8][#6]1[#6][#6][#6](Br)[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 787; if (cs.countSubstructure("[#16][#6]1[#6][#6][#6]([#16])[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 788; if (cs.countSubstructure("[#16][#6]1[#6][#6][#6]([#7])[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 789; if (cs.countSubstructure("[#16][#6]1[#6][#6][#6](Cl)[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 790; if (cs.countSubstructure("[#16][#6]1[#6][#6][#6](Br)[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 791; if (cs.countSubstructure("[#7][#6]1[#6][#6][#6]([#7])[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 792; if (cs.countSubstructure("[#7][#6]1[#6][#6][#6](Cl)[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 793; if (cs.countSubstructure("[#7][#6]1[#6][#6][#6](Br)[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 794; if (cs.countSubstructure("Cl[#6]1[#6][#6][#6](Cl)[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 795; if (cs.countSubstructure("Cl[#6]1[#6][#6][#6](Br)[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 796; if (cs.countSubstructure("Br[#6]1[#6][#6][#6](Br)[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 797; if (cs.countSubstructure("[#6][#6]1[#6][#6]([#6])[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 798; if (cs.countSubstructure("[#6][#6]1[#6][#6]([#8])[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 799; if (cs.countSubstructure("[#6][#6]1[#6][#6]([#16])[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 800; if (cs.countSubstructure("[#6][#6]1[#6][#6]([#7])[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 801; if (cs.countSubstructure("[#6][#6]1[#6][#6](Cl)[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 802; if (cs.countSubstructure("[#6][#6]1[#6][#6](Br)[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 803; if (cs.countSubstructure("[#8][#6]1[#6][#6]([#8])[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 804; if (cs.countSubstructure("[#8][#6]1[#6][#6]([#16])[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 805; if (cs.countSubstructure("[#8][#6]1[#6][#6]([#7])[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 806; if (cs.countSubstructure("[#8][#6]1[#6][#6](Cl)[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 807; if (cs.countSubstructure("[#8][#6]1[#6][#6](Br)[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 808; if (cs.countSubstructure("[#16][#6]1[#6][#6]([#16])[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 809; if (cs.countSubstructure("[#16][#6]1[#6][#6]([#7])[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 810; if (cs.countSubstructure("[#16][#6]1[#6][#6](Cl)[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 811; if (cs.countSubstructure("[#16][#6]1[#6][#6](Br)[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 812; if (cs.countSubstructure("[#7][#6]1[#6][#6]([#7])[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 813; if (cs.countSubstructure("[#7][#6]1[#6][#6](Cl)[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 814; if (cs.countSubstructure("[#7][#6]1[#6][#6](Br)[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 815; if (cs.countSubstructure("Cl[#6]1[#6][#6](Cl)[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 816; if (cs.countSubstructure("Cl[#6]1[#6][#6](Br)[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 817; if (cs.countSubstructure("Br[#6]1[#6][#6](Br)[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 818; if (cs.countSubstructure("[#6][#6]1[#6]([#6])[#6][#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 819; if (cs.countSubstructure("[#6][#6]1[#6]([#8])[#6][#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 820; if (cs.countSubstructure("[#6][#6]1[#6]([#16])[#6][#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 821; if (cs.countSubstructure("[#6][#6]1[#6]([#7])[#6][#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 822; if (cs.countSubstructure("[#6][#6]1[#6](Cl)[#6][#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 823; if (cs.countSubstructure("[#6][#6]1[#6](Br)[#6][#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 824; if (cs.countSubstructure("[#8][#6]1[#6]([#8])[#6][#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 825; if (cs.countSubstructure("[#8][#6]1[#6]([#16])[#6][#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 826; if (cs.countSubstructure("[#8][#6]1[#6]([#7])[#6][#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 827; if (cs.countSubstructure("[#8][#6]1[#6](Cl)[#6][#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 828; if (cs.countSubstructure("[#8][#6]1[#6](Br)[#6][#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 829; if (cs.countSubstructure("[#16][#6]1[#6]([#16])[#6][#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 830; if (cs.countSubstructure("[#16][#6]1[#6]([#7])[#6][#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 831; if (cs.countSubstructure("[#16][#6]1[#6](Cl)[#6][#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 832; if (cs.countSubstructure("[#16][#6]1[#6](Br)[#6][#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 833; if (cs.countSubstructure("[#7][#6]1[#6]([#7])[#6][#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 834; if (cs.countSubstructure("[#7][#6]1[#6](Cl)[#6][#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 835; if (cs.countSubstructure("[#7][#6]1[#6](Br)[#6][#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 836; if (cs.countSubstructure("Cl[#6]1[#6](Cl)[#6][#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 837; if (cs.countSubstructure("Cl[#6]1[#6](Br)[#6][#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 838; if (cs.countSubstructure("Br[#6]1[#6](Br)[#6][#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 839; if (cs.countSubstructure("[#6][#6]1[#6][#6]([#6])[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 840; if (cs.countSubstructure("[#6][#6]1[#6][#6]([#8])[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 841; if (cs.countSubstructure("[#6][#6]1[#6][#6]([#16])[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 842; if (cs.countSubstructure("[#6][#6]1[#6][#6]([#7])[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 843; if (cs.countSubstructure("[#6][#6]1[#6][#6](Cl)[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 844; if (cs.countSubstructure("[#6][#6]1[#6][#6](Br)[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 845; if (cs.countSubstructure("[#8][#6]1[#6][#6]([#8])[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 846; if (cs.countSubstructure("[#8][#6]1[#6][#6]([#16])[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 847; if (cs.countSubstructure("[#8][#6]1[#6][#6]([#7])[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 848; if (cs.countSubstructure("[#8][#6]1[#6][#6](Cl)[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 849; if (cs.countSubstructure("[#8][#6]1[#6][#6](Br)[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 850; if (cs.countSubstructure("[#16][#6]1[#6][#6]([#16])[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 851; if (cs.countSubstructure("[#16][#6]1[#6][#6]([#7])[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 852; if (cs.countSubstructure("[#16][#6]1[#6][#6](Cl)[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 853; if (cs.countSubstructure("[#16][#6]1[#6][#6](Br)[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 854; if (cs.countSubstructure("[#7][#6]1[#6][#6]([#7])[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 855; if (cs.countSubstructure("[#7][#6]1[#6][#6](Cl)[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 856; if (cs.countSubstructure("[#7][#6]1[#6][#6](Br)[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 857; if (cs.countSubstructure("Cl[#6]1[#6][#6](Cl)[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 858; if (cs.countSubstructure("Cl[#6]1[#6][#6](Br)[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 859; if (cs.countSubstructure("Br[#6]1[#6][#6](Br)[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 860; if (cs.countSubstructure("[#6][#6]1[#6]([#6])[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 861; if (cs.countSubstructure("[#6][#6]1[#6]([#8])[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 862; if (cs.countSubstructure("[#6][#6]1[#6]([#16])[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 863; if (cs.countSubstructure("[#6][#6]1[#6]([#7])[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 864; if (cs.countSubstructure("[#6][#6]1[#6](Cl)[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 865; if (cs.countSubstructure("[#6][#6]1[#6](Br)[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 866; if (cs.countSubstructure("[#8][#6]1[#6]([#8])[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 867; if (cs.countSubstructure("[#8][#6]1[#6]([#16])[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 868; if (cs.countSubstructure("[#8][#6]1[#6]([#7])[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 869; if (cs.countSubstructure("[#8][#6]1[#6](Cl)[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 870; if (cs.countSubstructure("[#8][#6]1[#6](Br)[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 871; if (cs.countSubstructure("[#16][#6]1[#6]([#16])[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 872; if (cs.countSubstructure("[#16][#6]1[#6]([#7])[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 873; if (cs.countSubstructure("[#16][#6]1[#6](Cl)[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 874; if (cs.countSubstructure("[#16][#6]1[#6](Br)[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 875; if (cs.countSubstructure("[#7][#6]1[#6]([#7])[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 876; if (cs.countSubstructure("[#7][#6]1[#6](Cl)[#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 877; if (cs.countSubstructure("[#7][#6]1[#6](Br)[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 878; if (cs.countSubstructure("Cl[#6]1[#6](Cl)[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 879; if (cs.countSubstructure("Cl[#6]1[#6](Br)[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; b = 880; if (cs.countSubstructure("Br[#6]1[#6](Br)[#6][#6][#6]1") > 0) fp[b>>3] |= MASK[b%8]; } }