changeset 0:0f3e5c69251e draft

"planemo upload for repository https://github.com/bgruening/galaxytools/tree/master/chemicaltoolbox/rdkit commit 20df7e562341cd30e89a14d6bde9054956fadc06"
author bgruening
date Tue, 10 Mar 2020 12:57:24 -0400
parents
children 3d96dc99698f
files dimorphite_dl.py enumerate_charges.xml rdkit_descriptors.py sdf_to_tab.py site_substructures.smarts test-data/CID_3037.sdf test-data/CID_3037.tab test-data/ligand.sdf test-data/ligand.tab test-data/mols.smi test-data/rdkit_descriptors_result1.csv test-data/rdkit_descriptors_result1.tab test-data/sucos_cluster.sdf
diffstat 13 files changed, 3578 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dimorphite_dl.py	Tue Mar 10 12:57:24 2020 -0400
@@ -0,0 +1,1084 @@
+# Copyright 2018 Jacob D. Durrant
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""
+This script identifies and enumerates the possible protonation sites of SMILES
+strings.
+"""
+
+from __future__ import print_function
+import copy
+import os
+import argparse
+import sys
+
+try:
+    # Python2
+    from StringIO import StringIO
+except ImportError:
+    # Python3
+    from io import StringIO
+
+# Always let the user know a help file is available.
+print("\nFor help, use: python dimorphite_dl.py --help")
+
+# And always report citation information.
+print("\nIf you use Dimorphite-DL in your research, please cite:")
+print("Ropp PJ, Kaminsky JC, Yablonski S, Durrant JD (2019) Dimorphite-DL: An")
+print("open-source program for enumerating the ionization states of drug-like small")
+print("molecules. J Cheminform 11:14. doi:10.1186/s13321-019-0336-9.\n")
+
+try:
+    import rdkit
+    from rdkit import Chem
+    from rdkit.Chem import AllChem
+except:
+    msg = "Dimorphite-DL requires RDKit. See https://www.rdkit.org/"
+    print(msg)
+    raise Exception(msg)
+
+def main(params=None):
+    """The main definition run when you call the script from the commandline.
+
+    :param params: The parameters to use. Entirely optional. If absent,
+                   defaults to None, in which case argments will be taken from
+                   those given at the command line.
+    :param params: dict, optional
+    :return: Returns a list of the SMILES strings return_as_list parameter is
+             True. Otherwise, returns None.
+    """
+
+    parser = ArgParseFuncs.get_args()
+    args = vars(parser.parse_args())
+
+    # Add in any parameters in params.
+    if params is not None:
+        for k, v in params.items():
+            args[k] = v
+
+    # If being run from the command line, print out all parameters.
+    if __name__ == "__main__":
+        print("\nPARAMETERS:\n")
+        for k in sorted(args.keys()):
+            print(k.rjust(13) + ": " + str(args[k]))
+        print("")
+
+    if args["test"]:
+        # Run tests.
+        TestFuncs.test()
+    else:
+        # Run protonation
+        if "output_file" in args and args["output_file"] is not None:
+            # An output file was specified, so write to that.
+            with open(args["output_file"], "w") as file:
+                for protonated_smi in Protonate(args):
+                    file.write(protonated_smi + "\n")
+        elif "return_as_list" in args and args["return_as_list"] == True:
+            return list(Protonate(args))
+        else:
+            # No output file specified. Just print it to the screen.
+            for protonated_smi in Protonate(args):
+                print(protonated_smi)
+
+class MyParser(argparse.ArgumentParser):
+    """Overwrite default parse so it displays help file on error. See
+    https://stackoverflow.com/questions/4042452/display-help-message-with-python-argparse-when-script-is-called-without-any-argu"""
+
+    def error(self, message):
+        """Overwrites the default error message.
+
+        :param message: The default error message.
+        """
+
+        self.print_help()
+        msg = "ERROR: %s\n\n" % message
+        print(msg)
+        raise Exception(msg)
+
+    def print_help(self, file=None):
+        """Overwrite the default print_help function
+
+        :param file: Output file, defaults to None
+        """
+
+        print("")
+
+        if file is None:
+            file = sys.stdout
+        self._print_message(self.format_help(), file)
+        print("""
+examples:
+  python dimorphite_dl.py --smiles_file sample_molecules.smi
+  python dimorphite_dl.py --smiles "CCC(=O)O" --min_ph -3.0 --max_ph -2.0
+  python dimorphite_dl.py --smiles "CCCN" --min_ph -3.0 --max_ph -2.0 --output_file output.smi
+  python dimorphite_dl.py --smiles_file sample_molecules.smi --pka_precision 2.0 --label_states
+  python dimorphite_dl.py --test""")
+        print("")
+
+class ArgParseFuncs:
+    """A namespace for storing functions that are useful for processing
+    command-line arguments. To keep things organized."""
+
+    @staticmethod
+    def get_args():
+        """Gets the arguments from the command line.
+
+        :return: A parser object.
+        """
+
+        parser = MyParser(description="Dimorphite 1.2: Creates models of " +
+                                    "appropriately protonated small moleucles. " +
+                                    "Apache 2.0 License. Copyright 2018 Jacob D. " +
+                                    "Durrant.")
+        parser.add_argument('--min_ph', metavar='MIN', type=float, default=6.4,
+                            help='minimum pH to consider (default: 6.4)')
+        parser.add_argument('--max_ph', metavar='MAX', type=float, default=8.4,
+                            help='maximum pH to consider (default: 8.4)')
+        parser.add_argument('--pka_precision', metavar='PRE', type=float, default=1.0,
+                            help='pKa precision factor (number of standard devations, default: 1.0)')
+        parser.add_argument('--smiles', metavar='SMI', type=str,
+                            help='SMILES string to protonate')
+        parser.add_argument('--smiles_file', metavar="FILE", type=str,
+                            help='file that contains SMILES strings to protonate')
+        parser.add_argument('--output_file', metavar="FILE", type=str,
+                            help='output file to write protonated SMILES (optional)')
+        parser.add_argument('--label_states', action="store_true",
+                            help='label protonated SMILES with target state ' + \
+                                '(i.e., "DEPROTONATED", "PROTONATED", or "BOTH").')
+        parser.add_argument('--test', action="store_true",
+                            help='run unit tests (for debugging)')
+
+        return parser
+
+    @staticmethod
+    def clean_args(args):
+        """Cleans and normalizes input parameters
+
+        :param args: A dictionary containing the arguments.
+        :type args: dict
+        :raises Exception: No SMILES in params.
+        """
+
+        defaults = {'min_ph' : 6.4,
+                    'max_ph' : 8.4,
+                    'pka_precision' : 1.0,
+                    'label_states' : False,
+                    'test' : False}
+
+        for key in defaults:
+            if key not in args:
+                args[key] = defaults[key]
+
+        keys = list(args.keys())
+        for key in keys:
+            if args[key] is None:
+                del args[key]
+
+        if not "smiles" in args and not "smiles_file" in args:
+            msg = "Error: No SMILES in params. Use the -h parameter for help."
+            print(msg)
+            raise Exception(msg)
+
+        # If the user provides a smiles string, turn it into a file-like StringIO
+        # object.
+        if "smiles" in args:
+            if isinstance(args["smiles"], str):
+                args["smiles_file"]  = StringIO(args["smiles"])
+
+        args["smiles_and_data"] = LoadSMIFile(args["smiles_file"])
+
+        return args
+
+class UtilFuncs:
+    """A namespace to store functions for manipulating mol objects. To keep
+    things organized."""
+
+    @staticmethod
+    def neutralize_mol(mol):
+        """All molecules should be neuralized to the extent possible. The user
+        should not be allowed to specify the valence of the atoms in most cases.
+
+        :param rdkit.Chem.rdchem.Mol mol: The rdkit Mol objet to be neutralized.
+        :return: The neutralized Mol object.
+        """
+
+        # Get the reaction data
+        rxn_data = [
+            ['[Ov1-1:1]', '[Ov2+0:1]-[H]'],  # To handle O- bonded to only one atom (add hydrogen).
+            ['[#7v4+1:1]-[H]', '[#7v3+0:1]'],  # To handle N+ bonded to a hydrogen (remove hydrogen).
+            ['[Ov2-:1]', '[Ov2+0:1]'],  # To handle O- bonded to two atoms. Should not be Negative.
+            ['[#7v3+1:1]', '[#7v3+0:1]'],  # To handle N+ bonded to three atoms. Should not be positive.
+            ['[#7v2-1:1]', '[#7+0:1]-[H]'],  # To handle N- Bonded to two atoms. Add hydrogen.
+            # ['[N:1]=[N+0:2]=[N:3]-[H]', '[N:1]=[N+1:2]=[N+0:3]-[H]'],  # To
+            # handle bad azide. Must be protonated. (Now handled elsewhere, before
+            # SMILES converted to Mol object.)
+            ['[H]-[N:1]-[N:2]#[N:3]', '[N:1]=[N+1:2]=[N:3]-[H]']  # To handle bad azide. R-N-N#N should be R-N=[N+]=N
+        ]
+
+        # Add substructures and reactions (initially none)
+        for i, rxn_datum in enumerate(rxn_data):
+            rxn_data[i].append(Chem.MolFromSmarts(rxn_datum[0]))
+            rxn_data[i].append(None)
+
+        # Add hydrogens (respects valence, so incomplete).
+        # Chem.calcImplicitValence(mol)
+        mol.UpdatePropertyCache(strict=False)
+        mol = Chem.AddHs(mol)
+
+        while True:  # Keep going until all these issues have been resolved.
+            current_rxn = None  # The reaction to perform.
+            current_rxn_str = None
+
+            for i, rxn_datum in enumerate(rxn_data):
+                reactant_smarts, product_smarts, substruct_match_mol, rxn_placeholder = rxn_datum
+                if mol.HasSubstructMatch(substruct_match_mol):
+                    if rxn_placeholder is None:
+                        current_rxn_str = reactant_smarts + '>>' + product_smarts
+                        current_rxn = AllChem.ReactionFromSmarts(current_rxn_str)
+                        rxn_data[i][3] = current_rxn  # Update the placeholder.
+                    else:
+                        current_rxn = rxn_data[i][3]
+                    break
+
+            # Perform the reaction if necessary
+            if current_rxn is None:  # No reaction left, so break out of while loop.
+                break
+            else:
+                mol = current_rxn.RunReactants((mol,))[0][0]
+                mol.UpdatePropertyCache(strict=False)  # Update valences
+
+        # The mols have been altered from the reactions described above, we need
+        # to resanitize them. Make sure aromatic rings are shown as such This
+        # catches all RDKit Errors. without the catchError and sanitizeOps the
+        # Chem.SanitizeMol can crash the program.
+        sanitize_string =  Chem.SanitizeMol(
+            mol,
+            sanitizeOps=rdkit.Chem.rdmolops.SanitizeFlags.SANITIZE_ALL,
+            catchErrors = True
+        )
+
+        return mol if sanitize_string.name == "SANITIZE_NONE" else None
+
+    @staticmethod
+    def convert_smiles_str_to_mol(smiles_str):
+        """Given a SMILES string, check that it is actually a string and not a
+        None. Then try to convert it to an RDKit Mol Object.
+
+        :param string smiles_str: The SMILES string.
+        :return: A rdkit.Chem.rdchem.Mol object, or None if it is the wrong type or
+            if it fails to convert to a Mol Obj
+        """
+
+        # Check that there are no type errors, ie Nones or non-string
+        # A non-string type will cause RDKit to hard crash
+        if smiles_str is None or type(smiles_str) is not str:
+            return None
+
+        # Try to fix azides here. They are just tricky to deal with.
+        smiles_str = smiles_str.replace("N=N=N", "N=[N+]=N")
+        smiles_str = smiles_str.replace("NN#N", "N=[N+]=N")
+
+        # Now convert to a mol object. Note the trick that is necessary to
+        # capture RDKit error/warning messages. See
+        # https://stackoverflow.com/questions/24277488/in-python-how-to-capture-the-stdout-from-a-c-shared-library-to-a-variable
+        stderr_fileno = sys.stderr.fileno()
+        stderr_save = os.dup(stderr_fileno)
+        stderr_pipe = os.pipe()
+        os.dup2(stderr_pipe[1], stderr_fileno)
+        os.close(stderr_pipe[1])
+
+        mol = Chem.MolFromSmiles(smiles_str)
+
+        os.close(stderr_fileno)
+        os.close(stderr_pipe[0])
+        os.dup2(stderr_save, stderr_fileno)
+        os.close(stderr_save)
+
+        # Check that there are None type errors Chem.MolFromSmiles has sanitize on
+        # which means if there is even a small error in the SMILES (kekulize,
+        # nitrogen charge...) then mol=None. ie.
+        # Chem.MolFromSmiles("C[N]=[N]=[N]") = None this is an example of an
+        # nitrogen charge error. It is cased in a try statement to be overly
+        # cautious.
+
+        return None if mol is None else mol
+
+    @staticmethod
+    def eprint(*args, **kwargs):
+        """Error messages should be printed to STDERR. See
+        https://stackoverflow.com/questions/5574702/how-to-print-to-stderr-in-python"""
+
+        print(*args, file=sys.stderr, **kwargs)
+
+class LoadSMIFile(object):
+    """A generator class for loading in the SMILES strings from a file, one at
+    a time."""
+
+    def __init__(self, filename):
+        """Initializes this class.
+
+        :param filename: The filename or file object (i.e., StringIO).
+        :type filename: str or StringIO
+        """
+
+        if type(filename) is str:
+            # It's a filename
+            self.f = open(filename, "r")
+        else:
+            # It's a file object (i.e., StringIO)
+            self.f = filename
+
+    def __iter__(self):
+        """Returns this generator object.
+
+        :return: This generator object.
+        :rtype: LoadSMIFile
+        """
+
+        return self
+
+    def __next__(self):
+        """Ensure Python3 compatibility.
+
+        :return: A dict, where the "smiles" key contains the canonical SMILES
+                 string and the "data" key contains the remaining information
+                 (e.g., the molecule name).
+        :rtype: dict
+        """
+
+        return self.next()
+
+    def next(self):
+        """Get the data associated with the next line.
+
+        :raises StopIteration: If there are no more lines left iin the file.
+        :return: A dict, where the "smiles" key contains the canonical SMILES
+                 string and the "data" key contains the remaining information
+                 (e.g., the molecule name).
+        :rtype: dict
+        """
+
+        line = self.f.readline()
+
+        if line == "":
+            # EOF
+            self.f.close()
+            raise StopIteration()
+            return
+
+        # Divide line into smi and data
+        splits = line.split()
+        if len(splits) != 0:
+            # Generate mol object
+            smiles_str = splits[0]
+
+            # Convert from SMILES string to RDKIT Mol. This series of tests is
+            # to make sure the SMILES string is properly formed and to get it
+            # into a canonical form. Filter if failed.
+            mol = UtilFuncs.convert_smiles_str_to_mol(smiles_str)
+            if mol is None:
+                UtilFuncs.eprint("WARNING: Skipping poorly formed SMILES string: " + line)
+                return self.next()
+
+            # Handle nuetralizing the molecules. Filter if failed.
+            mol = UtilFuncs.neutralize_mol(mol)
+            if mol is None:
+                UtilFuncs.eprint("WARNING: Skipping poorly formed SMILES string: " + line)
+                return self.next()
+
+            # Remove the hydrogens.
+            try:
+                mol = Chem.RemoveHs(mol)
+            except:
+                UtilFuncs.eprint("WARNING: Skipping poorly formed SMILES string: " + line)
+                return self.next()
+
+            if mol is None:
+                UtilFuncs.eprint("WARNING: Skipping poorly formed SMILES string: " + line)
+                return self.next()
+
+            # Regenerate the smiles string (to standardize).
+            new_mol_string = Chem.MolToSmiles(mol, isomericSmiles=True)
+
+            return {
+                "smiles": new_mol_string,
+                "data": splits[1:]
+            }
+        else:
+            # Blank line? Go to next one.
+            return self.next()
+
+class Protonate(object):
+    """A generator class for protonating SMILES strings, one at a time."""
+
+    def __init__(self, args):
+        """Initialize the generator.
+
+        :param args: A dictionary containing the arguments.
+        :type args: dict
+        """
+
+        # Make the args an object variable variable.
+        self.args = args
+
+        # A list to store the protonated SMILES strings associated with a
+        # single input model.
+        self.cur_prot_SMI = []
+
+        # Clean and normalize the args
+        self.args = ArgParseFuncs.clean_args(args)
+
+        # Load the substructures that can be protonated.
+        self.subs = ProtSubstructFuncs.load_protonation_substructs_calc_state_for_ph(
+            self.args["min_ph"], self.args["max_ph"], self.args["pka_precision"]
+        )
+
+    def __iter__(self):
+        """Returns this generator object.
+
+        :return: This generator object.
+        :rtype: Protonate
+        """
+
+        return self
+
+    def __next__(self):
+        """Ensure Python3 compatibility.
+
+        :return: A dict, where the "smiles" key contains the canonical SMILES
+                 string and the "data" key contains the remaining information
+                 (e.g., the molecule name).
+        :rtype: dict
+        """
+
+        return self.next()
+
+    def next(self):
+        """Get the next protonated SMILES string.
+
+        :raises StopIteration: If there are no more lines left iin the file.
+        :return: TODO A dict, where the "smiles" key contains the canonical SMILES
+                 string and the "data" key contains the remaining information
+                 (e.g., the molecule name).
+        :rtype: dict
+        """
+
+        # If there are any SMILES strings in self.cur_prot_SMI, just return
+        # the first one and update the list to include only the remaining.
+        if len(self.cur_prot_SMI) > 0:
+            first, self.cur_prot_SMI = self.cur_prot_SMI[0], self.cur_prot_SMI[1:]
+            return first
+
+        # self.cur_prot_SMI is empty, so try to add more to it.
+
+        # Get the next SMILES string from the input file.
+        try:
+            smile_and_datum = self.args["smiles_and_data"].next()
+        except StopIteration:
+            # There are no more input smiles strings...
+            raise StopIteration()
+
+        smi = smile_and_datum["smiles"]
+        data = smile_and_datum["data"]  # Everything on SMILES line but the
+                                        # SMILES string itself (e.g., the
+                                        # molecule name).
+
+        # Collect the data associated with this smiles (e.g., the molecule
+        # name).
+        tag = " ".join(data)
+
+        # sites is a list of (atom index, "PROTONATED|DEPROTONATED|BOTH").
+        # Note that the second entry indicates what state the site SHOULD be
+        # in (not the one it IS in per the SMILES string). It's calculated
+        # based on the probablistic distributions obtained during training.
+        sites = ProtSubstructFuncs.get_prot_sites_and_target_states(smi, self.subs)
+
+        new_smis = [smi]
+        for site in sites:
+            # Make a new smiles with the correct protonation state. Note that
+            # new_smis is a growing list. This is how multiple protonation
+            # sites are handled.
+
+            # new_smis_to_perhaps_add = ProtSubstructFuncs.protonate_site(new_smis, site)
+            new_smis = ProtSubstructFuncs.protonate_site(new_smis, site)
+            # print(site, new_smis)  # Good for debugging.
+
+            # Only add new smiles if not already in the list.
+            # for s in new_smis_to_perhaps_add:
+                # if not s in new_smis:
+                    # new_smis.append(s)
+
+        # In some cases, the script might generate redundant molecules.
+        # Phosphonates, when the pH is between the two pKa values and the
+        # stdev value is big enough, for example, will generate two identical
+        # BOTH states. Let's remove this redundancy.
+        new_smis = list(set(new_smis))
+
+        # Deprotonating protonated aromatic nitrogen gives [nH-]. Change this
+        # to [n-]. This is a hack.
+        new_smis = [s.replace("[nH-]", "[n-]") for s in new_smis]
+
+        # Sometimes Dimorphite-DL generates molecules that aren't actually
+        # possible. Simply convert these to mol objects to eliminate the bad
+        # ones (that are None).
+        new_smis = [s for s in new_smis if UtilFuncs.convert_smiles_str_to_mol(s) is not None]
+
+        # If there are no smi left, return the input one at the very least.
+        # All generated forms have apparently been judged
+        # inappropriate/mal-formed.
+        if len(new_smis) == 0:
+            new_smis = [smi]
+
+        # If the user wants to see the target states, add those
+        # to the ends of each line.
+        if self.args["label_states"]:
+            states = '\t'.join([x[1] for x in sites])
+            new_lines = [x + "\t" + tag + "\t" + states for x in new_smis]
+        else:
+            new_lines = [x + "\t" + tag for x in new_smis]
+
+        self.cur_prot_SMI = new_lines
+
+        return self.next()
+
+class ProtSubstructFuncs:
+    """A namespace to store functions for loading the substructures that can
+    be protonated. To keep things organized."""
+
+    @staticmethod
+    def load_protonation_substructs_calc_state_for_ph(min_ph=6.4, max_ph=8.4, pka_std_range=1):
+        """A pre-calculated list of R-groups with protonation sites, with their
+        likely pKa bins.
+
+        :param float min_ph:  The lower bound on the pH range, defaults to 6.4.
+        :param float max_ph:  The upper bound on the pH range, defaults to 8.4.
+        :param pka_std_range: Basically the precision (stdev from predicted pKa to
+                            consider), defaults to 1.
+        :return: A dict of the protonation substructions for the specified pH
+                range.
+        """
+
+        subs = []
+        pwd = os.path.dirname(os.path.realpath(__file__))
+
+        site_structures_file = "{}/{}".format(pwd, "site_substructures.smarts")
+        with open(site_structures_file, 'r') as substruct:
+            for line in substruct:
+                line = line.strip()
+                sub = {}
+                if line is not "":
+                    splits = line.split()
+                    sub["name"] = splits[0]
+                    sub["smart"] = splits[1]
+                    sub["mol"] = Chem.MolFromSmarts(sub["smart"])
+
+                    # NEED TO DIVIDE THIS BY 3s
+                    pka_ranges = [splits[i:i+3] for i in range(2, len(splits)-1, 3)]
+
+                    prot = []
+                    for pka_range in pka_ranges:
+                        site = pka_range[0]
+                        std = float(pka_range[2]) * pka_std_range
+                        mean = float(pka_range[1])
+                        protonation_state = ProtSubstructFuncs.define_protonation_state(
+                            mean, std, min_ph, max_ph
+                        )
+
+                        prot.append([site, protonation_state])
+
+                    sub["prot_states_for_pH"] = prot
+                    subs.append(sub)
+        return subs
+
+    @staticmethod
+    def define_protonation_state(mean, std, min_ph, max_ph):
+        """Updates the substructure definitions to include the protonation state
+        based on the user-given pH range. The size of the pKa range is also based
+        on the number of standard deviations to be considered by the user param.
+
+        :param float mean:   The mean pKa.
+        :param float std:    The precision (stdev).
+        :param float min_ph: The min pH of the range.
+        :param float max_ph: The max pH of the range.
+        :return: A string describing the protonation state.
+        """
+
+        min_pka = mean - std
+        max_pka = mean + std
+
+        # This needs to be reassigned, and 'ERROR' should never make it past the
+        # next set of checks.
+        if min_pka <= max_ph and min_ph <= max_pka:
+            protonation_state = 'BOTH'
+        elif mean > max_ph:
+            protonation_state = 'PROTONATED'
+        else:
+            protonation_state = 'DEPROTONATED'
+
+        return protonation_state
+
+    @staticmethod
+    def get_prot_sites_and_target_states(smi, subs):
+        """For a single molecule, find all possible matches in the protonation
+        R-group list, subs. Items that are higher on the list will be matched
+        first, to the exclusion of later items.
+
+        :param string smi: A SMILES string.
+        :param list subs: Substructure information.
+        :return: A list of protonation sites and their pKa bin. ('PROTONATED',
+            'BOTH', or  'DEPROTONATED')
+        """
+
+        # Convert the Smiles string (smi) to an RDKit Mol Obj
+        mol = UtilFuncs.convert_smiles_str_to_mol(smi)
+
+        # Check Conversion worked
+        if mol is None:
+            UtilFuncs.eprint("ERROR:   ", smi)
+            return []
+
+        # Try to Add hydrogens. if failed return []
+        try:
+            mol =  Chem.AddHs(mol)
+        except:
+            UtilFuncs.eprint("ERROR:   ", smi)
+            return []
+
+        # Check adding Hs worked
+        if mol is None:
+            UtilFuncs.eprint("ERROR:   ", smi)
+            return []
+
+        ProtectUnprotectFuncs.unprotect_molecule(mol)
+        protonation_sites = []
+
+        for item in subs:
+            smart = item["mol"]
+            if mol.HasSubstructMatch(smart):
+                matches = ProtectUnprotectFuncs.get_unprotected_matches(mol, smart)
+                prot = item["prot_states_for_pH"]
+                for match in matches:
+                    # We want to move the site from being relative to the
+                    # substructure, to the index on the main molecule.
+                    for site in prot:
+                        proton = int(site[0])
+                        category = site[1]
+                        new_site = (match[proton], category, item["name"])
+
+                        if not new_site in protonation_sites:
+                            # Because sites must be unique.
+                            protonation_sites.append(new_site)
+
+                    ProtectUnprotectFuncs.protect_molecule(mol, match)
+
+        return protonation_sites
+
+    @staticmethod
+    def protonate_site(smis, site):
+        """Given a list of SMILES strings, we protonate the site.
+
+        :param list smis:  The list of SMILES strings.
+        :param tuple site: Information about the protonation site.
+                        (idx, target_prot_state, prot_site_name)
+        :return: A list of the appropriately protonated SMILES.
+        """
+
+        # Decouple the atom index and its target protonation state from the site
+        # tuple
+        idx, target_prot_state, prot_site_name = site
+
+        # Initialize the output list
+        output_smis = []
+
+        state_to_charge = {"DEPROTONATED": [-1],
+                        "PROTONATED": [0],
+                        "BOTH": [-1, 0]}
+
+        charges = state_to_charge[target_prot_state]
+
+        # Now make the actual smiles match the target protonation state.
+        output_smis = ProtSubstructFuncs.set_protonation_charge(smis, idx, charges, prot_site_name)
+
+        return output_smis
+
+    @staticmethod
+    def set_protonation_charge(smis, idx, charges, prot_site_name):
+        """Sets the atomic charge on a particular site for a set of SMILES.
+
+        :param list smis:             A list of the SMILES strings.
+        :param int idx:               The index of the atom to consider.
+        :param list charges:          A list of the charges (ints) to assign at
+                                    this site.
+        :param string prot_site_name: The name of the protonation site.
+        :return: A list of the processed SMILES strings.
+        """
+
+        # Sets up the output list and the Nitrogen charge
+        output = []
+
+        for charge in charges:
+            # The charge for Nitrogens is 1 higher than others (i.e., protonated
+            # state is positively charged).
+            nitro_charge = charge + 1
+
+            # But there are a few nitrogen moieties where the acidic group is the
+            # neutral one. Amides are a good example. I gave some thought re. how
+            # to best flag these. I decided that those nitrogen-containing
+            # moieties where the acidic group is neutral (rather than positively
+            # charged) will have "*" in the name.
+            if "*" in prot_site_name:
+                nitro_charge = nitro_charge - 1  # Undo what was done previously.
+
+            for smi in smis:
+
+                # Convert smilesstring (smi) into a RDKit Mol
+                mol = UtilFuncs.convert_smiles_str_to_mol(smi)
+
+                # Check that the conversion worked, skip if it fails
+                if mol is None:
+                    continue
+
+                atom = mol.GetAtomWithIdx(idx)
+
+                # Assign the protonation charge, with special care for Nitrogens
+                element = atom.GetAtomicNum()
+                if element == 7:
+                    atom.SetFormalCharge(nitro_charge)
+                else:
+                    atom.SetFormalCharge(charge)
+
+                # Convert back to SMILE and add to output
+                out_smile = Chem.MolToSmiles(mol, isomericSmiles=True,canonical=True)
+                output.append(out_smile)
+
+        return output
+
+class ProtectUnprotectFuncs:
+    """A namespace for storing functions that are useful for protecting and
+    unprotecting molecules. To keep things organized. We need to identify and
+    mark groups that have been matched with a substructure."""
+
+    @staticmethod
+    def unprotect_molecule(mol):
+        """Sets the protected property on all atoms to 0. This also creates the
+        property for new molecules.
+
+        :param rdkit.Chem.rdchem.Mol mol: The rdkit Mol object.
+        :type mol: The rdkit Mol object with atoms unprotected.
+        """
+
+        for atom in mol.GetAtoms():
+            atom.SetProp('_protected', '0')
+
+    @staticmethod
+    def protect_molecule(mol, match):
+        """Given a 'match', a list of molecules idx's, we set the protected status
+        of each atom to 1. This will prevent any matches using that atom in the
+        future.
+
+        :param rdkit.Chem.rdchem.Mol mol: The rdkit Mol object to protect.
+        :param list match: A list of molecule idx's.
+        """
+
+        for idx in match:
+            atom = mol.GetAtomWithIdx(idx)
+            atom.SetProp('_protected', '1')
+
+    @staticmethod
+    def get_unprotected_matches(mol, substruct):
+        """Finds substructure matches with atoms that have not been protected.
+        Returns list of matches, each match a list of atom idxs.
+
+        :param rdkit.Chem.rdchem.Mol mol: The Mol object to consider.
+        :param string substruct: The SMARTS string of the substructure ot match.
+        :return: A list of the matches. Each match is itself a list of atom idxs.
+        """
+
+        matches = mol.GetSubstructMatches(substruct)
+        unprotected_matches = []
+        for match in matches:
+            if ProtectUnprotectFuncs.is_match_unprotected(mol, match):
+                unprotected_matches.append(match)
+        return unprotected_matches
+
+    @staticmethod
+    def is_match_unprotected(mol, match):
+        """Checks a molecule to see if the substructure match contains any
+        protected atoms.
+
+        :param rdkit.Chem.rdchem.Mol mol: The Mol object to check.
+        :param list match: The match to check.
+        :return: A boolean, whether the match is present or not.
+        """
+
+        for idx in match:
+            atom = mol.GetAtomWithIdx(idx)
+            protected = atom.GetProp("_protected")
+            if protected == "1":
+                return False
+        return True
+
+class TestFuncs:
+    """A namespace for storing functions that perform tests on the code. To
+    keep things organized."""
+
+    @staticmethod
+    def test():
+        """Tests all the 38 groups."""
+
+        smis = [
+            # [input smiles, pka, protonated, deprotonated, category]
+            ["C#CCO",                  "C#CCO",                     "C#CC[O-]",                 "Alcohol"],
+            ["C(=O)N",                 "NC=O",                      "[NH-]C=O",                 "Amide"],
+            ["CC(=O)NOC(C)=O",         "CC(=O)NOC(C)=O",            "CC(=O)[N-]OC(C)=O",        "Amide_electronegative"],
+            ["COC(=N)N",               "COC(N)=[NH2+]",             "COC(=N)N",                 "AmidineGuanidine2"],
+            ["Brc1ccc(C2NCCS2)cc1",    "Brc1ccc(C2[NH2+]CCS2)cc1",  "Brc1ccc(C2NCCS2)cc1",      "Amines_primary_secondary_tertiary"],
+            ["CC(=O)[n+]1ccc(N)cc1",   "CC(=O)[n+]1ccc([NH3+])cc1", "CC(=O)[n+]1ccc(N)cc1",     "Anilines_primary"],
+            ["CCNc1ccccc1",            "CC[NH2+]c1ccccc1",          "CCNc1ccccc1",              "Anilines_secondary"],
+            ["Cc1ccccc1N(C)C",         "Cc1ccccc1[NH+](C)C",        "Cc1ccccc1N(C)C",           "Anilines_tertiary"],
+            ["BrC1=CC2=C(C=C1)NC=C2",  "Brc1ccc2[nH]ccc2c1",        "Brc1ccc2[n-]ccc2c1",       "Indole_pyrrole"],
+            ["O=c1cc[nH]cc1",          "O=c1cc[nH]cc1",             "O=c1cc[n-]cc1",            "Aromatic_nitrogen_protonated"],
+            ["C-N=[N+]=[N@H]",         "CN=[N+]=N",                 "CN=[N+]=[N-]",             "Azide"],
+            ["BrC(C(O)=O)CBr",         "O=C(O)C(Br)CBr",            "O=C([O-])C(Br)CBr",        "Carboxyl"],
+            ["NC(NN=O)=N",             "NC(=[NH2+])NN=O",           "N=C(N)NN=O",               "AmidineGuanidine1"],
+            ["C(F)(F)(F)C(=O)NC(=O)C", "CC(=O)NC(=O)C(F)(F)F",      "CC(=O)[N-]C(=O)C(F)(F)F",  "Imide"],
+            ["O=C(C)NC(C)=O",          "CC(=O)NC(C)=O",             "CC(=O)[N-]C(C)=O",         "Imide2"],
+            ["CC(C)(C)C(N(C)O)=O",     "CN(O)C(=O)C(C)(C)C",        "CN([O-])C(=O)C(C)(C)C",    "N-hydroxyamide"],
+            ["C[N+](O)=O",             "C[N+](=O)O",                "C[N+](=O)[O-]",            "Nitro"],
+            ["O=C1C=C(O)CC1",          "O=C1C=C(O)CC1",             "O=C1C=C([O-])CC1",         "O=C-C=C-OH"],
+            ["C1CC1OO",                "OOC1CC1",                   "[O-]OC1CC1",               "Peroxide2"],
+            ["C(=O)OO",                "O=COO",                     "O=CO[O-]",                 "Peroxide1"],
+            ["Brc1cc(O)cc(Br)c1",      "Oc1cc(Br)cc(Br)c1",         "[O-]c1cc(Br)cc(Br)c1",     "Phenol"],
+            ["CC(=O)c1ccc(S)cc1",      "CC(=O)c1ccc(S)cc1",         "CC(=O)c1ccc([S-])cc1",     "Phenyl_Thiol"],
+            ["C=CCOc1ccc(C(=O)O)cc1",  "C=CCOc1ccc(C(=O)O)cc1",     "C=CCOc1ccc(C(=O)[O-])cc1", "Phenyl_carboxyl"],
+            ["COP(=O)(O)OC",           "COP(=O)(O)OC",              "COP(=O)([O-])OC",          "Phosphate_diester"],
+            ["CP(C)(=O)O",             "CP(C)(=O)O",                "CP(C)(=O)[O-]",            "Phosphinic_acid"],
+            ["CC(C)OP(C)(=O)O",        "CC(C)OP(C)(=O)O",           "CC(C)OP(C)(=O)[O-]",       "Phosphonate_ester"],
+            ["CC1(C)OC(=O)NC1=O",      "CC1(C)OC(=O)NC1=O",         "CC1(C)OC(=O)[N-]C1=O",     "Ringed_imide1"],
+            ["O=C(N1)C=CC1=O",         "O=C1C=CC(=O)N1",            "O=C1C=CC(=O)[N-]1",        "Ringed_imide2"],
+            ["O=S(OC)(O)=O",           "COS(=O)(=O)O",              "COS(=O)(=O)[O-]",          "Sulfate"],
+            ["COc1ccc(S(=O)O)cc1",     "COc1ccc(S(=O)O)cc1",        "COc1ccc(S(=O)[O-])cc1",    "Sulfinic_acid"],
+            ["CS(N)(=O)=O",            "CS(N)(=O)=O",               "CS([NH-])(=O)=O",          "Sulfonamide"],
+            ["CC(=O)CSCCS(O)(=O)=O",   "CC(=O)CSCCS(=O)(=O)O",      "CC(=O)CSCCS(=O)(=O)[O-]",  "Sulfonate"],
+            ["CC(=O)S",                "CC(=O)S",                   "CC(=O)[S-]",               "Thioic_acid"],
+            ["C(C)(C)(C)(S)",          "CC(C)(C)S",                 "CC(C)(C)[S-]",             "Thiol"],
+            ["Brc1cc[nH+]cc1",         "Brc1cc[nH+]cc1",            "Brc1ccncc1",               "Aromatic_nitrogen_unprotonated"],
+            ["C=C(O)c1c(C)cc(C)cc1C",  "C=C(O)c1c(C)cc(C)cc1C",     "C=C([O-])c1c(C)cc(C)cc1C", "Vinyl_alcohol"],
+            ["CC(=O)ON",               "CC(=O)O[NH3+]",             "CC(=O)ON",                 "Primary_hydroxyl_amine"]
+        ]
+
+        smis_phos = [
+            ["O=P(O)(O)OCCCC", "CCCCOP(=O)(O)O", "CCCCOP(=O)([O-])O", "CCCCOP(=O)([O-])[O-]", "Phosphate"],
+            ["CC(P(O)(O)=O)C", "CC(C)P(=O)(O)O", "CC(C)P(=O)([O-])O", "CC(C)P(=O)([O-])[O-]", "Phosphonate"]
+        ]
+
+        # Load the average pKa values.
+        average_pkas = {l.split()[0].replace("*", ""):float(l.split()[3]) for l in open("site_substructures.smarts") if l.split()[0] not in ["Phosphate", "Phosphonate"]}
+        average_pkas_phos = {l.split()[0].replace("*", ""):[float(l.split()[3]), float(l.split()[6])] for l in open("site_substructures.smarts") if l.split()[0] in ["Phosphate", "Phosphonate"]}
+
+        print("Running Tests")
+        print("=============")
+        print("")
+
+        print("Very Acidic (pH -10000000)")
+        print("--------------------------")
+        print("")
+
+        args = {
+            "min_ph": -10000000,
+            "max_ph": -10000000,
+            "pka_precision": 0.5,
+            "smiles": "",
+            "label_states": True
+        }
+
+        for smi, protonated, deprotonated, category in smis:
+            args["smiles"] = smi
+            TestFuncs.test_check(args, [protonated], ["PROTONATED"])
+
+        for smi, protonated, mix, deprotonated, category in smis_phos:
+            args["smiles"] = smi
+            TestFuncs.test_check(args, [protonated], ["PROTONATED"])
+
+        args["min_ph"] = 10000000
+        args["max_ph"] = 10000000
+
+        print("")
+        print("Very Basic (pH 10000000)")
+        print("------------------------")
+        print("")
+
+        for smi, protonated, deprotonated, category in smis:
+            args["smiles"] = smi
+            TestFuncs.test_check(args, [deprotonated], ["DEPROTONATED"])
+
+        for smi, protonated, mix, deprotonated, category in smis_phos:
+            args["smiles"] = smi
+            TestFuncs.test_check(args, [deprotonated], ["DEPROTONATED"])
+
+        print("")
+        print("pH is Category pKa")
+        print("------------------")
+        print("")
+
+        for smi, protonated, deprotonated, category in smis:
+            avg_pka = average_pkas[category]
+
+            args["smiles"] = smi
+            args["min_ph"] = avg_pka
+            args["max_ph"] = avg_pka
+
+            TestFuncs.test_check(args, [protonated, deprotonated], ["BOTH"])
+
+        for smi, protonated, mix, deprotonated, category in smis_phos:
+            args["smiles"] = smi
+
+            avg_pka = average_pkas_phos[category][0]
+            args["min_ph"] = avg_pka
+            args["max_ph"] = avg_pka
+
+            TestFuncs.test_check(args, [mix, protonated], ["BOTH"])
+
+            avg_pka = average_pkas_phos[category][1]
+            args["min_ph"] = avg_pka
+            args["max_ph"] = avg_pka
+
+            TestFuncs.test_check(args, [mix, deprotonated], ["DEPROTONATED", "DEPROTONATED"])
+
+            avg_pka = 0.5 * (average_pkas_phos[category][0] + average_pkas_phos[category][1])
+            args["min_ph"] = avg_pka
+            args["max_ph"] = avg_pka
+            args["pka_precision"] = 5  # Should give all three
+
+            TestFuncs.test_check(args, [mix, deprotonated, protonated], ["BOTH", "BOTH"])
+
+    @staticmethod
+    def test_check(args, expected_output, labels):
+        """Tests most ionizable groups. The ones that can only loose or gain a single proton.
+
+        :param args: The arguments to pass to protonate()
+        :param expected_output: A list of the expected SMILES-strings output.
+        :param labels: The labels. A list containing combo of BOTH, PROTONATED,
+                    DEPROTONATED.
+        :raises Exception: Wrong number of states produced.
+        :raises Exception: Unexpected output SMILES.
+        :raises Exception: Wrong labels.
+        """
+
+        output = list(Protonate(args))
+        output = [o.split() for o in output]
+
+        num_states = len(expected_output)
+
+        if (len(output) != num_states):
+            msg = args["smiles"] + " should have " + str(num_states) + \
+                " states at at pH " + str(args["min_ph"]) + ": " + str(output)
+            print(msg)
+            raise Exception(msg)
+
+        if (len(set([l[0] for l in output]) - set(expected_output)) != 0):
+            msg = args["smiles"] + " is not " + " AND ".join(expected_output) + \
+                " at pH " + str(args["min_ph"]) + " - " + str(args["max_ph"]) + \
+                "; it is " + " AND ".join([l[0] for l in output])
+            print(msg)
+            raise Exception(msg)
+
+        if (len(set([l[1] for l in output]) - set(labels)) != 0):
+            msg = args["smiles"] + " not labeled as " + " AND ".join(labels) + \
+                "; it is " + " AND ".join([l[1] for l in output])
+            print(msg)
+            raise Exception(msg)
+
+        ph_range = sorted(list(set([args["min_ph"], args["max_ph"]])))
+        ph_range_str = "(" + " - ".join("{0:.2f}".format(n) for n in ph_range) + ")"
+        print("(CORRECT) " + ph_range_str.ljust(10) + " " + args["smiles"] + " => " + " AND ".join([l[0] for l in output]))
+
+def run(**kwargs):
+    """A helpful, importable function for those who want to call Dimorphite-DL
+    from another Python script rather than the command line. Note that this
+    function accepts keyword arguments that match the command-line parameters
+    exactly. If you want to pass and return a list of RDKit Mol objects, import
+    run_with_mol_list() instead.
+
+    :param **kwargs: For a complete description, run dimorphite_dl.py from the
+        command line with the -h option.
+    :type kwargs: dict
+    """
+
+    # Run the main function with the specified arguments.
+    main(kwargs)
+
+def run_with_mol_list(mol_lst, **kwargs):
+    """A helpful, importable function for those who want to call Dimorphite-DL
+    from another Python script rather than the command line. Note that this
+    function is for passing Dimorphite-DL a list of RDKit Mol objects, together
+    with command-line parameters. If you want to use only the same parameters
+    that you would use from the command line, import run() instead.
+
+    :param mol_lst: A list of rdkit.Chem.rdchem.Mol objects.
+    :type mol_lst: list
+    :raises Exception: If the **kwargs includes "smiles", "smiles_file",
+                       "output_file", or "test" parameters.
+    :return: A list of properly protonated rdkit.Chem.rdchem.Mol objects.
+    :rtype: list
+    """
+
+    # Do a quick check to make sure the user input makes sense.
+    for bad_arg in ["smiles", "smiles_file", "output_file", "test"]:
+        if bad_arg in kwargs:
+            msg = "You're using Dimorphite-DL's run_with_mol_list(mol_lst, " + \
+                   "**kwargs) function, but you also passed the \"" + \
+                   bad_arg + "\" argument. Did you mean to use the " + \
+                   "run(**kwargs) function instead?"
+            print(msg)
+            raise Exception(msg)
+
+    # Set the return_as_list flag so main() will return the protonated smiles
+    # as a list.
+    kwargs["return_as_list"] = True
+
+    # Having reviewed the code, it will be very difficult to rewrite it so
+    # that a list of Mol objects can be used directly. Intead, convert this
+    # list of mols to smiles and pass that. Not efficient, but it will work.
+    protonated_smiles_and_props = []
+    for m in mol_lst:
+        props = m.GetPropsAsDict()
+        kwargs["smiles"] = Chem.MolToSmiles(m, isomericSmiles=True)
+        protonated_smiles_and_props.extend(
+            [(s.split("\t")[0], props) for s in main(kwargs)]
+        )
+
+    # Now convert the list of protonated smiles strings back to RDKit Mol
+    # objects. Also, add back in the properties from the original mol objects.
+    mols = []
+    for s, props in protonated_smiles_and_props:
+        m = Chem.MolFromSmiles(s)
+        if m:
+            for prop, val in props.items():
+                if type(val) is int:
+                    m.SetIntProp(prop, val)
+                elif type(val) is float:
+                    m.SetDoubleProp(prop, val)
+                elif type(val) is bool:
+                    m.SetBoolProp(prop, val)
+                else:
+                    m.SetProp(prop, str(val))
+            mols.append(m)
+        else:
+            UtilFuncs.eprint("WARNING: Could not process molecule with SMILES string " + s + " and properties " + str(props))
+
+    return mols
+
+if __name__ == "__main__":
+    main()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/enumerate_charges.xml	Tue Mar 10 12:57:24 2020 -0400
@@ -0,0 +1,98 @@
+<tool id="enumerate_charges" name="Enumerate changes" version="0.1">
+    <description>calculated with Dimorphite DL and RDKit</description>
+      <requirements>
+        <requirement type="package" version="2019.09.2">rdkit</requirement>
+    </requirements>
+    <command detect_errors="exit_code">
+<![CDATA[
+        python '$__tool_directory__/dimorphite_dl.py'
+            --smiles_file '$input'
+            --output_file '$output'
+            --min_ph $min_ph
+            --max_ph $max_ph
+]]>
+    </command>
+    <inputs>
+        <param name="input" format="smi" type="data" label="Input molecule data"
+            help="In SMILES format"/>
+        <param name="min_ph" type="float" label="Minimum pH" value="6.4" min="0" max="14"/>
+        <param name="max_ph" type="float" label="Maximum pH" value="8.4" min="0" max="14"/>
+    </inputs>
+    <outputs>
+        <data format="smi" name="output" />
+    </outputs>
+    <tests>
+        <test>
+            <param name="input" ftype='smi' value="mols.smi" />
+            <param name="min_ph"  value="6.4" />
+            <param name="max_ph"  value="8.4" />
+            <output name="output" ftype='smi'>
+                <!-- there are problems comparing the output to the expected due to whitespace differences
+                so we just check that the number of lines is as expected -->
+                <assert_contents>
+                    <has_n_lines n="7" />
+                    <has_text text="NC(CCCC[NH3+])C(=O)[O-]" />
+                    <has_text text="NCCCCC(N)C(=O)[O-]" />
+                    <has_text text="NCCCCC([NH3+])C(=O)[O-]" />
+                </assert_contents>
+            </output>
+        </test>
+        <test>
+            <param name="input" ftype='smi' value="mols.smi" />
+            <param name="min_ph"  value="4.4" />
+            <param name="max_ph"  value="10.4" />
+            <output name="output" ftype='smi'>
+                <assert_contents>
+                    <has_n_lines n="14" />
+                    <has_text text="NC(CCCC[NH3+])C(=O)O" />
+                    <has_text text="NCCCCC([NH3+])C(=O)[O-]" />
+                    <has_text text="NC(CCCC[NH3+])C(=O)[O-]" />
+                    <has_text text="NCCCCC([NH3+])C(=O)O" />
+                    <has_text text="NC(CCCC[NH3+])C(=O)O" />
+                    <has_text text="NCCCCC(N)C(=O)O" />
+                </assert_contents>
+            </output>
+        </test>
+    </tests>
+    <help>
+<![CDATA[
+
+.. class:: infomark
+
+**What this tool does**
+
+Dimorphite DL provides rules on how to enumerate the different charge forms of molecules using RDKit.
+Source code can be found here: https://git.durrantlab.pitt.edu/jdurrant/dimorphite_dl
+
+
+-----
+
+.. class:: infomark
+
+**Input**
+
+- `SMILES Format`_
+
+.. _SMILES Format: http://en.wikipedia.org/wiki/Simplified_molecular_input_line_entry_specification
+
+-----
+
+.. class:: infomark
+
+ **Output**
+
+SMILES format with the enumerated molecules. If an ID was provided in the input this is retained in the output.
+
+
+]]>
+    </help>
+    <citations>
+        <citation type="doi">10.1186/s13321-019-0336-9</citation>
+        <citation type="bibtex">
+            @article{rdkit,
+            author = {Greg Landrum and others},
+            title = {RDKit: Open-source cheminformatics},
+            url ={http://www.rdkit.org}
+            }</citation>
+    </citations>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rdkit_descriptors.py	Tue Mar 10 12:57:24 2020 -0400
@@ -0,0 +1,76 @@
+#!/usr/bin/env python
+
+from rdkit.Chem import Descriptors
+from rdkit import Chem
+import sys, os, re
+import argparse
+import inspect
+
+def get_supplier( infile, format = 'smiles' ):
+    """
+    Returns a generator over a SMILES or InChI file. Every element is of RDKit 
+    molecule and has its original string as _Name property.
+    """
+    with open(infile) as handle:
+        for line in handle:
+            line = line.strip()
+            if format == 'smiles':
+                mol = Chem.MolFromSmiles( line, sanitize=True )
+            elif format == 'inchi':
+                mol = Chem.inchi.MolFromInchi( line, sanitize=True, removeHs=True, logLevel=None, treatWarningAsError=False )
+            if mol is None:
+                yield False
+            else:
+                mol.SetProp( '_Name', line.split('\t')[0] )
+                yield mol
+
+def get_rdkit_descriptor_functions():
+    """
+    Returns all descriptor functions under the Chem.Descriptors Module as tuple of (name, function)
+    """
+    ret = [ (name, f) for name, f in inspect.getmembers( Descriptors ) if inspect.isfunction( f ) and not name.startswith( '_' ) ]
+    ret.sort()
+    return ret
+
+
+def descriptors( mol, functions ):
+    """
+    Calculates the descriptors of a given molecule.
+    """
+    for name, function in functions:
+        yield (name, function( mol ))
+
+
+if __name__ == "__main__":
+    parser = argparse.ArgumentParser()
+    parser.add_argument('-i', '--infile', required=True, help='Path to the input file.')
+    parser.add_argument("--iformat", help="Specify the input file format.")
+
+    parser.add_argument('-o', '--outfile', type=argparse.FileType('w+'), 
+        default=sys.stdout, help="path to the result file, default it sdtout")
+
+    parser.add_argument("--header", dest="header", action="store_true",
+                    default=False,
+                    help="Write header line.")
+
+    args = parser.parse_args()
+
+    if args.iformat == 'sdf':
+        supplier = Chem.SDMolSupplier( args.infile )
+    elif args.iformat =='smi':
+        supplier = get_supplier( args.infile, format = 'smiles' )
+    elif args.iformat == 'inchi':
+        supplier = get_supplier( args.infile, format = 'inchi' )
+
+    functions = get_rdkit_descriptor_functions()
+
+    if args.header:
+        args.outfile.write( '%s\n' % '\t'.join( ['MoleculeID'] + [name for name, f in functions] ) )
+
+    for mol in supplier:
+        if not mol:
+            continue
+        descs = descriptors( mol, functions )
+        molecule_id = mol.GetProp("_Name")
+        args.outfile.write( "%s\n" % '\t'.join( [molecule_id]+ [str(round(res, 6)) for name, res in descs] ) )
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sdf_to_tab.py	Tue Mar 10 12:57:24 2020 -0400
@@ -0,0 +1,46 @@
+#!/usr/bin/env python3
+import argparse
+import pandas as pd
+from rdkit import Chem
+
+def sdf_to_tab(vars):
+    mols = Chem.SDMolSupplier(vars.inp, sanitize=False)
+    df = pd.DataFrame()  # for output
+
+    for n in range(len(mols)):
+        if mols[n]:
+            d = mols[n].GetPropsAsDict()
+            # filter dict for desired props
+            if vars.props.strip() == '':  # none specified, return all
+                d = {prop: val for (prop, val) in d.items() if not any(x in str(val) for x in ['\n', '\t'])}  # remove items containing newlines or tabs
+            else:
+                d = {prop: val for (prop, val) in d.items() if prop in vars.props.replace(' ', '').split(',')}  # remove items not requested via CLI
+            if vars.name:
+                d['Name'] = mols[n].GetProp('_Name')
+            if vars.smiles:
+                d['SMILES'] = Chem.MolToSmiles(mols[n], isomericSmiles=False)
+            d['Index'] = int(n)
+
+            df = df.append(d, ignore_index=True)
+        else:
+            print("Molecule could not be read - skipped.")
+
+    df = df.astype({'Index': int}).set_index('Index')
+    df.to_csv(vars.out, sep='\t', header=vars.header)
+
+def main():
+    parser = argparse.ArgumentParser(description="Convert SDF to tabular")
+    parser.add_argument('--inp', '-i', help="The input file", required=True)
+    parser.add_argument('--out', '-o', help="The output file", required=True)
+    parser.add_argument('--props', '-p', help="Properties to filter (leave blank for all)", required=True)
+    parser.add_argument('--header', '-t', action='store_true',
+                        help="Write property name as the first row.")
+    parser.add_argument('--smiles', '-s', action='store_true',
+                        help="Include SMILES in output.")
+    parser.add_argument('--name', '-n', action='store_true',
+                        help="Include molecule name in output.")
+    sdf_to_tab(parser.parse_args())
+    
+
+if __name__ == "__main__":
+    main()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/site_substructures.smarts	Tue Mar 10 12:57:24 2020 -0400
@@ -0,0 +1,39 @@
+*Azide	[N+0:1]=[N+:2]=[N+0:3]-[H]	2	4.65	0.07071067811865513
+Nitro	[C,c,N,n,O,o:1]-[NX3:2](=[O:3])-[O:4]-[H]	3	-1000.0	0
+AmidineGuanidine1	[N:1]-[C:2](-[N:3])=[NX2:4]-[H:5]	3	12.025333333333334	1.5941046150769165
+AmidineGuanidine2	[C:1](-[N:2])=[NX2+0:3]	2	10.035538461538462	2.1312826469414716
+Sulfate	[SX4:1](=[O:2])(=[O:3])([O:4]-[C,c,N,n:5])-[OX2:6]-[H]	5	-2.36	1.3048043093561141
+Sulfonate	[SX4:1](=[O:2])(=[O:3])(-[C,c,N,n:4])-[OX2:5]-[H]	4	-1.8184615384615386	1.4086213481855594
+Sulfinic_acid	[SX3:1](=[O:2])-[O:3]-[H]	2	1.7933333333333332	0.4372070447739835
+Phenyl_carboxyl	[c,n,o:1]-[C:2](=[O:3])-[O:4]-[H]	3	3.463441968255319	1.2518054407928614
+Carboxyl	[C:1](=[O:2])-[O:3]-[H]	2	3.456652971502591	1.2871420886834017
+Thioic_acid	[C,c,N,n:1](=[O,S:2])-[SX2,OX2:3]-[H]	2	0.678267	1.497048763660801
+Phenyl_Thiol	[c,n:1]-[SX2:2]-[H]	1	4.978235294117647	2.6137000480499806
+Thiol	[C,N:1]-[SX2:2]-[H]	1	9.12448275862069	1.3317968158171463
+Phosphate	[PX4:1](=[O:2])(-[OX2:3]-[H])(-[O+0:4])-[OX2:5]-[H]	2	2.4182608695652172	1.1091177991945305	5	6.5055	0.9512787792174668
+Phosphonate	[PX4:1](=[O:2])(-[OX2:3]-[H])(-[C,c,N,n:4])-[OX2:5]-[H]	2	1.8835714285714287	0.5925999820080644	5	7.247254901960784	0.8511476450801531
+Phenol	[c,n,o:1]-[O:2]-[H]	1	7.065359866910526	3.277356122295936
+Peroxide1	[O:1]([$(C=O),$(C[Cl]),$(CF),$(C[Br]),$(CC#N):2])-[O:3]-[H]	2	8.738888888888889	0.7562592839596507
+Peroxide2	[C:1]-[O:2]-[O:3]-[H]	2	11.978235294117647	0.8697645895163075
+O=C-C=C-OH	[O:1]=[C;R:2]-[C;R:3]=[C;R:4]-[O:5]-[H]	4	3.554	0.803339458581667
+Vinyl_alcohol	[C:1]=[C:2]-[O:3]-[H]	2	8.871850714285713	1.660200255394124
+Alcohol	[C:1]-[O:2]-[H]	1	14.780384615384616	2.546464970533435
+N-hydroxyamide	[C:1](=[O:2])-[N:3]-[O:4]-[H]	3	9.301904761904762	1.2181897185891002
+*Ringed_imide1	[O,S:1]=[C;R:2]([$([#8]),$([#7]),$([#16]),$([#6][Cl]),$([#6]F),$([#6][Br]):3])-[N;R:4]([C;R:5]=[O,S:6])-[H]	3	6.4525	0.5555627777308341
+*Ringed_imide2	[O,S:1]=[C;R:2]-[N;R:3]([C;R:4]=[O,S:5])-[H]	2	8.681666666666667	1.8657779975741713
+*Imide	[F,Cl,Br,S,s,P,p:1][#6:2][CX3:3](=[O,S:4])-[NX3+0:5]([CX3:6]=[O,S:7])-[H]	4	2.466666666666667	1.4843629385474877
+*Imide2	[O,S:1]=[CX3:2]-[NX3+0:3]([CX3:4]=[O,S:5])-[H]	2	10.23	1.1198214143335534
+*Amide_electronegative	[C:1](=[O:2])-[N:3](-[Br,Cl,I,F,S,O,N,P:4])-[H]	2	3.4896	2.688124315081677
+*Amide	[C:1](=[O:2])-[N:3]-[H]	2	12.00611111111111	4.512491341218857
+*Sulfonamide	[SX4:1](=[O:2])(=[O:3])-[NX3+0:4]-[H]	3	7.9160326086956525	1.9842121316708763
+Anilines_primary	[c:1]-[NX3+0:2]([H:3])[H:4]	1	3.899298673194805	2.068768503987161
+Anilines_secondary	[c:1]-[NX3+0:2]([H:3])[!H:4]	1	4.335408163265306	2.1768842022330843
+Anilines_tertiary	[c:1]-[NX3+0:2]([!H:3])[!H:4]	1	4.16690685045614	2.005865735782679
+Aromatic_nitrogen_unprotonated	[n+0&H0:1]	0	4.3535441240733945	2.0714072661859584
+Amines_primary_secondary_tertiary	[C:1]-[NX3+0:2]	1	8.159107682388349	2.5183597445318147
+Phosphinic_acid	[PX4:1](=[O:2])(-[C,c,N,n,F,Cl,Br,I:3])(-[C,c,N,n,F,Cl,Br,I:4])-[OX2:5]-[H]	4	2.9745	0.6867886750744557
+Phosphate_diester	[PX4:1](=[O:2])(-[OX2:3]-[C,c,N,n,F,Cl,Br,I:4])(-[O+0:5]-[C,c,N,n,F,Cl,Br,I:4])-[OX2:6]-[H]	6	2.7280434782608696	2.5437448856908316
+Phosphonate_ester	[PX4:1](=[O:2])(-[OX2:3]-[C,c,N,n,F,Cl,Br,I:4])(-[C,c,N,n,F,Cl,Br,I:5])-[OX2:6]-[H]	5	2.0868	0.4503028610465036
+Primary_hydroxyl_amine	[C,c:1]-[O:2]-[NH2:3]	2	4.035714285714286	0.8463816543155368
+*Indole_pyrrole	[c;R:1]1[c;R:2][c;R:3][c;R:4][n;R:5]1[H]	4	14.52875	4.06702491591416
+*Aromatic_nitrogen_protonated	[n:1]-[H]	0	7.17	2.94602395490212
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/CID_3037.sdf	Tue Mar 10 12:57:24 2020 -0400
@@ -0,0 +1,220 @@
+3037
+  -OEChem-08231108593D
+
+ 27 28  0     0  0  0  0  0  0999 V2000
+   -4.8550    1.3401    0.2120 Cl  0  0  0  0  0  0  0  0  0  0  0  0
+    4.8529   -1.3406    0.2121 Cl  0  0  0  0  0  0  0  0  0  0  0  0
+   -0.1809   -2.1668   -0.3789 O   0  0  0  0  0  0  0  0  0  0  0  0
+    0.1788    2.1664   -0.3787 O   0  0  0  0  0  0  0  0  0  0  0  0
+   -0.0011   -0.0002    1.4744 C   0  0  0  0  0  0  0  0  0  0  0  0
+   -1.2222   -0.2738    0.6597 C   0  0  0  0  0  0  0  0  0  0  0  0
+    1.2377    0.2772    0.6480 C   0  0  0  0  0  0  0  0  0  0  0  0
+   -1.2586   -1.3462   -0.2316 C   0  0  0  0  0  0  0  0  0  0  0  0
+    1.2565    1.3457   -0.2314 C   0  0  0  0  0  0  0  0  0  0  0  0
+   -2.3343    0.5568    0.7972 C   0  0  0  0  0  0  0  0  0  0  0  0
+    2.3322   -0.5574    0.7972 C   0  0  0  0  0  0  0  0  0  0  0  0
+   -2.4069   -1.5879   -0.9855 C   0  0  0  0  0  0  0  0  0  0  0  0
+    2.4048    1.5875   -0.9852 C   0  0  0  0  0  0  0  0  0  0  0  0
+   -3.4827    0.3152    0.0433 C   0  0  0  0  0  0  0  0  0  0  0  0
+    3.4807   -0.3156    0.0435 C   0  0  0  0  0  0  0  0  0  0  0  0
+   -3.5190   -0.7571   -0.8481 C   0  0  0  0  0  0  0  0  0  0  0  0
+    3.5170    0.7568   -0.8478 C   0  0  0  0  0  0  0  0  0  0  0  0
+   -0.1548    0.8649    2.1342 H   0  0  0  0  0  0  0  0  0  0  0  0
+    0.1601   -0.8435    2.1593 H   0  0  0  0  0  0  0  0  0  0  0  0
+   -2.3089    1.3938    1.4913 H   0  0  0  0  0  0  0  0  0  0  0  0
+    2.3053   -1.3909    1.4943 H   0  0  0  0  0  0  0  0  0  0  0  0
+   -2.4415   -2.4213   -1.6818 H   0  0  0  0  0  0  0  0  0  0  0  0
+    2.4469    2.4191   -1.6835 H   0  0  0  0  0  0  0  0  0  0  0  0
+   -4.4070   -0.9574   -1.4422 H   0  0  0  0  0  0  0  0  0  0  0  0
+    4.4050    0.9570   -1.4418 H   0  0  0  0  0  0  0  0  0  0  0  0
+    0.2961   -2.2262    0.4641 H   0  0  0  0  0  0  0  0  0  0  0  0
+    0.3872    2.8487   -1.0397 H   0  0  0  0  0  0  0  0  0  0  0  0
+  1 14  1  0  0  0  0
+  2 15  1  0  0  0  0
+  3  8  1  0  0  0  0
+  3 26  1  0  0  0  0
+  4  9  1  0  0  0  0
+  4 27  1  0  0  0  0
+  5  6  1  0  0  0  0
+  5  7  1  0  0  0  0
+  5 18  1  0  0  0  0
+  5 19  1  0  0  0  0
+  6  8  2  0  0  0  0
+  6 10  1  0  0  0  0
+  7  9  2  0  0  0  0
+  7 11  1  0  0  0  0
+  8 12  1  0  0  0  0
+  9 13  1  0  0  0  0
+ 10 14  2  0  0  0  0
+ 10 20  1  0  0  0  0
+ 11 15  2  0  0  0  0
+ 11 21  1  0  0  0  0
+ 12 16  2  0  0  0  0
+ 12 22  1  0  0  0  0
+ 13 17  2  0  0  0  0
+ 13 23  1  0  0  0  0
+ 14 16  1  0  0  0  0
+ 15 17  1  0  0  0  0
+ 16 24  1  0  0  0  0
+ 17 25  1  0  0  0  0
+M  END
+> <PUBCHEM_COMPOUND_CID>
+3037
+
+> <PUBCHEM_CONFORMER_RMSD>
+0.6
+
+> <PUBCHEM_CONFORMER_DIVERSEORDER>
+8
+10
+12
+1
+7
+5
+11
+3
+6
+9
+4
+2
+
+> <PUBCHEM_MMFF94_PARTIAL_CHARGES>
+25
+1 -0.18
+10 -0.15
+11 -0.15
+12 -0.15
+13 -0.15
+14 0.18
+15 0.18
+16 -0.15
+17 -0.15
+2 -0.18
+20 0.15
+21 0.15
+22 0.15
+23 0.15
+24 0.15
+25 0.15
+26 0.45
+27 0.45
+3 -0.53
+4 -0.53
+5 0.29
+6 -0.14
+7 -0.14
+8 0.08
+9 0.08
+
+> <PUBCHEM_EFFECTIVE_ROTOR_COUNT>
+2
+
+> <PUBCHEM_PHARMACOPHORE_FEATURES>
+4
+1 3 donor
+1 4 donor
+6 6 8 10 12 14 16 rings
+6 7 9 11 13 15 17 rings
+
+> <PUBCHEM_HEAVY_ATOM_COUNT>
+17
+
+> <PUBCHEM_ATOM_DEF_STEREO_COUNT>
+0
+
+> <PUBCHEM_ATOM_UDEF_STEREO_COUNT>
+0
+
+> <PUBCHEM_BOND_DEF_STEREO_COUNT>
+0
+
+> <PUBCHEM_BOND_UDEF_STEREO_COUNT>
+0
+
+> <PUBCHEM_ISOTOPIC_ATOM_COUNT>
+0
+
+> <PUBCHEM_COMPONENT_COUNT>
+1
+
+> <PUBCHEM_CACTVS_TAUTO_COUNT>
+5
+
+> <PUBCHEM_CONFORMER_ID>
+00000BDD00000008
+
+> <PUBCHEM_MMFF94_ENERGY>
+44.6858
+
+> <PUBCHEM_FEATURE_SELFOVERLAP>
+20.297
+
+> <PUBCHEM_SHAPE_FINGERPRINT>
+10062212 137 18261117369936506423
+104564 63 17986963035811110412
+11458722 120 18339359768245870841
+11471102 22 5472872458301843344
+11578080 2 18190204380446433792
+116883 192 18265608969609498196
+12236239 1 18410856576819659107
+12592029 89 18338223951597366363
+13549 16 18410575084668353682
+13693222 15 6555421915516066822
+13764800 53 14189033175566991199
+14115302 16 18186237320680093898
+14341114 328 10087642619424135543
+14787075 74 9511159855286719151
+14993402 34 18410855451538227223
+15099037 51 18340768233908588503
+15207287 21 15719111361650760302
+15375358 24 15647053767618106914
+15775835 57 18272650117329930317
+16945 1 17906452130063974618
+17834072 14 15936410035134206066
+18186145 218 17132117918276567720
+19422 9 18271525295227750719
+20279233 1 15719389529571237654
+20645476 183 18339080393619327415
+23402539 116 18186809105365620101
+23402655 69 18342736308283284156
+23559900 14 17603590712323212176
+25 1 17561083592297532664
+26918003 58 6266902359448424189
+296302 2 15213020427345972082
+3082319 5 18338798905472319583
+34934 24 18341891845236497020
+633830 44 17703790310130762689
+74978 22 18266740181857992718
+7832392 63 18340206284835898173
+81228 2 15720767252053392762
+9981440 41 17403743242177431832
+
+> <PUBCHEM_SHAPE_MULTIPOLES>
+341.85
+8.38
+1.9
+1.1
+0.02
+0
+-1.15
+1.94
+-0.01
+0
+-0.39
+-4.15
+0.01
+0
+
+> <PUBCHEM_SHAPE_SELFOVERLAP>
+722.787
+
+> <PUBCHEM_SHAPE_VOLUME>
+193
+
+> <PUBCHEM_COORDINATE_TYPE>
+2
+5
+255
+
+$$$$
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/CID_3037.tab	Tue Mar 10 12:57:24 2020 -0400
@@ -0,0 +1,2 @@
+Index	Name	PUBCHEM_ATOM_DEF_STEREO_COUNT	PUBCHEM_ATOM_UDEF_STEREO_COUNT	PUBCHEM_BOND_DEF_STEREO_COUNT	PUBCHEM_BOND_UDEF_STEREO_COUNT	PUBCHEM_CACTVS_TAUTO_COUNT	PUBCHEM_COMPONENT_COUNT	PUBCHEM_COMPOUND_CID	PUBCHEM_CONFORMER_ID	PUBCHEM_CONFORMER_RMSD	PUBCHEM_EFFECTIVE_ROTOR_COUNT	PUBCHEM_FEATURE_SELFOVERLAP	PUBCHEM_HEAVY_ATOM_COUNT	PUBCHEM_ISOTOPIC_ATOM_COUNT	PUBCHEM_MMFF94_ENERGY	PUBCHEM_SHAPE_SELFOVERLAP	PUBCHEM_SHAPE_VOLUME
+0	3037	0.0	0.0	0.0	0.0	5.0	1.0	3037.0	00000BDD00000008	0.6	2.0	20.297	17.0	0.0	44.6858	722.787	193.0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/ligand.sdf	Tue Mar 10 12:57:24 2020 -0400
@@ -0,0 +1,612 @@
+pose1
+ OpenBabel09021916093D
+
+ 16 16  0  0  0  0  0  0  0  0999 V2000
+   30.7270  -43.7450   76.1540 C   0  0  0  0  0  0  0  0  0  0  0  0
+   32.2320  -43.8770   76.1820 C   0  0  0  0  0  0  0  0  0  0  0  0
+   32.9030  -44.5770   75.1900 C   0  0  0  0  0  0  0  0  0  0  0  0
+   34.2880  -44.7130   75.1870 C   0  0  0  0  0  0  0  0  0  0  0  0
+   34.9550  -45.4820   74.0800 C   0  0  0  0  0  0  0  0  0  0  0  0
+   35.0120  -44.1090   76.2270 C   0  0  0  0  0  0  0  0  0  0  0  0
+   34.3700  -43.3850   77.2450 C   0  0  0  0  0  0  0  0  0  0  0  0
+   35.1200  -42.7180   78.3740 C   0  0  0  0  0  0  0  0  0  0  0  0
+   32.9820  -43.2890   77.1920 C   0  0  0  0  0  0  0  0  0  0  0  0
+   36.4390  -44.2310   76.2340 N   0  0  0  0  0  0  0  0  0  0  0  0
+   36.8300  -44.9440   76.7890 H   0  0  0  0  0  0  0  0  0  0  0  0
+   37.2890  -43.4500   75.5420 C   0  0  0  0  0  0  0  0  0  0  0  0
+   37.0090  -42.3660   75.0480 O   0  0  0  0  0  0  0  0  0  0  0  0
+   38.6760  -43.9990   75.3480 C   0  0  0  0  0  0  0  0  0  0  0  0
+   38.7980  -44.7930   74.1950 O   0  0  0  0  0  0  0  0  0  0  0  0
+   38.6010  -46.1780   74.4680 C   0  0  0  0  0  0  0  0  0  0  0  0
+  1  2  1  0  0  0  0
+  2  9  2  0  0  0  0
+  3  2  1  0  0  0  0
+  4  3  2  0  0  0  0
+  4  6  1  0  0  0  0
+  5  4  1  0  0  0  0
+  6 10  1  0  0  0  0
+  6  7  2  0  0  0  0
+  7  8  1  0  0  0  0
+  9  7  1  0  0  0  0
+ 10 11  1  0  0  0  0
+ 12 10  1  0  0  0  0
+ 13 12  2  0  0  0  0
+ 14 12  1  0  0  0  0
+ 15 16  1  0  0  0  0
+ 15 14  1  0  0  0  0
+M  END
+>  <MODEL>
+1
+
+>  <REMARK>
+ VINA RESULT:      -4.9      0.000      0.000
+  Name = 
+  7 active torsions:
+  status: ('A' for Active; 'I' for Inactive)
+    1  A    between atoms: C_1  and  C_5
+    2  A    between atoms: C_2  and  C_12
+    3  A    between atoms: C_2  and  O_15
+    4  A    between atoms: C_3  and  O_15
+    5  A    between atoms: C_4  and  C_7
+    6  A    between atoms: C_8  and  N_13
+    7  A    between atoms: C_9  and  C_11
+                            x       y       z     vdW  Elec       q    Type
+                         _______ _______ _______ _____ _____    ______ ____
+
+>  <TORSDO>
+F 3
+
+>  <SCORE>
+-4.9
+
+>  <RMSD_LB>
+0.000
+
+>  <RMSD_UB>
+0.000
+
+$$$$
+pose2
+ OpenBabel09021916093D
+
+ 16 16  0  0  0  0  0  0  0  0999 V2000
+   30.7330  -43.6060   76.3350 C   0  0  0  0  0  0  0  0  0  0  0  0
+   32.2340  -43.7750   76.2880 C   0  0  0  0  0  0  0  0  0  0  0  0
+   33.0410  -43.2270   77.2740 C   0  0  0  0  0  0  0  0  0  0  0  0
+   34.4260  -43.3690   77.2600 C   0  0  0  0  0  0  0  0  0  0  0  0
+   35.2450  -42.7520   78.3610 C   0  0  0  0  0  0  0  0  0  0  0  0
+   35.0040  -44.0990   76.2100 C   0  0  0  0  0  0  0  0  0  0  0  0
+   34.2200  -44.6770   75.1980 C   0  0  0  0  0  0  0  0  0  0  0  0
+   34.8090  -45.4740   74.0590 C   0  0  0  0  0  0  0  0  0  0  0  0
+   32.8400  -44.4960   75.2690 C   0  0  0  0  0  0  0  0  0  0  0  0
+   36.4270  -44.2630   76.1860 N   0  0  0  0  0  0  0  0  0  0  0  0
+   36.8070  -45.0000   76.7160 H   0  0  0  0  0  0  0  0  0  0  0  0
+   37.2860  -43.4900   75.4970 C   0  0  0  0  0  0  0  0  0  0  0  0
+   37.0290  -42.3860   75.0350 O   0  0  0  0  0  0  0  0  0  0  0  0
+   38.6520  -44.0730   75.2620 C   0  0  0  0  0  0  0  0  0  0  0  0
+   38.7120  -44.8940   74.1230 O   0  0  0  0  0  0  0  0  0  0  0  0
+   38.5590  -46.2750   74.4420 C   0  0  0  0  0  0  0  0  0  0  0  0
+  2  1  1  0  0  0  0
+  2  3  2  0  0  0  0
+  4  3  1  0  0  0  0
+  4  5  1  0  0  0  0
+  6  4  2  0  0  0  0
+  7  9  2  0  0  0  0
+  7  6  1  0  0  0  0
+  8  7  1  0  0  0  0
+  9  2  1  0  0  0  0
+ 10  6  1  0  0  0  0
+ 10 11  1  0  0  0  0
+ 12 10  1  0  0  0  0
+ 13 12  2  0  0  0  0
+ 14 12  1  0  0  0  0
+ 15 16  1  0  0  0  0
+ 15 14  1  0  0  0  0
+M  END
+>  <MODEL>
+2
+
+>  <REMARK>
+ VINA RESULT:      -4.9      0.118      2.246
+  Name = 
+  7 active torsions:
+  status: ('A' for Active; 'I' for Inactive)
+    1  A    between atoms: C_1  and  C_5
+    2  A    between atoms: C_2  and  C_12
+    3  A    between atoms: C_2  and  O_15
+    4  A    between atoms: C_3  and  O_15
+    5  A    between atoms: C_4  and  C_7
+    6  A    between atoms: C_8  and  N_13
+    7  A    between atoms: C_9  and  C_11
+                            x       y       z     vdW  Elec       q    Type
+                         _______ _______ _______ _____ _____    ______ ____
+
+>  <TORSDO>
+F 3
+
+>  <SCORE>
+-4.9
+
+>  <RMSD_LB>
+0.118
+
+>  <RMSD_UB>
+2.246
+
+$$$$
+pose3
+ OpenBabel09021916093D
+
+ 16 16  0  0  0  0  0  0  0  0999 V2000
+   38.0110  -46.2540   74.8060 C   0  0  0  0  0  0  0  0  0  0  0  0
+   36.6410  -45.6700   75.0590 C   0  0  0  0  0  0  0  0  0  0  0  0
+   36.3810  -44.9390   76.2080 C   0  0  0  0  0  0  0  0  0  0  0  0
+   35.1300  -44.3850   76.4670 C   0  0  0  0  0  0  0  0  0  0  0  0
+   34.9150  -43.6000   77.7320 C   0  0  0  0  0  0  0  0  0  0  0  0
+   34.1140  -44.5800   75.5190 C   0  0  0  0  0  0  0  0  0  0  0  0
+   34.3400  -45.3070   74.3390 C   0  0  0  0  0  0  0  0  0  0  0  0
+   33.2700  -45.5280   73.2950 C   0  0  0  0  0  0  0  0  0  0  0  0
+   35.6120  -45.8370   74.1410 C   0  0  0  0  0  0  0  0  0  0  0  0
+   32.8230  -44.0090   75.7650 N   0  0  0  0  0  0  0  0  0  0  0  0
+   32.7200  -43.0420   75.6150 H   0  0  0  0  0  0  0  0  0  0  0  0
+   31.7400  -44.6890   76.1850 C   0  0  0  0  0  0  0  0  0  0  0  0
+   31.7580  -45.8050   76.6870 O   0  0  0  0  0  0  0  0  0  0  0  0
+   30.4150  -44.0110   75.9720 C   0  0  0  0  0  0  0  0  0  0  0  0
+   30.3610  -43.2680   74.7800 O   0  0  0  0  0  0  0  0  0  0  0  0
+   29.8410  -44.0280   73.6910 C   0  0  0  0  0  0  0  0  0  0  0  0
+  1  2  1  0  0  0  0
+  2  3  2  0  0  0  0
+  3  4  1  0  0  0  0
+  4  5  1  0  0  0  0
+  6 10  1  0  0  0  0
+  6  4  2  0  0  0  0
+  7  6  1  0  0  0  0
+  8  7  1  0  0  0  0
+  9  7  2  0  0  0  0
+  9  2  1  0  0  0  0
+ 10 12  1  0  0  0  0
+ 11 10  1  0  0  0  0
+ 12 13  2  0  0  0  0
+ 14 12  1  0  0  0  0
+ 15 14  1  0  0  0  0
+ 16 15  1  0  0  0  0
+M  END
+>  <MODEL>
+3
+
+>  <REMARK>
+ VINA RESULT:      -4.9      2.960      5.795
+  Name = 
+  7 active torsions:
+  status: ('A' for Active; 'I' for Inactive)
+    1  A    between atoms: C_1  and  C_5
+    2  A    between atoms: C_2  and  C_12
+    3  A    between atoms: C_2  and  O_15
+    4  A    between atoms: C_3  and  O_15
+    5  A    between atoms: C_4  and  C_7
+    6  A    between atoms: C_8  and  N_13
+    7  A    between atoms: C_9  and  C_11
+                            x       y       z     vdW  Elec       q    Type
+                         _______ _______ _______ _____ _____    ______ ____
+
+>  <TORSDO>
+F 3
+
+>  <SCORE>
+-4.9
+
+>  <RMSD_LB>
+2.960
+
+>  <RMSD_UB>
+5.795
+
+$$$$
+pose4
+ OpenBabel09021916093D
+
+ 16 16  0  0  0  0  0  0  0  0999 V2000
+   37.9950  -46.2420   74.8040 C   0  0  0  0  0  0  0  0  0  0  0  0
+   36.6310  -45.6410   75.0530 C   0  0  0  0  0  0  0  0  0  0  0  0
+   35.6040  -45.8070   74.1360 C   0  0  0  0  0  0  0  0  0  0  0  0
+   34.3360  -45.2680   74.3380 C   0  0  0  0  0  0  0  0  0  0  0  0
+   33.2650  -45.4860   73.3050 C   0  0  0  0  0  0  0  0  0  0  0  0
+   34.1090  -44.5430   75.5180 C   0  0  0  0  0  0  0  0  0  0  0  0
+   35.1210  -44.3610   76.4750 C   0  0  0  0  0  0  0  0  0  0  0  0
+   34.9070  -43.5920   77.7580 C   0  0  0  0  0  0  0  0  0  0  0  0
+   36.3670  -44.9230   76.2110 C   0  0  0  0  0  0  0  0  0  0  0  0
+   32.8080  -43.9900   75.7470 N   0  0  0  0  0  0  0  0  0  0  0  0
+   32.6920  -43.0240   75.5920 H   0  0  0  0  0  0  0  0  0  0  0  0
+   31.7290  -44.6830   76.1560 C   0  0  0  0  0  0  0  0  0  0  0  0
+   31.7570  -45.7970   76.6620 O   0  0  0  0  0  0  0  0  0  0  0  0
+   30.3970  -44.0250   75.9240 C   0  0  0  0  0  0  0  0  0  0  0  0
+   30.3400  -43.3070   74.7170 O   0  0  0  0  0  0  0  0  0  0  0  0
+   29.7270  -44.0560   73.6700 C   0  0  0  0  0  0  0  0  0  0  0  0
+  1  2  1  0  0  0  0
+  2  9  2  0  0  0  0
+  3  4  2  0  0  0  0
+  3  2  1  0  0  0  0
+  4  6  1  0  0  0  0
+  5  4  1  0  0  0  0
+  6 10  1  0  0  0  0
+  6  7  2  0  0  0  0
+  7  8  1  0  0  0  0
+  9  7  1  0  0  0  0
+ 10 12  1  0  0  0  0
+ 11 10  1  0  0  0  0
+ 12 13  2  0  0  0  0
+ 14 12  1  0  0  0  0
+ 15 14  1  0  0  0  0
+ 16 15  1  0  0  0  0
+M  END
+>  <MODEL>
+4
+
+>  <REMARK>
+ VINA RESULT:      -4.8      2.958      5.379
+  Name = 
+  7 active torsions:
+  status: ('A' for Active; 'I' for Inactive)
+    1  A    between atoms: C_1  and  C_5
+    2  A    between atoms: C_2  and  C_12
+    3  A    between atoms: C_2  and  O_15
+    4  A    between atoms: C_3  and  O_15
+    5  A    between atoms: C_4  and  C_7
+    6  A    between atoms: C_8  and  N_13
+    7  A    between atoms: C_9  and  C_11
+                            x       y       z     vdW  Elec       q    Type
+                         _______ _______ _______ _____ _____    ______ ____
+
+>  <TORSDO>
+F 3
+
+>  <SCORE>
+-4.8
+
+>  <RMSD_LB>
+2.958
+
+>  <RMSD_UB>
+5.379
+
+$$$$
+pose5
+ OpenBabel09021916093D
+
+ 16 16  0  0  0  0  0  0  0  0999 V2000
+   38.0500  -44.6890   74.2080 C   0  0  0  0  0  0  0  0  0  0  0  0
+   36.6310  -44.7300   74.7250 C   0  0  0  0  0  0  0  0  0  0  0  0
+   35.6330  -45.3790   74.0140 C   0  0  0  0  0  0  0  0  0  0  0  0
+   34.3180  -45.4370   74.4670 C   0  0  0  0  0  0  0  0  0  0  0  0
+   33.2830  -46.1590   73.6480 C   0  0  0  0  0  0  0  0  0  0  0  0
+   34.0140  -44.8170   75.6890 C   0  0  0  0  0  0  0  0  0  0  0  0
+   34.9980  -44.1580   76.4430 C   0  0  0  0  0  0  0  0  0  0  0  0
+   34.7050  -43.4880   77.7650 C   0  0  0  0  0  0  0  0  0  0  0  0
+   36.2940  -44.1340   75.9330 C   0  0  0  0  0  0  0  0  0  0  0  0
+   32.6670  -44.8760   76.1740 N   0  0  0  0  0  0  0  0  0  0  0  0
+   32.4200  -45.6500   76.7300 H   0  0  0  0  0  0  0  0  0  0  0  0
+   31.7140  -43.9580   75.9320 C   0  0  0  0  0  0  0  0  0  0  0  0
+   31.7570  -43.1100   75.0500 O   0  0  0  0  0  0  0  0  0  0  0  0
+   30.5300  -43.9780   76.8600 C   0  0  0  0  0  0  0  0  0  0  0  0
+   30.1410  -42.6970   77.2850 O   0  0  0  0  0  0  0  0  0  0  0  0
+   30.9190  -42.2320   78.3850 C   0  0  0  0  0  0  0  0  0  0  0  0
+  1  2  1  0  0  0  0
+  2  9  2  0  0  0  0
+  3  4  2  0  0  0  0
+  3  2  1  0  0  0  0
+  4  6  1  0  0  0  0
+  5  4  1  0  0  0  0
+  6 10  1  0  0  0  0
+  6  7  2  0  0  0  0
+  7  8  1  0  0  0  0
+  9  7  1  0  0  0  0
+ 10 11  1  0  0  0  0
+ 12 10  1  0  0  0  0
+ 12 14  1  0  0  0  0
+ 13 12  2  0  0  0  0
+ 14 15  1  0  0  0  0
+ 15 16  1  0  0  0  0
+M  END
+>  <MODEL>
+5
+
+>  <REMARK>
+ VINA RESULT:      -4.5      2.763      5.379
+  Name = 
+  7 active torsions:
+  status: ('A' for Active; 'I' for Inactive)
+    1  A    between atoms: C_1  and  C_5
+    2  A    between atoms: C_2  and  C_12
+    3  A    between atoms: C_2  and  O_15
+    4  A    between atoms: C_3  and  O_15
+    5  A    between atoms: C_4  and  C_7
+    6  A    between atoms: C_8  and  N_13
+    7  A    between atoms: C_9  and  C_11
+                            x       y       z     vdW  Elec       q    Type
+                         _______ _______ _______ _____ _____    ______ ____
+
+>  <TORSDO>
+F 3
+
+>  <SCORE>
+-4.5
+
+>  <RMSD_LB>
+2.763
+
+>  <RMSD_UB>
+5.379
+
+$$$$
+pose6
+ OpenBabel09021916093D
+
+ 16 16  0  0  0  0  0  0  0  0999 V2000
+   33.2740  -46.1140   73.3890 C   0  0  0  0  0  0  0  0  0  0  0  0
+   33.2350  -45.2530   74.6310 C   0  0  0  0  0  0  0  0  0  0  0  0
+   32.0270  -44.8930   75.2080 C   0  0  0  0  0  0  0  0  0  0  0  0
+   31.9590  -44.1040   76.3530 C   0  0  0  0  0  0  0  0  0  0  0  0
+   30.6150  -43.7500   76.9300 C   0  0  0  0  0  0  0  0  0  0  0  0
+   33.1640  -43.6750   76.9310 C   0  0  0  0  0  0  0  0  0  0  0  0
+   34.4080  -44.0260   76.3810 C   0  0  0  0  0  0  0  0  0  0  0  0
+   35.7220  -43.5880   76.9830 C   0  0  0  0  0  0  0  0  0  0  0  0
+   34.4060  -44.8150   75.2340 C   0  0  0  0  0  0  0  0  0  0  0  0
+   33.1120  -42.8710   78.1150 N   0  0  0  0  0  0  0  0  0  0  0  0
+   33.0600  -43.3400   78.9790 H   0  0  0  0  0  0  0  0  0  0  0  0
+   33.1290  -41.5260   78.1420 C   0  0  0  0  0  0  0  0  0  0  0  0
+   32.9030  -40.7970   77.1840 O   0  0  0  0  0  0  0  0  0  0  0  0
+   33.4950  -40.8990   79.4590 C   0  0  0  0  0  0  0  0  0  0  0  0
+   34.3180  -39.7680   79.3210 O   0  0  0  0  0  0  0  0  0  0  0  0
+   35.5320  -39.8880   80.0580 C   0  0  0  0  0  0  0  0  0  0  0  0
+  1  2  1  0  0  0  0
+  2  3  2  0  0  0  0
+  2  9  1  0  0  0  0
+  3  4  1  0  0  0  0
+  4  5  1  0  0  0  0
+  4  6  2  0  0  0  0
+  6 10  1  0  0  0  0
+  7  6  1  0  0  0  0
+  7  8  1  0  0  0  0
+  9  7  2  0  0  0  0
+ 10 12  1  0  0  0  0
+ 10 11  1  0  0  0  0
+ 12 14  1  0  0  0  0
+ 13 12  2  0  0  0  0
+ 15 14  1  0  0  0  0
+ 15 16  1  0  0  0  0
+M  END
+>  <MODEL>
+6
+
+>  <REMARK>
+ VINA RESULT:      -4.4      3.106      4.850
+  Name = 
+  7 active torsions:
+  status: ('A' for Active; 'I' for Inactive)
+    1  A    between atoms: C_1  and  C_5
+    2  A    between atoms: C_2  and  C_12
+    3  A    between atoms: C_2  and  O_15
+    4  A    between atoms: C_3  and  O_15
+    5  A    between atoms: C_4  and  C_7
+    6  A    between atoms: C_8  and  N_13
+    7  A    between atoms: C_9  and  C_11
+                            x       y       z     vdW  Elec       q    Type
+                         _______ _______ _______ _____ _____    ______ ____
+
+>  <TORSDO>
+F 3
+
+>  <SCORE>
+-4.4
+
+>  <RMSD_LB>
+3.106
+
+>  <RMSD_UB>
+4.850
+
+$$$$
+pose7
+ OpenBabel09021916093D
+
+ 16 16  0  0  0  0  0  0  0  0999 V2000
+   37.4790  -45.2240   74.1750 C   0  0  0  0  0  0  0  0  0  0  0  0
+   36.1180  -45.0510   74.8080 C   0  0  0  0  0  0  0  0  0  0  0  0
+   35.9750  -44.3800   76.0130 C   0  0  0  0  0  0  0  0  0  0  0  0
+   34.7340  -44.2020   76.6200 C   0  0  0  0  0  0  0  0  0  0  0  0
+   34.6480  -43.4610   77.9270 C   0  0  0  0  0  0  0  0  0  0  0  0
+   33.6030  -44.7210   75.9710 C   0  0  0  0  0  0  0  0  0  0  0  0
+   33.7050  -45.3990   74.7460 C   0  0  0  0  0  0  0  0  0  0  0  0
+   32.5070  -45.9630   74.0190 C   0  0  0  0  0  0  0  0  0  0  0  0
+   34.9750  -45.5460   74.1940 C   0  0  0  0  0  0  0  0  0  0  0  0
+   32.3180  -44.5390   76.5770 N   0  0  0  0  0  0  0  0  0  0  0  0
+   31.9880  -45.2570   77.1640 H   0  0  0  0  0  0  0  0  0  0  0  0
+   31.5250  -43.4650   76.4090 C   0  0  0  0  0  0  0  0  0  0  0  0
+   31.6380  -42.6370   75.5140 O   0  0  0  0  0  0  0  0  0  0  0  0
+   30.4470  -43.2750   77.4400 C   0  0  0  0  0  0  0  0  0  0  0  0
+   30.4060  -41.9700   77.9600 O   0  0  0  0  0  0  0  0  0  0  0  0
+   31.3500  -41.7760   79.0110 C   0  0  0  0  0  0  0  0  0  0  0  0
+  1  2  1  0  0  0  0
+  2  3  2  0  0  0  0
+  3  4  1  0  0  0  0
+  4  5  1  0  0  0  0
+  6 10  1  0  0  0  0
+  6  4  2  0  0  0  0
+  7  6  1  0  0  0  0
+  8  7  1  0  0  0  0
+  9  7  2  0  0  0  0
+  9  2  1  0  0  0  0
+ 10 11  1  0  0  0  0
+ 12 10  1  0  0  0  0
+ 12 14  1  0  0  0  0
+ 13 12  2  0  0  0  0
+ 14 15  1  0  0  0  0
+ 15 16  1  0  0  0  0
+M  END
+>  <MODEL>
+7
+
+>  <REMARK>
+ VINA RESULT:      -4.4      2.847      5.816
+  Name = 
+  7 active torsions:
+  status: ('A' for Active; 'I' for Inactive)
+    1  A    between atoms: C_1  and  C_5
+    2  A    between atoms: C_2  and  C_12
+    3  A    between atoms: C_2  and  O_15
+    4  A    between atoms: C_3  and  O_15
+    5  A    between atoms: C_4  and  C_7
+    6  A    between atoms: C_8  and  N_13
+    7  A    between atoms: C_9  and  C_11
+                            x       y       z     vdW  Elec       q    Type
+                         _______ _______ _______ _____ _____    ______ ____
+
+>  <TORSDO>
+F 3
+
+>  <SCORE>
+-4.4
+
+>  <RMSD_LB>
+2.847
+
+>  <RMSD_UB>
+5.816
+
+$$$$
+pose8
+ OpenBabel09021916093D
+
+ 16 16  0  0  0  0  0  0  0  0999 V2000
+   29.2690  -46.5680   70.6110 C   0  0  0  0  0  0  0  0  0  0  0  0
+   29.9950  -45.8610   71.7330 C   0  0  0  0  0  0  0  0  0  0  0  0
+   31.2800  -46.2360   72.0950 C   0  0  0  0  0  0  0  0  0  0  0  0
+   31.9750  -45.6010   73.1210 C   0  0  0  0  0  0  0  0  0  0  0  0
+   33.3680  -46.0550   73.4620 C   0  0  0  0  0  0  0  0  0  0  0  0
+   31.3390  -44.5460   73.7940 C   0  0  0  0  0  0  0  0  0  0  0  0
+   30.0420  -44.1320   73.4510 C   0  0  0  0  0  0  0  0  0  0  0  0
+   29.3330  -42.9960   74.1500 C   0  0  0  0  0  0  0  0  0  0  0  0
+   29.4010  -44.8100   72.4170 C   0  0  0  0  0  0  0  0  0  0  0  0
+   32.0440  -43.8770   74.8450 N   0  0  0  0  0  0  0  0  0  0  0  0
+   32.6940  -43.1840   74.5860 H   0  0  0  0  0  0  0  0  0  0  0  0
+   31.8900  -44.1170   76.1600 C   0  0  0  0  0  0  0  0  0  0  0  0
+   31.3600  -45.1120   76.6390 O   0  0  0  0  0  0  0  0  0  0  0  0
+   32.3840  -43.0420   77.0880 C   0  0  0  0  0  0  0  0  0  0  0  0
+   32.0560  -41.7460   76.6550 O   0  0  0  0  0  0  0  0  0  0  0  0
+   32.0630  -40.8000   77.7210 C   0  0  0  0  0  0  0  0  0  0  0  0
+  1  2  1  0  0  0  0
+  2  3  2  0  0  0  0
+  2  9  1  0  0  0  0
+  3  4  1  0  0  0  0
+  4  5  1  0  0  0  0
+  4  6  2  0  0  0  0
+  6 10  1  0  0  0  0
+  7  6  1  0  0  0  0
+  7  8  1  0  0  0  0
+  9  7  2  0  0  0  0
+ 10 12  1  0  0  0  0
+ 11 10  1  0  0  0  0
+ 12 13  2  0  0  0  0
+ 12 14  1  0  0  0  0
+ 15 14  1  0  0  0  0
+ 15 16  1  0  0  0  0
+M  END
+>  <MODEL>
+8
+
+>  <REMARK>
+ VINA RESULT:      -4.3      3.964      5.892
+  Name = 
+  7 active torsions:
+  status: ('A' for Active; 'I' for Inactive)
+    1  A    between atoms: C_1  and  C_5
+    2  A    between atoms: C_2  and  C_12
+    3  A    between atoms: C_2  and  O_15
+    4  A    between atoms: C_3  and  O_15
+    5  A    between atoms: C_4  and  C_7
+    6  A    between atoms: C_8  and  N_13
+    7  A    between atoms: C_9  and  C_11
+                            x       y       z     vdW  Elec       q    Type
+                         _______ _______ _______ _____ _____    ______ ____
+
+>  <TORSDO>
+F 3
+
+>  <SCORE>
+-4.3
+
+>  <RMSD_LB>
+3.964
+
+>  <RMSD_UB>
+5.892
+
+$$$$
+pose9
+ OpenBabel09021916093D
+
+ 16 16  0  0  0  0  0  0  0  0999 V2000
+   36.2810  -45.5880   74.7420 C   0  0  0  0  0  0  0  0  0  0  0  0
+   34.7970  -45.3090   74.6830 C   0  0  0  0  0  0  0  0  0  0  0  0
+   34.0060  -45.8780   73.6960 C   0  0  0  0  0  0  0  0  0  0  0  0
+   32.6360  -45.6430   73.6170 C   0  0  0  0  0  0  0  0  0  0  0  0
+   31.8340  -46.2940   72.5230 C   0  0  0  0  0  0  0  0  0  0  0  0
+   32.0540  -44.8050   74.5810 C   0  0  0  0  0  0  0  0  0  0  0  0
+   32.8200  -44.2170   75.6010 C   0  0  0  0  0  0  0  0  0  0  0  0
+   32.2240  -43.3170   76.6570 C   0  0  0  0  0  0  0  0  0  0  0  0
+   34.1850  -44.4900   75.6220 C   0  0  0  0  0  0  0  0  0  0  0  0
+   30.6450  -44.5600   74.5200 N   0  0  0  0  0  0  0  0  0  0  0  0
+   30.0630  -45.1230   75.0810 H   0  0  0  0  0  0  0  0  0  0  0  0
+   30.0510  -43.6230   73.7590 C   0  0  0  0  0  0  0  0  0  0  0  0
+   30.5710  -43.0480   72.8120 O   0  0  0  0  0  0  0  0  0  0  0  0
+   28.6490  -43.2470   74.1530 C   0  0  0  0  0  0  0  0  0  0  0  0
+   27.7000  -44.2290   73.8180 O   0  0  0  0  0  0  0  0  0  0  0  0
+   27.2950  -44.1460   72.4540 C   0  0  0  0  0  0  0  0  0  0  0  0
+  2  1  1  0  0  0  0
+  2  9  2  0  0  0  0
+  3  2  1  0  0  0  0
+  4  3  2  0  0  0  0
+  4  6  1  0  0  0  0
+  5  4  1  0  0  0  0
+  6  7  2  0  0  0  0
+  7  9  1  0  0  0  0
+  7  8  1  0  0  0  0
+ 10  6  1  0  0  0  0
+ 10 11  1  0  0  0  0
+ 12 14  1  0  0  0  0
+ 12 10  1  0  0  0  0
+ 13 12  2  0  0  0  0
+ 15 14  1  0  0  0  0
+ 16 15  1  0  0  0  0
+M  END
+>  <MODEL>
+9
+
+>  <REMARK>
+ VINA RESULT:      -4.3      3.971      6.363
+  Name = 
+  7 active torsions:
+  status: ('A' for Active; 'I' for Inactive)
+    1  A    between atoms: C_1  and  C_5
+    2  A    between atoms: C_2  and  C_12
+    3  A    between atoms: C_2  and  O_15
+    4  A    between atoms: C_3  and  O_15
+    5  A    between atoms: C_4  and  C_7
+    6  A    between atoms: C_8  and  N_13
+    7  A    between atoms: C_9  and  C_11
+                            x       y       z     vdW  Elec       q    Type
+                         _______ _______ _______ _____ _____    ______ ____
+
+>  <TORSDO>
+F 3
+
+>  <SCORE>
+-4.3
+
+>  <RMSD_LB>
+3.971
+
+>  <RMSD_UB>
+6.363
+
+$$$$
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/ligand.tab	Tue Mar 10 12:57:24 2020 -0400
@@ -0,0 +1,10 @@
+Index	RMSD_LB	RMSD_UB	SCORE	SMILES
+0	0.0	0.0	-4.9	[H]N(C(=O)COC)C1C(C)=CC(C)=CC=1C
+1	0.118	2.246	-4.9	[H]N(C(=O)COC)C1C(C)=CC(C)=CC=1C
+2	2.96	5.795	-4.9	[H]N(C(=O)COC)C1C(C)=CC(C)=CC=1C
+3	2.958	5.379	-4.8	[H]N(C(=O)COC)C1C(C)=CC(C)=CC=1C
+4	2.763	5.379	-4.5	[H]N(C(=O)COC)C1C(C)=CC(C)=CC=1C
+5	3.106	4.85	-4.4	[H]N(C(=O)COC)C1C(C)=CC(C)=CC=1C
+6	2.847	5.816	-4.4	[H]N(C(=O)COC)C1C(C)=CC(C)=CC=1C
+7	3.964	5.892	-4.3	[H]N(C(=O)COC)C1C(C)=CC(C)=CC=1C
+8	3.971	6.363	-4.3	[H]N(C(=O)COC)C1C(C)=CC(C)=CC=1C
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/mols.smi	Tue Mar 10 12:57:24 2020 -0400
@@ -0,0 +1,3 @@
+NCCCCC(N)C(=O)O	lysine
+O=C(O)C(N)C	alanine
+N[C@@H](CC1=CC=CC=C1)C(O)=O	phenylanaline
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/rdkit_descriptors_result1.csv	Tue Mar 10 12:57:24 2020 -0400
@@ -0,0 +1,2 @@
+BalabanJ	BertzCT	Chi0	Chi0n	Chi0v	Chi1	Chi1n	Chi1v	Chi2n	Chi2v	Chi3n	Chi3v	Chi4n	Chi4v	EState_VSA1	EState_VSA10	EState_VSA11	EState_VSA2	EState_VSA3	EState_VSA4	EState_VSA5	EState_VSA6	EState_VSA7	EState_VSA8	EState_VSA9	ExactMolWt	FpDensityMorgan1	FpDensityMorgan2	FpDensityMorgan3	FractionCSP3	HallKierAlpha	HeavyAtomCount	HeavyAtomMolWt	Ipc	Kappa1	Kappa2	Kappa3	LabuteASA	MaxAbsEStateIndex	MaxAbsPartialCharge	MaxEStateIndex	MaxPartialCharge	MinAbsEStateIndex	MinAbsPartialCharge	MinEStateIndex	MinPartialCharge	MolLogP	MolMR	MolWt	NHOHCount	NOCount	NumAliphaticCarbocycles	NumAliphaticHeterocycles	NumAliphaticRings	NumAromaticCarbocycles	NumAromaticHeterocycles	NumAromaticRings	NumHAcceptors	NumHDonors	NumHeteroatoms	NumRadicalElectrons	NumRotatableBonds	NumSaturatedCarbocycles	NumSaturatedHeterocycles	NumSaturatedRings	NumValenceElectrons	PEOE_VSA1	PEOE_VSA10	PEOE_VSA11	PEOE_VSA12	PEOE_VSA13	PEOE_VSA14	PEOE_VSA2	PEOE_VSA3	PEOE_VSA4	PEOE_VSA5	PEOE_VSA6	PEOE_VSA7	PEOE_VSA8	PEOE_VSA9	RingCount	SMR_VSA1	SMR_VSA10	SMR_VSA2	SMR_VSA3	SMR_VSA4	SMR_VSA5	SMR_VSA6	SMR_VSA7	SMR_VSA8	SMR_VSA9	SlogP_VSA1	SlogP_VSA10	SlogP_VSA11	SlogP_VSA12	SlogP_VSA2	SlogP_VSA3	SlogP_VSA4	SlogP_VSA5	SlogP_VSA6	SlogP_VSA7	SlogP_VSA8	SlogP_VSA9	TPSA	VSA_EState1	VSA_EState10	VSA_EState2	VSA_EState3	VSA_EState4	VSA_EState5	VSA_EState6	VSA_EState7	VSA_EState8	VSA_EState9	fr_Al_COO	fr_Al_OH	fr_Al_OH_noTert	fr_ArN	fr_Ar_COO	fr_Ar_N	fr_Ar_NH	fr_Ar_OH	fr_COO	fr_COO2	fr_C_O	fr_C_O_noCOO	fr_C_S	fr_HOCCN	fr_Imine	fr_NH0	fr_NH1	fr_NH2	fr_N_O	fr_Ndealkylation1	fr_Ndealkylation2	fr_Nhpyrrole	fr_SH	fr_aldehyde	fr_alkyl_carbamate	fr_alkyl_halide	fr_allylic_oxid	fr_amide	fr_amidine	fr_aniline	fr_aryl_methyl	fr_azide	fr_azo	fr_barbitur	fr_benzene	fr_benzodiazepine	fr_bicyclic	fr_diazo	fr_dihydropyridine	fr_epoxide	fr_ester	fr_ether	fr_furan	fr_guanido	fr_halogen	fr_hdrzine	fr_hdrzone	fr_imidazole	fr_imide	fr_isocyan	fr_isothiocyan	fr_ketone	fr_ketone_Topliss	fr_lactam	fr_lactone	fr_methoxy	fr_morpholine	fr_nitrile	fr_nitro	fr_nitro_arom	fr_nitro_arom_nonortho	fr_nitroso	fr_oxazole	fr_oxime	fr_para_hydroxylation	fr_phenol	fr_phenol_noOrthoHbond	fr_phos_acid	fr_phos_ester	fr_piperdine	fr_piperzine	fr_priamide	fr_prisulfonamd	fr_pyridine	fr_quatN	fr_sulfide	fr_sulfonamd	fr_sulfone	fr_term_acetylene	fr_tetrazole	fr_thiazole	fr_thiocyan	fr_thiophene	fr_unbrch_alkane	fr_urea	qed
+3037	2.370227579270102	503.6108804181844	12.413849083443592	8.821564533342674	10.333422425379583	8.0585506480638	5.008352593120903	5.764281539139358	3.7228452481073373	4.595716809051308	2.463985083856104	2.934179289431582	1.5965258413271721	1.9859262940770028	0.0	10.213054789681411	0.0	11.49902366656781	27.592991233802653	0.0	12.13273413692322	24.26546827384644	0.0	0.0	23.20187978046503	268.00578492	0.7647058823529411	1.1764705882352942	1.588235294117647	0.07692307692307693	-1.38	17	259.04699999999997	6943.445199590422	12.08686679380967	4.861181105580097	2.8426724700782957	109.048439398113	9.68320845930965	0.5076617533400031	9.68320845930965	0.11870889965789788	0.14701436130007584	0.11870889965789788	0.14701436130007584	-0.5076617533400031	3.9954000000000027	69.03960000000004	269.127	2	2	0	0	0	2	0	2	2	2	4	0	2	0	0	0	88	10.213054789681411	11.49902366656781	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	23.20187978046503	47.52510539416365	16.466088250408664	0.0	2	10.213054789681411	23.20187978046503	0.0	0.0	0.0	6.4208216229260096	0.0	57.5703720216463	0.0	11.49902366656781	0.0	0.0	11.49902366656781	23.20187978046503	10.213054789681411	6.4208216229260096	0.0	11.126902983393991	36.39820241076966	10.045266627482652	0.0	0.0	40.46	0.0	11.70886971249405	0.0	0.0	0.0	0.0	0.0	0.0	0.0	32.01335250972817	0	0	0	0	0	0	0	2	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	2	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0.8647127178367139
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/rdkit_descriptors_result1.tab	Tue Mar 10 12:57:24 2020 -0400
@@ -0,0 +1,2 @@
+MoleculeID	BalabanJ	BertzCT	Chi0	Chi0n	Chi0v	Chi1	Chi1n	Chi1v	Chi2n	Chi2v	Chi3n	Chi3v	Chi4n	Chi4v	EState_VSA1	EState_VSA10	EState_VSA11	EState_VSA2	EState_VSA3	EState_VSA4	EState_VSA5	EState_VSA6	EState_VSA7	EState_VSA8	EState_VSA9	ExactMolWt	FpDensityMorgan1	FpDensityMorgan2	FpDensityMorgan3	FractionCSP3	HallKierAlpha	HeavyAtomCount	HeavyAtomMolWt	Ipc	Kappa1	Kappa2	Kappa3	LabuteASA	MaxAbsEStateIndex	MaxAbsPartialCharge	MaxEStateIndex	MaxPartialCharge	MinAbsEStateIndex	MinAbsPartialCharge	MinEStateIndex	MinPartialCharge	MolLogP	MolMR	MolWt	NHOHCount	NOCount	NumAliphaticCarbocycles	NumAliphaticHeterocycles	NumAliphaticRings	NumAromaticCarbocycles	NumAromaticHeterocycles	NumAromaticRings	NumHAcceptors	NumHDonors	NumHeteroatoms	NumRadicalElectrons	NumRotatableBonds	NumSaturatedCarbocycles	NumSaturatedHeterocycles	NumSaturatedRings	NumValenceElectrons	PEOE_VSA1	PEOE_VSA10	PEOE_VSA11	PEOE_VSA12	PEOE_VSA13	PEOE_VSA14	PEOE_VSA2	PEOE_VSA3	PEOE_VSA4	PEOE_VSA5	PEOE_VSA6	PEOE_VSA7	PEOE_VSA8	PEOE_VSA9	RingCount	SMR_VSA1	SMR_VSA10	SMR_VSA2	SMR_VSA3	SMR_VSA4	SMR_VSA5	SMR_VSA6	SMR_VSA7	SMR_VSA8	SMR_VSA9	SlogP_VSA1	SlogP_VSA10	SlogP_VSA11	SlogP_VSA12	SlogP_VSA2	SlogP_VSA3	SlogP_VSA4	SlogP_VSA5	SlogP_VSA6	SlogP_VSA7	SlogP_VSA8	SlogP_VSA9	TPSA	VSA_EState1	VSA_EState10	VSA_EState2	VSA_EState3	VSA_EState4	VSA_EState5	VSA_EState6	VSA_EState7	VSA_EState8	VSA_EState9	fr_Al_COO	fr_Al_OH	fr_Al_OH_noTert	fr_ArN	fr_Ar_COO	fr_Ar_N	fr_Ar_NH	fr_Ar_OH	fr_COO	fr_COO2	fr_C_O	fr_C_O_noCOO	fr_C_S	fr_HOCCN	fr_Imine	fr_NH0	fr_NH1	fr_NH2	fr_N_O	fr_Ndealkylation1	fr_Ndealkylation2	fr_Nhpyrrole	fr_SH	fr_aldehyde	fr_alkyl_carbamate	fr_alkyl_halide	fr_allylic_oxid	fr_amide	fr_amidine	fr_aniline	fr_aryl_methyl	fr_azide	fr_azo	fr_barbitur	fr_benzene	fr_benzodiazepine	fr_bicyclic	fr_diazo	fr_dihydropyridine	fr_epoxide	fr_ester	fr_ether	fr_furan	fr_guanido	fr_halogen	fr_hdrzine	fr_hdrzone	fr_imidazole	fr_imide	fr_isocyan	fr_isothiocyan	fr_ketone	fr_ketone_Topliss	fr_lactam	fr_lactone	fr_methoxy	fr_morpholine	fr_nitrile	fr_nitro	fr_nitro_arom	fr_nitro_arom_nonortho	fr_nitroso	fr_oxazole	fr_oxime	fr_para_hydroxylation	fr_phenol	fr_phenol_noOrthoHbond	fr_phos_acid	fr_phos_ester	fr_piperdine	fr_piperzine	fr_priamide	fr_prisulfonamd	fr_pyridine	fr_quatN	fr_sulfide	fr_sulfonamd	fr_sulfone	fr_term_acetylene	fr_tetrazole	fr_thiazole	fr_thiocyan	fr_thiophene	fr_unbrch_alkane	fr_urea	qed
+3037	2.370228	503.61088	12.413849	8.821565	10.333422	8.058551	5.008353	5.764282	3.722845	4.595717	2.463985	2.934179	1.596526	1.985926	0.0	10.213055	0.0	11.499024	27.592991	0.0	12.132734	24.265468	0.0	0.0	23.20188	268.005785	0.764706	1.176471	1.588235	0.076923	-1.38	17	259.047	6943.4452	12.086867	4.861181	2.842672	109.048439	9.683208	0.507662	9.683208	0.118709	0.147014	0.118709	0.147014	-0.507662	3.9954	69.0396	269.127	2	2	0	0	0	2	0	2	2	2	4	0	2	0	0	0	88	10.213055	11.499024	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	23.20188	47.525105	16.466088	0.0	2	10.213055	23.20188	0.0	0.0	0.0	6.420822	0.0	57.570372	0.0	11.499024	0.0	0.0	11.499024	23.20188	10.213055	6.420822	0.0	11.126903	36.398202	10.045267	0.0	0.0	40.46	0.0	11.70887	0.0	0.0	0.0	0.0	0.0	0.0	0.0	32.013353	0	0	0	0	0	0	0	2	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	2	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0.864713
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/sucos_cluster.sdf	Tue Mar 10 12:57:24 2020 -0400
@@ -0,0 +1,1384 @@
+
+     RDKit          3D
+
+ 19 20  0  0  0  0  0  0  0  0999 V2000
+   25.8690   10.6750   17.9260 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.7660   11.4770   18.5500 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.1650   12.4880   17.8120 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.1480   13.2570   18.3640 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.7300   13.0010   19.6620 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.6190   13.8450   20.2480 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.3280   11.9670   20.4090 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.9000   11.7560   21.6900 O   0  0  0  0  0  0  0  0  0  0  0  0
+   23.1990   10.4520   22.2010 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.3800   10.3250   23.4930 C   0  0  1  0  0  0  0  0  0  0  0  0
+   22.7510    9.1510   24.2170 O   0  0  0  0  0  0  0  0  0  0  0  0
+   22.5930   11.5910   24.3570 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.2540   11.3630   25.7760 N   0  0  0  0  0  0  0  0  0  0  0  0
+   22.5710   12.5910   26.5330 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.1760   12.4110   28.0100 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.7810   12.0710   28.1350 O   0  0  0  0  0  0  0  0  0  0  0  0
+   20.5060   10.8660   27.4060 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.8170   11.0700   25.9210 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.3600   11.2090   19.8480 C   0  0  0  0  0  0  0  0  0  0  0  0
+  2  1  1  0
+  3  2  2  0
+  4  3  1  0
+  5  4  2  0
+  6  5  1  0
+  7  5  1  0
+  8  7  1  0
+  9  8  1  0
+ 10  9  1  0
+ 10 11  1  1
+ 12 10  1  0
+ 13 12  1  0
+ 14 13  1  0
+ 15 14  1  0
+ 16 15  1  0
+ 17 16  1  0
+ 18 17  1  0
+ 18 13  1  0
+ 19  7  2  0
+ 19  2  1  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 11 12  0  0  0  0  0  0  0  0999 V2000
+   22.8090    9.2070   24.2800 N   0  0  0  0  0  0  0  0  0  0  0  0
+   22.4710   10.1080   23.3190 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.8900    9.6340   22.1960 N   0  0  0  0  0  0  0  0  0  0  0  0
+   21.5680   10.5170   21.2440 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.7580   11.8790   21.3690 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.3130   12.3920   22.5320 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.5210   13.7530   22.7260 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.0810   14.2110   23.9020 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.4470   13.3190   24.8860 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.2450   11.9700   24.7110 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.6750   11.4850   23.5440 C   0  0  0  0  0  0  0  0  0  0  0  0
+  2  1  1  0
+  3  2  2  0
+  4  3  1  0
+  5  4  2  0
+  6  5  1  0
+  7  6  2  0
+  8  7  1  0
+  9  8  2  0
+ 10  9  1  0
+ 11  2  1  0
+ 11 10  2  0
+ 11  6  1  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 11 12  0  0  0  0  0  0  0  0999 V2000
+   22.7770    9.1670   24.9740 N   0  0  0  0  0  0  0  0  0  0  0  0
+   22.4280   10.0140   24.0880 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.6770   11.3690   24.2670 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.2930   12.2600   23.2950 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.6430   11.7880   22.1650 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.2220   12.6270   21.1460 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.5740   12.1120   20.0440 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.3400   10.7540   19.9450 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.7580    9.9010   20.9470 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.4090   10.3980   22.0610 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.7960    9.5320   23.0070 N   0  0  0  0  0  0  0  0  0  0  0  0
+  2  1  1  0
+  3  2  2  0
+  4  3  1  0
+  5  4  2  0
+  6  5  1  0
+  7  6  2  0
+  8  7  1  0
+  9  8  2  0
+ 10  9  1  0
+ 10  5  1  0
+ 11 10  2  0
+ 11  2  1  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 15 16  0  0  0  0  0  0  0  0999 V2000
+   22.4510    9.0090   24.4670 N   0  0  0  0  0  0  0  0  0  0  0  0
+   22.5180   10.3550   24.1060 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.9990   11.2350   24.9790 N   0  0  0  0  0  0  0  0  0  0  0  0
+   23.1030   12.5320   24.7160 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.7060   13.0330   23.4860 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.1940   12.1570   22.5380 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.0810   10.8000   22.8500 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.5800    9.9040   21.8960 N   0  0  0  0  0  0  0  0  0  0  0  0
+   21.5550   10.3020   20.4800 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.9570   10.4800   19.9210 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.0930   10.2030   20.6880 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.3650   10.3660   20.1600 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.5090   10.8070   18.8530 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.3830   11.0830   18.0860 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.1090   10.9240   18.6170 C   0  0  0  0  0  0  0  0  0  0  0  0
+  2  1  1  0
+  3  2  2  0
+  4  3  1  0
+  5  4  2  0
+  6  5  1  0
+  7  2  1  0
+  7  6  2  0
+  8  7  1  0
+  9  8  1  0
+ 10  9  1  0
+ 11 10  2  0
+ 12 11  1  0
+ 13 12  2  0
+ 14 13  1  0
+ 15 10  1  0
+ 15 14  2  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 14 15  0  0  0  0  0  0  0  0999 V2000
+   25.2210   12.3240   18.0720 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.2950   10.9960   18.4640 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.3010   10.4520   19.2480 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.2220   11.2280   19.6570 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.1370   10.6280   20.5110 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.4080   10.7370   21.9940 C   0  0  1  0  0  0  0  0  0  0  0  0
+   21.4270    9.8630   22.7750 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.7420    9.8660   24.2600 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.1460    9.4340   24.4920 N   0  0  0  0  0  0  0  0  0  0  0  0
+   24.1030   10.3610   23.8220 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.8510   10.3500   22.3260 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.1570   12.5620   19.2690 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.1500   13.1090   18.4810 C   0  0  0  0  0  0  0  0  0  0  0  0
+   26.1900   12.8500   17.2940 F   0  0  0  0  0  0  0  0  0  0  0  0
+  2  1  2  0
+  3  2  1  0
+  4  3  2  0
+  5  4  1  0
+  6  5  1  6
+  7  6  1  0
+  8  7  1  0
+  9  8  1  0
+ 10  9  1  0
+ 11 10  1  0
+ 11  6  1  0
+ 12  4  1  0
+ 13 12  2  0
+ 13  1  1  0
+ 14  1  1  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 18 20  0  0  0  0  0  0  0  0999 V2000
+   22.7740    9.2060   24.7160 N   0  0  0  0  0  0  0  0  0  0  0  0
+   22.6730   10.1680   23.8290 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.6480   11.5040   24.2160 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.5410   12.4950   23.2640 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.4360   12.1560   21.9280 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.4390   10.8180   21.5470 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.3390   10.4160   20.0980 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.4770    9.5130   19.6670 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.8250   10.1870   19.6920 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.0890   11.2540   18.8350 C   0  0  0  0  0  0  0  0  0  0  0  0
+   26.3260   11.8750   18.8250 C   0  0  0  0  0  0  0  0  0  0  0  0
+   27.3220   11.4120   19.6750 C   0  0  0  0  0  0  0  0  0  0  0  0
+   28.6590   11.7950   19.9160 C   0  0  0  0  0  0  0  0  0  0  0  0
+   29.1750   10.9440   20.8960 C   0  0  0  0  0  0  0  0  0  0  0  0
+   28.2120   10.0690   21.2490 N   0  0  0  0  0  0  0  0  0  0  0  0
+   27.0680   10.3360   20.5270 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.8240    9.7170   20.5400 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.5470    9.8480   22.5050 N   0  0  0  0  0  0  0  0  0  0  0  0
+  2  1  1  0
+  3  2  2  0
+  4  3  1  0
+  5  4  2  0
+  6  5  1  0
+  7  6  1  0
+  8  7  1  0
+  9  8  1  0
+ 10  9  2  0
+ 11 10  1  0
+ 12 11  2  0
+ 13 12  1  0
+ 14 13  2  0
+ 15 14  1  0
+ 16 15  1  0
+ 16 12  1  0
+ 17 16  2  0
+ 17  9  1  0
+ 18  6  2  0
+ 18  2  1  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 21 23  0  0  0  0  0  0  0  0999 V2000
+   22.6900    9.3460   24.4820 N   0  0  0  0  0  0  0  0  0  0  0  0
+   22.7870   10.6500   24.1630 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.0810   11.5110   25.1640 N   0  0  0  0  0  0  0  0  0  0  0  0
+   23.1550   12.8130   24.8620 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.9370   13.3140   23.5950 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.6290   12.4490   22.5700 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.5360   11.0880   22.8330 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.2030   10.1450   21.8580 N   0  0  0  0  0  0  0  0  0  0  0  0
+   21.9100   10.4610   20.4700 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.1110   10.8820   19.6530 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.9310   11.3890   18.3770 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.0150   11.7690   17.6140 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.2920   11.6680   18.1200 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.5080   11.1670   19.3990 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.4040   10.7800   20.1590 C   0  0  0  0  0  0  0  0  0  0  0  0
+   26.8870   11.0930   19.9590 C   0  0  0  0  0  0  0  0  0  0  0  0
+   27.8330   12.0650   19.6660 C   0  0  0  0  0  0  0  0  0  0  0  0
+   29.0910   11.9730   20.2180 C   0  0  0  0  0  0  0  0  0  0  0  0
+   29.3740   10.9330   21.0780 C   0  0  0  0  0  0  0  0  0  0  0  0
+   28.4890    9.9800   21.3850 N   0  0  0  0  0  0  0  0  0  0  0  0
+   27.2660   10.0830   20.8440 C   0  0  0  0  0  0  0  0  0  0  0  0
+  2  1  1  0
+  3  2  2  0
+  4  3  1  0
+  5  4  2  0
+  6  5  1  0
+  7  2  1  0
+  7  6  2  0
+  8  7  1  0
+  9  8  1  0
+ 10  9  1  0
+ 11 10  2  0
+ 12 11  1  0
+ 13 12  2  0
+ 14 13  1  0
+ 15 10  1  0
+ 15 14  2  0
+ 16 14  1  0
+ 17 16  2  0
+ 18 17  1  0
+ 19 18  2  0
+ 20 19  1  0
+ 21 16  1  0
+ 21 20  2  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 20 21  0  0  0  0  0  0  0  0999 V2000
+   21.2480   11.2160   24.5450 C   0  0  1  0  0  0  0  0  0  0  0  0
+   21.1020   11.0880   25.9790 N   0  0  0  0  0  0  0  0  0  0  0  0
+   20.1520   11.7400   26.6430 C   0  0  0  0  0  0  0  0  0  0  0  0
+   19.2750   12.3940   26.0980 O   0  0  0  0  0  0  0  0  0  0  0  0
+   20.2050   11.6230   28.1500 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.1270   12.9990   28.8020 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.9520   13.0380   30.0790 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.6540   13.4720   29.6460 S   0  0  0  0  0  0  0  0  0  0  0  0
+   22.7090   11.4410   24.1690 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.8180   11.5780   22.6520 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.3510   10.3050   22.0930 N   0  0  0  0  0  0  0  0  0  0  0  0
+   20.9200   10.1140   22.3280 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.7360    9.9660   23.8360 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.5750   10.2440   20.6540 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.9890   10.6020   20.2540 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.0820    9.9220   20.7960 C   0  0  0  0  0  0  0  0  0  0  0  0
+   26.3780   10.2710   20.4140 C   0  0  0  0  0  0  0  0  0  0  0  0
+   26.5780   11.2950   19.4850 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.4840   11.9720   18.9430 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.1890   11.6250   19.3240 C   0  0  0  0  0  0  0  0  0  0  0  0
+  1  2  1  1
+  3  2  1  0
+  4  3  2  0
+  5  3  1  0
+  6  5  1  0
+  7  6  1  0
+  8  7  1  0
+  9  1  1  0
+ 10  9  1  0
+ 11 10  1  0
+ 12 11  1  0
+ 13 12  1  0
+ 13  1  1  0
+ 14 11  1  0
+ 15 14  1  0
+ 16 15  2  0
+ 17 16  1  0
+ 18 17  2  0
+ 19 18  1  0
+ 20 15  1  0
+ 20 19  2  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 20 21  0  0  0  0  0  0  0  0999 V2000
+   23.0110   10.6350   19.8150 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.2670   11.1650   19.1280 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.2960   11.1360   20.1630 N   0  0  0  0  0  0  0  0  0  0  0  0
+   24.9890   12.0920   21.2290 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.7420   11.5350   21.9210 C   0  0  2  0  0  0  0  0  0  0  0  0
+   22.6410   11.4290   20.9740 N   0  0  0  0  0  0  0  0  0  0  0  0
+   26.6000   11.4040   19.5610 C   0  0  0  0  0  0  0  0  0  0  0  0
+   27.7300   10.8900   20.4300 C   0  0  0  0  0  0  0  0  0  0  0  0
+   27.6290    9.6500   21.0680 C   0  0  0  0  0  0  0  0  0  0  0  0
+   28.6700    9.1850   21.8700 C   0  0  0  0  0  0  0  0  0  0  0  0
+   29.8180    9.9600   22.0270 C   0  0  0  0  0  0  0  0  0  0  0  0
+   29.9260   11.1970   21.3880 C   0  0  0  0  0  0  0  0  0  0  0  0
+   28.8800   11.6630   20.5900 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.3760   12.3720   23.1130 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.0930   12.1770   24.2210 N   0  0  0  0  0  0  0  0  0  0  0  0
+   22.4610   13.1780   23.0440 O   0  0  0  0  0  0  0  0  0  0  0  0
+   23.8850   12.9460   25.4360 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.7100   14.2290   25.4520 C   0  0  0  0  0  0  0  0  0  0  0  0
+   26.3830   13.8570   26.0370 S   0  0  0  0  0  0  0  0  0  0  0  0
+   30.8240    9.5080   22.7950 F   0  0  0  0  0  0  0  0  0  0  0  0
+  2  1  1  0
+  3  2  1  0
+  4  3  1  0
+  5  4  1  0
+  6  1  1  0
+  6  5  1  0
+  7  3  1  0
+  8  7  1  0
+  9  8  2  0
+ 10  9  1  0
+ 11 10  2  0
+ 12 11  1  0
+ 13  8  1  0
+ 13 12  2  0
+  5 14  1  1
+ 15 14  1  0
+ 16 14  2  0
+ 17 15  1  0
+ 18 17  1  0
+ 19 18  1  0
+ 20 11  1  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 10 10  0  0  0  0  0  0  0  0999 V2000
+   24.4730   11.1990   19.8620 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.5530   12.0600   20.0930 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.9840   11.0460   18.5670 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.8330   10.4330   20.9970 C   0  0  0  0  0  0  0  0  0  0  0  0
+   26.1360   12.7690   19.0380 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.5550   11.7420   17.5050 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.3160   10.6870   21.0270 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.6290   12.6010   17.7470 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.6740   10.0940   22.2270 N   0  0  0  0  0  0  0  0  0  0  0  0
+   26.1850   13.2880   16.6940 O   0  0  0  0  0  0  0  0  0  0  0  0
+  2  1  2  0
+  3  1  1  0
+  4  1  1  0
+  5  2  1  0
+  6  3  2  0
+  7  4  1  0
+  8  6  1  0
+  8  5  2  0
+  9  7  1  0
+ 10  8  1  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 11 11  0  0  0  0  0  0  0  0999 V2000
+   23.8350   12.2020   19.5760 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.4520   11.9220   18.2610 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.0420   12.8700   19.8340 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.9370   11.8100   20.7250 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.2680   12.2940   17.1940 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.8750   13.2520   18.7790 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.8350   10.2970   20.9620 C   0  0  1  0  0  0  0  0  0  0  0  0
+   25.4680   12.9560   17.4710 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.1570    9.7480   21.5040 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.7030    9.9910   21.9220 N   0  0  0  0  0  0  0  0  0  0  0  0
+   26.2630   13.3220   16.4230 O   0  0  0  0  0  0  0  0  0  0  0  0
+  2  1  2  0
+  3  1  1  0
+  4  1  1  0
+  5  2  1  0
+  6  3  2  0
+  7  4  1  0
+  8  6  1  0
+  8  5  2  0
+  7  9  1  1
+ 10  7  1  0
+ 11  8  1  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 12 12  0  0  0  0  0  0  0  0999 V2000
+   26.5880   11.6480   19.1670 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.9260   11.0670   20.2530 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.8770   11.8420   17.9690 C   0  0  0  0  0  0  0  0  0  0  0  0
+   28.0300   12.0720   19.2730 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.5820   10.6900   20.1310 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.5420   11.4720   17.8340 C   0  0  0  0  0  0  0  0  0  0  0  0
+   26.4990   12.4120   16.8870 O   0  0  0  0  0  0  0  0  0  0  0  0
+   28.9860   10.8940   19.5000 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.8950   10.8910   18.9250 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.8700   10.0590   21.2980 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.8110   11.0000   21.8820 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.6380   10.2010   22.3970 N   0  0  0  0  0  0  0  0  0  0  0  0
+  2  1  2  0
+  3  1  1  0
+  4  1  1  0
+  5  2  1  0
+  6  3  2  0
+  7  3  1  0
+  8  4  1  0
+  9  5  2  0
+  9  6  1  0
+ 10  5  1  0
+ 11 10  1  0
+ 12 11  1  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 16 17  0  0  0  0  0  0  0  0999 V2000
+   26.3090   11.5670   19.1200 C   0  0  0  0  0  0  0  0  0  0  0  0
+   27.7750   11.8580   19.3620 C   0  0  1  0  0  0  0  0  0  0  0  0
+   25.5460   10.8930   20.0800 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.6820   11.9660   17.9260 C   0  0  0  0  0  0  0  0  0  0  0  0
+   27.9150   13.1100   20.2510 C   0  0  0  0  0  0  0  0  0  0  0  0
+   28.4910   10.6030   19.9180 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.1900   10.6200   19.8540 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.3290   11.7060   17.6830 C   0  0  0  0  0  0  0  0  0  0  0  0
+   26.3920   12.6330   16.9610 O   0  0  0  0  0  0  0  0  0  0  0  0
+   29.3630   13.3270   20.6990 C   0  0  0  0  0  0  0  0  0  0  0  0
+   29.8080   10.8590   20.6700 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.5890   11.0260   18.6540 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.3960    9.8840   20.9090 C   0  0  0  0  0  0  0  0  0  0  0  0
+   29.7810   12.1210   21.5440 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.0220   10.5180   21.1760 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.2950    9.8120   22.2580 N   0  0  0  0  0  0  0  0  0  0  0  0
+  2  1  1  1
+  3  1  2  0
+  4  1  1  0
+  5  2  1  0
+  6  2  1  0
+  7  3  1  0
+  8  4  2  0
+  9  4  1  0
+ 10  5  1  0
+ 11  6  1  0
+ 12  7  2  0
+ 12  8  1  0
+ 13  7  1  0
+ 14 11  1  0
+ 14 10  1  0
+ 15 13  1  0
+ 16 15  1  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 11 11  0  0  0  0  0  0  0  0999 V2000
+   22.7740   12.1470   21.7380 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.7850   10.8240   21.5130 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.6560   12.6100   23.1270 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.6870    9.8820   22.6510 N   0  0  0  0  0  0  0  0  0  0  0  0
+   22.5650   11.6780   24.1480 N   0  0  0  0  0  0  0  0  0  0  0  0
+   22.5850   10.3170   23.8760 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.4960    9.4180   24.9130 N   0  0  0  0  0  0  0  0  0  0  0  0
+   22.9020   10.2670   20.1120 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.2600   10.6130   19.4990 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.3490   10.0260   18.0880 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.6380   13.7910   23.3840 O   0  0  0  0  0  0  0  0  0  0  0  0
+  2  1  2  0
+  3  1  1  0
+  4  2  1  0
+  5  3  1  0
+  6  4  2  0
+  6  5  1  0
+  7  6  1  0
+  8  2  1  0
+  9  8  1  0
+ 10  9  1  0
+ 11  3  2  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 16 18  0  0  0  0  0  0  0  0999 V2000
+   19.9510   12.4320   19.9980 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.0820   11.0800   19.7160 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.2110   12.9210   21.2780 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.4730   10.2080   20.7160 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.6070   12.0470   22.2840 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.7310   10.6920   21.9840 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.8690   12.5020   23.5750 N   0  0  0  0  0  0  0  0  0  0  0  0
+   21.1210    9.8120   22.9630 N   0  0  0  0  0  0  0  0  0  0  0  0
+   21.2630   11.6100   24.5730 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.3860   10.2600   24.2390 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.5170   12.0970   25.8880 N   0  0  0  0  0  0  0  0  0  0  0  0
+   21.7700    9.2670   25.1440 N   0  0  0  0  0  0  0  0  0  0  0  0
+   20.6720   13.9160   27.1880 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.3000   12.6550   27.9160 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.7880   13.5100   26.2340 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.8880   11.5200   27.1000 C   0  0  0  0  0  0  0  0  0  0  0  0
+  2  1  2  0
+  3  1  1  0
+  4  2  1  0
+  5  3  2  0
+  6  4  2  0
+  6  5  1  0
+  7  5  1  0
+  8  6  1  0
+  9  7  2  0
+ 10  8  2  0
+ 10  9  1  0
+ 11  9  1  0
+ 12 10  1  0
+ 14 13  1  0
+ 15 13  1  0
+ 15 11  1  0
+ 16 11  1  0
+ 16 14  1  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 22 25  0  0  0  0  0  0  0  0999 V2000
+   24.9160   11.0760   18.2400 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.3310   13.0460   22.3540 N   0  0  0  0  0  0  0  0  0  0  0  0
+   23.6000   11.5170   18.1200 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.6100   11.1450   23.7870 N   0  0  0  0  0  0  0  0  0  0  0  0
+   22.7140   11.3770   19.1920 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.4280    9.4120   22.3750 N   0  0  0  0  0  0  0  0  0  0  0  0
+   23.1210   10.7880   20.4100 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.7070    8.9480   24.6890 N   0  0  0  0  0  0  0  0  0  0  0  0
+   24.4530   10.3520   20.5060 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.3350   10.4940   19.4320 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.1050   10.6670   21.5590 C   0  0  2  0  0  0  0  0  0  0  0  0
+   22.2560   11.7850   22.6300 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.7070   13.9200   23.4860 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.4360   13.2790   24.8580 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.1080   11.9120   24.9130 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.5860    9.7850   23.6220 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.6480   10.5560   21.0790 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.2500    9.4650   20.2890 C   0  0  0  0  0  0  0  0  0  0  0  0
+   18.9360    9.3320   19.8430 C   0  0  0  0  0  0  0  0  0  0  0  0
+   17.9950   10.2990   20.1770 C   0  0  0  0  0  0  0  0  0  0  0  0
+   18.3670   11.3850   20.9630 C   0  0  0  0  0  0  0  0  0  0  0  0
+   19.6840   11.5160   21.4080 C   0  0  0  0  0  0  0  0  0  0  0  0
+  3  1  2  0
+  5  3  1  0
+  7  5  2  0
+  9  7  1  0
+ 10  9  2  0
+ 10  1  1  0
+ 11  7  1  6
+ 11  6  1  0
+ 12 11  1  0
+ 12  4  1  0
+ 12  2  2  0
+ 13  2  1  0
+ 14 13  1  0
+ 15 14  1  0
+ 15  4  1  0
+ 16  8  1  0
+ 16  6  2  0
+ 16  4  1  0
+ 17 11  1  0
+ 18 17  2  0
+ 19 18  1  0
+ 20 19  2  0
+ 21 20  1  0
+ 22 17  1  0
+ 22 21  2  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 17 17  0  0  0  0  0  0  0  0999 V2000
+   23.0570   13.6990   19.0590 Cl  0  0  0  0  0  0  0  0  0  0  0  0
+   24.3800   11.5110   19.9730 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.3810    9.0730   24.4570 N   0  0  0  0  0  0  0  0  0  0  0  0
+   25.4910   12.0840   19.3370 O   0  0  0  0  0  0  0  0  0  0  0  0
+   20.3420   10.7790   23.4160 S   0  0  0  0  0  0  0  0  0  0  0  0
+   24.4650   10.2680   20.6830 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.7190   11.1360   25.5420 N   0  0  0  0  0  0  0  0  0  0  0  0
+   23.3180    9.7250   21.3300 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.0710   10.4120   21.2730 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.9780   11.6500   20.5700 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.1280   12.1890   19.9260 C   0  0  0  0  0  0  0  0  0  0  0  0
+   26.6060   11.2010   19.1770 C   0  0  0  0  0  0  0  0  0  0  0  0
+   27.7570   11.6720   20.0630 C   0  0  0  0  0  0  0  0  0  0  0  0
+   28.5900   10.5000   20.5480 C   0  0  0  0  0  0  0  0  0  0  0  0
+   29.4190   10.8450   21.7890 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.8490    9.8150   21.9440 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.5960   10.2440   24.5410 C   0  0  0  0  0  0  0  0  0  0  0  0
+  4  2  1  0
+  6  2  2  0
+  8  6  1  0
+  9  8  2  0
+ 10  9  1  0
+ 11 10  2  0
+ 11  2  1  0
+ 11  1  1  0
+ 12  4  1  0
+ 13 12  1  0
+ 14 13  1  0
+ 15 14  1  0
+ 16  5  1  0
+ 16  9  1  0
+ 17  5  1  0
+ 17  7  1  0
+ 17  3  2  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 16 17  0  0  0  0  0  0  0  0999 V2000
+   20.7710   13.9090   17.3950 Cl  0  0  0  0  0  0  0  0  0  0  0  0
+   21.5990   12.4190   25.6060 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.0370   11.1510   25.4210 N   0  0  0  0  0  0  0  0  0  0  0  0
+   21.8530   10.4770   24.2500 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.3090    9.2030   24.1450 N   0  0  0  0  0  0  0  0  0  0  0  0
+   21.1930   11.0810   23.1610 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.7230   12.4090   23.3300 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.9220   13.0940   24.5570 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.9870   10.3560   21.8360 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.3000   10.3030   20.9850 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.5580   11.6070   20.2350 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.7250   12.3660   20.5390 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.9740   13.5980   19.8680 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.0570   14.0730   18.8890 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.8900   13.3170   18.5790 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.6410   12.0820   19.2490 C   0  0  0  0  0  0  0  0  0  0  0  0
+  3  2  2  0
+  4  3  1  0
+  5  4  1  0
+  6  4  2  0
+  7  6  1  0
+  8  7  2  0
+  8  2  1  0
+  9  6  1  0
+ 10  9  1  0
+ 11 10  1  0
+ 12 11  2  0
+ 13 12  1  0
+ 14 13  2  0
+ 15  1  1  0
+ 15 14  1  0
+ 16 15  2  0
+ 16 11  1  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 17 18  0  0  0  0  0  0  0  0999 V2000
+   25.3290   10.4220   19.4450 Cl  0  0  0  0  0  0  0  0  0  0  0  0
+   21.8630   10.2850   24.5540 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.7910   10.8780   25.7630 N   0  0  0  0  0  0  0  0  0  0  0  0
+   19.3810   12.4340   23.7140 O   0  0  0  0  0  0  0  0  0  0  0  0
+   20.2730   11.7550   24.2280 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.9910   10.7760   23.6530 N   0  0  0  0  0  0  0  0  0  0  0  0
+   20.7520   11.8870   25.6690 C   0  0  1  0  0  0  0  0  0  0  0  0
+   22.7100    9.3050   24.2610 N   0  0  0  0  0  0  0  0  0  0  0  0
+   19.5480   11.5280   26.5490 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.3220   13.3140   25.8640 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.8570   10.3260   22.2690 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.8180   11.0860   21.3800 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.5520   12.4460   21.0380 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.4570   13.1680   20.2040 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.6300   12.5320   19.7130 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.9010   11.1800   20.0500 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.9980   10.4540   20.8840 C   0  0  0  0  0  0  0  0  0  0  0  0
+  3  2  1  0
+  5  4  2  0
+  6  5  1  0
+  6  2  1  0
+  7  3  1  0
+  7  5  1  0
+  8  2  2  0
+  7  9  1  1
+ 10  7  1  0
+ 11  6  1  0
+ 12 11  1  0
+ 13 12  2  0
+ 14 13  1  0
+ 15 14  2  0
+ 16  1  1  0
+ 16 15  1  0
+ 17 16  2  0
+ 17 12  1  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 20 21  0  0  0  0  0  0  0  0999 V2000
+   18.0360   15.1780   25.0870 Cl  0  0  0  0  0  0  0  0  0  0  0  0
+   22.1580    9.9560   23.5460 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.7380    9.4450   22.3670 N   0  0  0  0  0  0  0  0  0  0  0  0
+   21.3070   12.9370   22.1820 O   0  0  0  0  0  0  0  0  0  0  0  0
+   21.5180   11.7630   22.4850 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.0160   11.2920   23.6430 N   0  0  0  0  0  0  0  0  0  0  0  0
+   21.2400   10.5640   21.5800 C   0  0  1  0  0  0  0  0  0  0  0  0
+   22.6590    9.2240   24.5370 N   0  0  0  0  0  0  0  0  0  0  0  0
+   22.0010   10.7000   20.2550 C   0  0  0  0  0  0  0  0  0  0  0  0
+   19.7110   10.4760   21.4070 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.3150   12.0980   24.8270 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.0470   12.4840   25.5530 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.6470   11.7740   26.7230 C   0  0  0  0  0  0  0  0  0  0  0  0
+   19.4310   12.1180   27.3830 C   0  0  0  0  0  0  0  0  0  0  0  0
+   18.6170   13.1760   26.8780 C   0  0  0  0  0  0  0  0  0  0  0  0
+   19.0220   13.8920   25.7120 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.2380   13.5470   25.0530 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.3110    9.9210   20.9010 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.0210   11.7480   19.1870 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.4670   11.0980   20.4450 C   0  0  1  0  0  0  0  0  0  0  0  0
+  3  2  1  0
+  5  4  2  0
+  6  5  1  0
+  6  2  1  0
+  7  3  1  0
+  7  5  1  0
+  8  2  2  0
+  9  7  1  0
+  7 10  1  6
+ 11  6  1  0
+ 12 11  1  0
+ 13 12  2  0
+ 14 13  1  0
+ 15 14  2  0
+ 16 15  1  0
+ 16  1  1  0
+ 17 16  2  0
+ 17 12  1  0
+ 20 18  1  6
+ 20  9  1  0
+ 20 19  1  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 15 16  0  0  0  0  0  0  0  0999 V2000
+   18.6370   11.5460   19.0470 Cl  0  0  0  0  0  0  0  0  0  0  0  0
+   19.3410   11.4910   20.6100 C   0  0  0  0  0  0  0  0  0  0  0  0
+   19.1300   12.5410   21.5090 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.1120   10.3920   20.9640 C   0  0  0  0  0  0  0  0  0  0  0  0
+   19.7080   12.5060   22.7780 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.6710   10.3800   22.2200 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.4820   11.4070   23.1080 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.4530    9.4460   22.7560 N   0  0  0  0  0  0  0  0  0  0  0  0
+   21.7320    9.9040   23.9840 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.1510   11.1000   24.2190 N   0  0  0  0  0  0  0  0  0  0  0  0
+   22.5310    9.1910   24.8790 N   0  0  0  0  0  0  0  0  0  0  0  0
+   21.2170   11.9110   25.4550 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.4620   11.2450   26.6090 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.0350   11.5770   27.9760 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.9480   12.9640   28.2400 O   0  0  0  0  0  0  0  0  0  0  0  0
+  2  1  1  0
+  3  2  2  0
+  4  2  1  0
+  5  3  1  0
+  6  4  2  0
+  7  6  1  0
+  7  5  2  0
+  8  6  1  0
+  9  8  2  0
+ 10  9  1  0
+ 10  7  1  0
+ 11  9  1  0
+ 12 10  1  0
+ 13 12  1  0
+ 14 13  1  0
+ 15 14  1  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 16 18  0  0  0  0  0  0  0  0999 V2000
+   20.6710   12.3670   19.5500 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.3560   11.0080   19.5110 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.7970   10.1550   20.5260 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.5490   10.6510   21.5910 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.8550   12.0130   21.6470 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.4090   12.8650   20.6370 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.2040   13.2140   18.5400 C   0  0  0  0  0  0  0  0  0  0  0  0
+   18.9460   13.0790   18.0310 C   0  0  0  0  0  0  0  0  0  0  0  0
+   19.8500   14.9600   16.8550 S   0  0  0  0  0  0  0  0  0  0  0  0
+   20.8860   14.2450   18.0080 C   0  0  0  0  0  0  0  0  0  0  0  0
+   18.5460   13.9340   17.0770 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.9520    9.8170   22.5630 N   0  0  0  0  0  0  0  0  0  0  0  0
+   22.6670   10.2610   23.6190 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.0100   11.6160   23.7210 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.5970   12.5050   22.7210 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.0640    9.3990   24.5550 N   0  0  0  0  0  0  0  0  0  0  0  0
+  2  1  2  0
+  3  2  1  0
+  4  3  2  0
+  5  4  1  0
+  6  1  1  0
+  6  5  2  0
+  7  1  1  0
+  8  7  1  0
+ 10  9  1  0
+ 10  7  2  0
+ 11  9  1  0
+ 11  8  2  0
+ 12  4  1  0
+ 13 12  2  0
+ 14 13  1  0
+ 15  5  1  0
+ 15 14  2  0
+ 16 13  1  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 14 16  0  0  0  0  0  0  0  0999 V2000
+   22.5850   11.1260   22.4670 C   0  0  1  0  0  0  0  0  0  0  0  0
+   22.4650   13.2910   21.5170 N   0  0  0  0  0  0  0  0  0  0  0  0
+   21.5180   12.9300   23.6420 O   0  0  0  0  0  0  0  0  0  0  0  0
+   23.1760   11.1930   21.1020 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.7650    9.4680   24.1810 N   0  0  0  0  0  0  0  0  0  0  0  0
+   22.1720   12.5670   22.6700 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.3450   10.2690   22.4850 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.5010   10.6150   23.5600 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.0740   12.4520   20.5910 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.7590   10.2030   20.3680 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.3310    9.5780   23.8310 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.5150   12.7690   19.3280 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.2170   10.4950   19.0970 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.1050   11.7710   18.5900 C   0  0  0  0  0  0  0  0  0  0  0  0
+  4  1  1  0
+  6  3  2  0
+  6  2  1  0
+  6  1  1  0
+  1  7  1  6
+  8  5  1  0
+  8  1  1  0
+  9  4  2  0
+  9  2  1  0
+ 10  4  1  0
+ 11  7  1  0
+ 11  5  1  0
+ 12  9  1  0
+ 13 10  2  0
+ 14 13  1  0
+ 14 12  2  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 18 20  0  0  0  0  0  0  0  0999 V2000
+   23.0640   11.1570   21.0690 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.4100   11.1460   22.4090 C   0  0  1  0  0  0  0  0  0  0  0  0
+   23.7250   10.1530   20.4050 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.1600   10.2940   22.4950 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.2690   10.4280   19.1660 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.5300   12.6970   19.2960 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.1960    9.6620   23.8710 C   0  0  2  0  0  0  0  0  0  0  0  0
+   24.1850   11.6950   18.6250 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.4560   10.4360   24.9320 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.6380    9.6050   24.2420 N   0  0  0  0  0  0  0  0  0  0  0  0
+   19.1900   10.7600   24.5760 O   0  0  0  0  0  0  0  0  0  0  0  0
+   20.9280   10.7000   26.0230 O   0  0  0  0  0  0  0  0  0  0  0  0
+   23.3740   10.6570   23.4730 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.0160   12.5960   22.5760 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.3890   13.0490   23.5280 O   0  0  0  0  0  0  0  0  0  0  0  0
+   22.3330   13.2670   21.4050 N   0  0  0  0  0  0  0  0  0  0  0  0
+   22.9950   12.4010   20.5240 C   0  0  0  0  0  0  0  0  0  0  0  0
+   18.6260   11.5710   25.6030 C   0  0  0  0  0  0  0  0  0  0  0  0
+  2  1  1  0
+  3  1  2  0
+  2  4  1  6
+  5  3  1  0
+  7  4  1  0
+  8  5  2  0
+  8  6  1  0
+  7  9  1  1
+ 10  7  1  0
+ 11  9  1  0
+ 12  9  2  0
+ 13 10  1  0
+ 13  2  1  0
+ 14  2  1  0
+ 15 14  2  0
+ 16 14  1  0
+ 17 16  1  0
+ 17  6  2  0
+ 17  1  1  0
+ 18 11  1  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 18 20  0  0  0  0  0  0  0  0999 V2000
+   22.3040   13.8190   23.2020 O   0  0  0  0  0  0  0  0  0  0  0  0
+   22.1100   12.5920   23.0660 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.6750    9.8630   22.7290 N   0  0  0  0  0  0  0  0  0  0  0  0
+   21.3470   12.1200   21.9960 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.6540   11.6650   23.9910 N   0  0  0  0  0  0  0  0  0  0  0  0
+   21.1410   10.7430   21.8240 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.9440    9.3390   24.6410 N   0  0  0  0  0  0  0  0  0  0  0  0
+   22.4280   10.2710   23.7860 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.4620   12.1740   25.1070 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.3110   10.2350   20.6900 C   0  0  2  0  0  0  0  0  0  0  0  0
+   20.9600   10.1290   19.2970 C   0  0  2  0  0  0  0  0  0  0  0  0
+   22.4150   10.4540   19.2140 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.8520   11.5900   18.5210 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.2190   11.8770   18.4460 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.1550   11.0300   19.0380 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.7320    9.8880   19.7220 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.3660    9.6010   19.7990 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.0560   11.3180   19.6320 C   0  0  0  0  0  0  0  0  0  0  0  0
+  2  1  2  0
+  4  2  1  0
+  5  2  1  0
+  6  3  1  0
+  6  4  2  0
+  8  3  2  0
+  8  7  1  0
+  8  5  1  0
+  9  5  1  0
+ 10  6  1  1
+ 11 10  1  0
+ 11 12  1  1
+ 13 12  2  0
+ 14 13  1  0
+ 15 14  2  0
+ 16 15  1  0
+ 17 16  2  0
+ 17 12  1  0
+ 18 11  1  0
+ 18 10  1  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 18 19  0  0  0  0  0  0  0  0999 V2000
+   21.7710   13.6180   23.3780 O   0  0  0  0  0  0  0  0  0  0  0  0
+   20.4480    9.9120   20.6830 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.9580    9.7750   22.5930 N   0  0  0  0  0  0  0  0  0  0  0  0
+   21.4410   10.6590   21.5600 C   0  0  2  0  0  0  0  0  0  0  0  0
+   22.8560    9.3660   24.5700 N   0  0  0  0  0  0  0  0  0  0  0  0
+   22.4110   10.2380   23.6760 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.4690   11.5700   23.9630 N   0  0  0  0  0  0  0  0  0  0  0  0
+   23.3020   12.1300   25.0250 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.7010   12.4110   23.2450 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.7420   11.8240   22.2460 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.5740   11.2210   20.6840 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.6120   10.1510   20.3330 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.8600   10.7440   19.7070 C   0  0  0  0  0  0  0  0  0  0  0  0
+   26.0870   10.6220   20.3550 C   0  0  0  0  0  0  0  0  0  0  0  0
+   27.2630   11.1540   19.8110 C   0  0  0  0  0  0  0  0  0  0  0  0
+   27.2020   11.8150   18.5900 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.9830   11.9410   17.9220 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.8150   11.4010   18.4810 C   0  0  0  0  0  0  0  0  0  0  0  0
+  4  2  1  6
+  4  3  1  0
+  6  5  1  0
+  6  3  2  0
+  7  6  1  0
+  8  7  1  0
+  9  1  2  0
+  9  7  1  0
+ 10  4  1  0
+ 10  9  1  0
+ 11  4  1  0
+ 12 11  1  0
+ 13 12  1  0
+ 14 13  2  0
+ 15 14  1  0
+ 16 15  2  0
+ 17 16  1  0
+ 18 13  1  0
+ 18 17  2  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 19 21  0  0  0  0  0  0  0  0999 V2000
+   22.0940   13.5060   22.6730 O   0  0  0  0  0  0  0  0  0  0  0  0
+   20.3830    9.5620   20.6190 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.1270    9.6730   22.3260 N   0  0  0  0  0  0  0  0  0  0  0  0
+   21.4940   10.3980   21.2350 C   0  0  2  0  0  0  0  0  0  0  0  0
+   22.6380    9.3820   24.4820 N   0  0  0  0  0  0  0  0  0  0  0  0
+   22.3980   10.1870   23.4480 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.5000   11.5100   23.6070 N   0  0  0  0  0  0  0  0  0  0  0  0
+   23.2840   12.0670   24.7040 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.8820   12.3070   22.7230 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.9130   11.7030   21.7420 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.5070   10.7290   20.1430 C   0  0  1  0  0  0  0  0  0  0  0  0
+   23.9330   10.4550   20.6120 C   0  0  1  0  0  0  0  0  0  0  0  0
+   23.2540    9.4980   19.6400 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.8290   11.4040   19.9200 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.8820   11.4350   18.5320 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.7300   12.3320   17.8960 C   0  0  0  0  0  0  0  0  0  0  0  0
+   26.5150   13.2000   18.6430 C   0  0  0  0  0  0  0  0  0  0  0  0
+   26.4580   13.1710   20.0290 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.6130   12.2730   20.6690 C   0  0  0  0  0  0  0  0  0  0  0  0
+  4  2  1  6
+  4  3  1  0
+  6  5  1  0
+  6  3  2  0
+  7  6  1  0
+  8  7  1  0
+  9  7  1  0
+  9  1  2  0
+ 10  4  1  0
+ 10  9  1  0
+ 11  4  1  0
+ 12 11  1  0
+ 13 12  1  0
+ 11 13  1  6
+ 12 14  1  6
+ 15 14  2  0
+ 16 15  1  0
+ 17 16  2  0
+ 18 17  1  0
+ 19 18  2  0
+ 19 14  1  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 16 17  0  0  0  0  0  0  0  0999 V2000
+   21.3640   10.5720   21.8100 C   0  0  1  0  0  0  0  0  0  0  0  0
+   22.5260   10.7940   20.8840 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.7650    9.7570   22.9510 N   0  0  0  0  0  0  0  0  0  0  0  0
+   20.8520   11.9280   22.2760 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.2790    9.8280   21.0370 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.8090   10.3570   21.2290 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.3130   11.4350   19.6600 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.4050   10.1940   23.9570 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.0020   12.7140   22.8990 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.8880   10.5560   20.3660 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.3940   11.6280   18.7960 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.6430   11.8420   24.2920 S   0  0  0  0  0  0  0  0  0  0  0  0
+   22.9320    9.2680   24.7800 N   0  0  0  0  0  0  0  0  0  0  0  0
+   24.6750   11.1950   19.1430 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.7040   11.4130   18.2580 O   0  0  0  0  0  0  0  0  0  0  0  0
+   27.1050   11.3380   18.6380 C   0  0  0  0  0  0  0  0  0  0  0  0
+  2  1  1  0
+  3  1  1  0
+  4  1  1  0
+  1  5  1  6
+  6  2  2  0
+  7  2  1  0
+  8  3  2  0
+  9  4  1  0
+ 10  6  1  0
+ 11  7  2  0
+ 12  8  1  0
+ 12  9  1  0
+ 13  8  1  0
+ 14 10  2  0
+ 14 11  1  0
+ 15 14  1  0
+ 16 15  1  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 20 22  0  0  0  0  0  0  0  0999 V2000
+   21.9670   12.1590   22.5710 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.0870    9.7810   22.3570 N   0  0  0  0  0  0  0  0  0  0  0  0
+   21.7990   13.3470   22.3700 O   0  0  0  0  0  0  0  0  0  0  0  0
+   21.7250   10.9910   21.5730 C   0  0  1  0  0  0  0  0  0  0  0  0
+   22.4050   11.6040   23.7520 N   0  0  0  0  0  0  0  0  0  0  0  0
+   22.4510   10.1860   23.5940 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.8260    9.3810   24.5860 N   0  0  0  0  0  0  0  0  0  0  0  0
+   22.7290   12.3950   24.9450 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.2460   10.8230   21.1770 C   0  0  0  0  0  0  0  0  0  0  0  0
+   19.8630    9.8830   20.2250 C   0  0  0  0  0  0  0  0  0  0  0  0
+   18.5290    9.7390   19.8610 C   0  0  0  0  0  0  0  0  0  0  0  0
+   17.5600   10.5330   20.4430 C   0  0  0  0  0  0  0  0  0  0  0  0
+   17.9210   11.4590   21.3960 C   0  0  0  0  0  0  0  0  0  0  0  0
+   19.2540   11.6030   21.7650 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.6070   11.2230   20.3330 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.4200   12.3320   19.5090 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.2410   12.5470   18.4040 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.2630   11.6640   18.1130 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.4610   10.5600   18.9190 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.6360   10.3370   20.0200 C   0  0  0  0  0  0  0  0  0  0  0  0
+  3  1  2  0
+  4  2  1  0
+  4  1  1  0
+  5  1  1  0
+  6  2  1  0
+  6  5  1  0
+  7  6  2  0
+  8  5  1  0
+  4  9  1  6
+ 10  9  2  0
+ 11 10  1  0
+ 12 11  2  0
+ 13 12  1  0
+ 14  9  1  0
+ 14 13  2  0
+ 15  4  1  0
+ 16 15  2  0
+ 17 16  1  0
+ 18 17  2  0
+ 19 18  1  0
+ 20 19  2  0
+ 20 15  1  0
+M  END
+$$$$
+
+     RDKit          3D
+
+  8  8  0  0  0  0  0  0  0  0999 V2000
+   43.2120    1.2010   21.1900 N   0  0  0  0  0  0  0  0  0  0  0  0
+   42.0970    1.7030   22.0340 C   0  0  2  0  0  0  0  0  0  0  0  0
+   41.2120    2.6840   21.2450 C   0  0  0  0  0  0  0  0  0  0  0  0
+   41.4260    2.9540   20.0390 O   0  0  0  0  0  0  0  0  0  0  0  0
+   42.6930    2.1910   23.3430 C   0  0  0  0  0  0  0  0  0  0  0  0
+   44.2130    1.9390   23.2340 C   0  0  0  0  0  0  0  0  0  0  0  0
+   44.4930    1.6950   21.7590 C   0  0  0  0  0  0  0  0  0  0  0  0
+   40.1570    3.2440   21.9570 N   0  0  0  0  0  0  0  0  0  0  0  0
+  2  1  1  0
+  2  3  1  6
+  4  3  2  0
+  5  2  1  0
+  6  5  1  0
+  7  1  1  0
+  7  6  1  0
+  8  3  1  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 22 25  0  0  0  0  0  0  0  0999 V2000
+   23.9890   11.5960   18.4360 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.3210   11.4640   18.7840 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.6630   11.0960   20.0820 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.6490   10.8840   21.0220 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.3190   11.0270   20.6770 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.9880   11.3810   19.3750 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.2440   10.8070   21.7330 C   0  0  2  0  0  0  0  0  0  0  0  0
+   20.8520   10.8680   21.1250 C   0  0  0  0  0  0  0  0  0  0  0  0
+   19.8540   10.6460   22.2900 C   0  0  0  0  0  0  0  0  0  0  0  0
+   20.0450   11.6270   23.3000 O   0  0  0  0  0  0  0  0  0  0  0  0
+   20.9870   12.6610   22.9460 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.3270   11.9770   22.7910 C   0  0  1  0  0  0  0  0  0  0  0  0
+   22.7770   11.3400   23.9760 O   0  0  0  0  0  0  0  0  0  0  0  0
+   22.7260   10.0020   23.7830 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.4730    9.6360   22.5540 N   0  0  0  0  0  0  0  0  0  0  0  0
+   22.9310    9.1250   24.7980 N   0  0  0  0  0  0  0  0  0  0  0  0
+   27.0780   10.9870   20.5190 C   0  0  0  0  0  0  0  0  0  0  0  0
+   27.5170    9.9760   21.3750 C   0  0  0  0  0  0  0  0  0  0  0  0
+   28.7840    9.9640   21.7630 N   0  0  0  0  0  0  0  0  0  0  0  0
+   29.6370   10.8810   21.3400 C   0  0  0  0  0  0  0  0  0  0  0  0
+   29.2680   11.8600   20.5370 N   0  0  0  0  0  0  0  0  0  0  0  0
+   28.0170   11.9450   20.1110 C   0  0  0  0  0  0  0  0  0  0  0  0
+  2  1  2  0
+  3  2  1  0
+  4  3  2  0
+  5  4  1  0
+  6  5  2  0
+  6  1  1  0
+  7  5  1  6
+  8  7  1  0
+  9  8  1  0
+ 10  9  1  0
+ 11 10  1  0
+ 12 11  1  1
+ 12  7  1  0
+ 13 12  1  0
+ 14 13  1  0
+ 15  7  1  0
+ 15 14  2  0
+ 16 14  1  0
+ 17  3  1  0
+ 18 17  2  0
+ 19 18  1  0
+ 20 19  2  0
+ 21 20  1  0
+ 22 17  1  0
+ 22 21  2  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 19 21  0  0  0  0  0  0  0  0999 V2000
+   18.6790   10.8940   21.5160 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.8760    9.6220   22.6190 N   0  0  0  0  0  0  0  0  0  0  0  0
+   19.3450    9.6270   21.1760 O   0  0  0  0  0  0  0  0  0  0  0  0
+   22.4790   11.8080   24.2920 S   0  0  0  0  0  0  0  0  0  0  0  0
+   19.5140   11.7630   22.5130 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.7100    9.2150   24.7670 N   0  0  0  0  0  0  0  0  0  0  0  0
+   20.5550    9.7530   20.5440 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.8590   10.7120   20.6250 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.1020   10.1890   21.0270 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.2620   10.3730   20.2980 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.8630   11.5080   19.3970 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.5800   10.5280   21.4490 C   0  0  2  0  0  0  0  0  0  0  0  0
+   20.9500   11.9060   21.9290 C   0  0  2  0  0  0  0  0  0  0  0  0
+   21.9600   12.7150   22.7910 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.3230   10.0930   23.7780 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.0040   11.6730   18.6170 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.2010   11.1170   19.0930 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.7570   12.0240   18.8700 F   0  0  0  0  0  0  0  0  0  0  0  0
+   26.3200   11.2980   18.4090 F   0  0  0  0  0  0  0  0  0  0  0  0
+  3  1  1  0
+  5  1  1  0
+  7  3  1  0
+  9  8  2  0
+ 10  9  1  0
+ 11  8  1  0
+ 12  7  1  0
+ 12  8  1  6
+ 12  2  1  0
+ 13 12  1  0
+ 13  5  1  1
+ 14 13  1  0
+ 14  4  1  0
+ 15  6  1  0
+ 15  2  2  0
+ 15  4  1  0
+ 16 11  2  0
+ 17 10  2  0
+ 17 16  1  0
+ 18 11  1  0
+ 19 17  1  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 16 17  0  0  0  0  0  0  0  0999 V2000
+   20.6950    9.9560   20.8820 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.2050    9.8930   22.6900 N   0  0  0  0  0  0  0  0  0  0  0  0
+   23.0060   12.0970   24.2220 S   0  0  0  0  0  0  0  0  0  0  0  0
+   21.8910   10.6980   21.5060 C   0  0  2  0  0  0  0  0  0  0  0  0
+   22.8690    9.5480   24.8150 N   0  0  0  0  0  0  0  0  0  0  0  0
+   21.4800   12.1250   21.9040 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.5630   12.8770   22.6580 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.6270   10.3910   23.7940 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.1060   10.7640   20.5410 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.3720   10.2320   20.8590 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.4690   10.3640   20.0140 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.3420   11.0350   18.7800 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.1030   11.5640   18.3850 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.0130   11.4340   19.2760 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.8840   12.0230   18.8800 F   0  0  0  0  0  0  0  0  0  0  0  0
+   26.4280   11.2380   18.0020 F   0  0  0  0  0  0  0  0  0  0  0  0
+  4  1  1  6
+  4  2  1  0
+  6  4  1  0
+  7  6  1  0
+  7  3  1  0
+  8  5  1  0
+  8  2  2  0
+  8  3  1  0
+  9  4  1  0
+ 10  9  2  0
+ 11 10  1  0
+ 12 11  2  0
+ 13 12  1  0
+ 14  9  1  0
+ 14 13  2  0
+ 15 14  1  0
+ 16 12  1  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 11 12  0  0  0  0  0  0  0  0999 V2000
+   23.8920   10.9750   19.7100 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.1430    9.6540   19.8400 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.7820   11.7530   20.9950 C   0  0  0  0  0  0  0  0  0  0  0  0
+   21.6770    9.8870   20.1680 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.1750   12.7870   22.6090 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.3660   10.1400   23.6660 C   0  0  0  0  0  0  0  0  0  0  0  0
+   22.3180   11.9530   21.3510 C   0  0  2  0  0  0  0  0  0  0  0  0
+   21.5250   10.6490   21.4640 C   0  0  2  0  0  0  0  0  0  0  0  0
+   22.7380    9.3100   24.6900 N   0  0  0  0  0  0  0  0  0  0  0  0
+   21.9210    9.6990   22.5310 N   0  0  0  0  0  0  0  0  0  0  0  0
+   22.5620   11.8400   24.1130 S   0  0  0  0  0  0  0  0  0  0  0  0
+  2  1  1  0
+  3  1  1  0
+  4  2  1  0
+  7  3  1  1
+  7  5  1  0
+  8  4  1  6
+  8  7  1  0
+  9  6  1  0
+ 10  8  1  0
+ 10  6  2  0
+ 11  6  1  0
+ 11  5  1  0
+M  END
+$$$$
+
+     RDKit          3D
+
+ 18 20  0  0  0  0  0  0  0  0999 V2000
+   28.6970   10.5240   20.4750 C   0  0  0  0  0  0  0  0  0  0  0  0
+   27.9220   11.6800   20.9560 N   0  0  0  0  0  0  0  0  0  0  0  0
+   28.7880   12.6650   21.6350 C   0  0  0  0  0  0  0  0  0  0  0  0
+   27.0810   12.2010   19.9710 C   0  0  0  0  0  0  0  0  0  0  0  0
+   27.4190   13.2930   19.2740 N   0  0  0  0  0  0  0  0  0  0  0  0
+   26.6450   13.8320   18.3200 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.4810   13.2870   17.9980 N   0  0  0  0  0  0  0  0  0  0  0  0
+   25.0290   12.1840   18.6310 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.7860   11.6150   18.3040 C   0  0  0  0  0  0  0  0  0  0  0  0
+   23.3430   10.5040   18.9720 C   0  0  0  0  0  0  0  0  0  0  0  0
+   24.1080    9.9180   19.9810 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.3250   10.4360   20.3200 C   0  0  0  0  0  0  0  0  0  0  0  0
+   25.8200   11.5870   19.6640 C   0  0  0  0  0  0  0  0  0  0  0  0
+   27.1160   14.9710   17.6690 N   0  0  0  0  0  0  0  0  0  0  0  0
+   27.3480   16.1150   18.5710 C   0  0  0  0  0  0  0  0  0  0  0  0
+   27.6660   17.2890   17.6050 C   0  0  0  0  0  0  0  0  0  0  0  0
+   26.8670   16.9430   16.3140 C   0  0  0  0  0  0  0  0  0  0  0  0
+   26.3130   15.5200   16.5590 C   0  0  0  0  0  0  0  0  0  0  0  0
+  2  1  1  0
+  3  2  1  0
+  4  2  1  0
+  5  4  2  0
+  6  5  1  0
+  7  6  2  0
+  8  7  1  0
+  9  8  2  0
+ 10  9  1  0
+ 11 10  2  0
+ 12 11  1  0
+ 13 12  2  0
+ 13  8  1  0
+ 13  4  1  0
+ 14  6  1  0
+ 15 14  1  0
+ 16 15  1  0
+ 17 16  1  0
+ 18 14  1  0
+ 18 17  1  0
+M  END
+$$$$