diff --git a/config/datatypes_conf.xml.sample b/config/datatypes_conf.xml.sample
index 6859e892924..f321bb5b59d 100644
--- a/config/datatypes_conf.xml.sample
+++ b/config/datatypes_conf.xml.sample
@@ -443,6 +443,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/converters/cml_to_inchi_converter.xml b/lib/galaxy/datatypes/converters/cml_to_inchi_converter.xml
new file mode 100644
index 00000000000..f6bc53f7f0d
--- /dev/null
+++ b/lib/galaxy/datatypes/converters/cml_to_inchi_converter.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ openbabel
+
+
+&1
+]]>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/converters/cml_to_mol2_converter.xml b/lib/galaxy/datatypes/converters/cml_to_mol2_converter.xml
new file mode 100644
index 00000000000..cf07535ed8e
--- /dev/null
+++ b/lib/galaxy/datatypes/converters/cml_to_mol2_converter.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ openbabel
+
+
+&1
+]]>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/converters/cml_to_sdf_converter.xml b/lib/galaxy/datatypes/converters/cml_to_sdf_converter.xml
new file mode 100644
index 00000000000..f5e238251b6
--- /dev/null
+++ b/lib/galaxy/datatypes/converters/cml_to_sdf_converter.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ openbabel
+
+
+&1
+]]>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/converters/cml_to_smi_converter.xml b/lib/galaxy/datatypes/converters/cml_to_smi_converter.xml
new file mode 100644
index 00000000000..7fae58c4551
--- /dev/null
+++ b/lib/galaxy/datatypes/converters/cml_to_smi_converter.xml
@@ -0,0 +1,48 @@
+
+
+
+
+ openbabel
+
+
+= 0:
+ -p $ph
+ #end if
+
+ 2>&1
+]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/converters/inchi_to_cml_converter.xml b/lib/galaxy/datatypes/converters/inchi_to_cml_converter.xml
new file mode 100644
index 00000000000..ab1db9455cc
--- /dev/null
+++ b/lib/galaxy/datatypes/converters/inchi_to_cml_converter.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ openbabel
+
+
+&1
+]]>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/converters/inchi_to_mol2_converter.xml b/lib/galaxy/datatypes/converters/inchi_to_mol2_converter.xml
new file mode 100644
index 00000000000..e7fbefb1d6e
--- /dev/null
+++ b/lib/galaxy/datatypes/converters/inchi_to_mol2_converter.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ openbabel
+
+
+&1
+]]>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/converters/inchi_to_mol_converter.xml b/lib/galaxy/datatypes/converters/inchi_to_mol_converter.xml
new file mode 100644
index 00000000000..bc6b2e69f99
--- /dev/null
+++ b/lib/galaxy/datatypes/converters/inchi_to_mol_converter.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ openbabel
+
+
+&1
+]]>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/converters/inchi_to_sdf_converter.xml b/lib/galaxy/datatypes/converters/inchi_to_sdf_converter.xml
new file mode 100644
index 00000000000..5a2c3d238cb
--- /dev/null
+++ b/lib/galaxy/datatypes/converters/inchi_to_sdf_converter.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ openbabel
+
+
+&1
+]]>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/converters/inchi_to_smi_converter.xml b/lib/galaxy/datatypes/converters/inchi_to_smi_converter.xml
new file mode 100644
index 00000000000..87d75ca2513
--- /dev/null
+++ b/lib/galaxy/datatypes/converters/inchi_to_smi_converter.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ openbabel
+
+
+&1
+]]>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/converters/mol2_to_cml_converter.xml b/lib/galaxy/datatypes/converters/mol2_to_cml_converter.xml
new file mode 100644
index 00000000000..ab040297baf
--- /dev/null
+++ b/lib/galaxy/datatypes/converters/mol2_to_cml_converter.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ openbabel
+
+
+&1
+]]>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/converters/mol2_to_inchi_converter.xml b/lib/galaxy/datatypes/converters/mol2_to_inchi_converter.xml
new file mode 100644
index 00000000000..a1215816505
--- /dev/null
+++ b/lib/galaxy/datatypes/converters/mol2_to_inchi_converter.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ openbabel
+
+
+&1
+]]>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/converters/mol2_to_mol_converter.xml b/lib/galaxy/datatypes/converters/mol2_to_mol_converter.xml
new file mode 100644
index 00000000000..75b88369892
--- /dev/null
+++ b/lib/galaxy/datatypes/converters/mol2_to_mol_converter.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ openbabel
+
+
+&1
+]]>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/converters/mol2_to_sdf_converter.xml b/lib/galaxy/datatypes/converters/mol2_to_sdf_converter.xml
new file mode 100644
index 00000000000..9bd01e9afb5
--- /dev/null
+++ b/lib/galaxy/datatypes/converters/mol2_to_sdf_converter.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ openbabel
+
+
+&1
+]]>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/converters/mol2_to_smi_converter.xml b/lib/galaxy/datatypes/converters/mol2_to_smi_converter.xml
new file mode 100644
index 00000000000..05fac1f3f2a
--- /dev/null
+++ b/lib/galaxy/datatypes/converters/mol2_to_smi_converter.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ openbabel
+
+
+&1
+]]>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/converters/mol_to_cml_converter.xml b/lib/galaxy/datatypes/converters/mol_to_cml_converter.xml
new file mode 100644
index 00000000000..1af29c63fc3
--- /dev/null
+++ b/lib/galaxy/datatypes/converters/mol_to_cml_converter.xml
@@ -0,0 +1,21 @@
+
+
+
+ openbabel
+
+
+&1
+]]>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/converters/mol_to_inchi_converter.xml b/lib/galaxy/datatypes/converters/mol_to_inchi_converter.xml
new file mode 100644
index 00000000000..185e8337815
--- /dev/null
+++ b/lib/galaxy/datatypes/converters/mol_to_inchi_converter.xml
@@ -0,0 +1,21 @@
+
+
+
+ openbabel
+
+
+&1
+]]>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/converters/mol_to_mol2_converter.xml b/lib/galaxy/datatypes/converters/mol_to_mol2_converter.xml
new file mode 100644
index 00000000000..185e8337815
--- /dev/null
+++ b/lib/galaxy/datatypes/converters/mol_to_mol2_converter.xml
@@ -0,0 +1,21 @@
+
+
+
+ openbabel
+
+
+&1
+]]>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/converters/mol_to_smi_converter.xml b/lib/galaxy/datatypes/converters/mol_to_smi_converter.xml
new file mode 100644
index 00000000000..acc7616eec9
--- /dev/null
+++ b/lib/galaxy/datatypes/converters/mol_to_smi_converter.xml
@@ -0,0 +1,21 @@
+
+
+
+ openbabel
+
+
+&1
+]]>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/converters/sdf_to_cml_converter.xml b/lib/galaxy/datatypes/converters/sdf_to_cml_converter.xml
new file mode 100644
index 00000000000..0d63fe47427
--- /dev/null
+++ b/lib/galaxy/datatypes/converters/sdf_to_cml_converter.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ openbabel
+
+
+&1
+]]>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/converters/sdf_to_inchi_converter.xml b/lib/galaxy/datatypes/converters/sdf_to_inchi_converter.xml
new file mode 100644
index 00000000000..1d78781f00b
--- /dev/null
+++ b/lib/galaxy/datatypes/converters/sdf_to_inchi_converter.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ openbabel
+
+
+&1
+]]>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/converters/sdf_to_mol2_converter.xml b/lib/galaxy/datatypes/converters/sdf_to_mol2_converter.xml
new file mode 100644
index 00000000000..ac326e239d6
--- /dev/null
+++ b/lib/galaxy/datatypes/converters/sdf_to_mol2_converter.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ openbabel
+
+
+&1
+]]>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/converters/sdf_to_smi_converter.xml b/lib/galaxy/datatypes/converters/sdf_to_smi_converter.xml
new file mode 100644
index 00000000000..f157f799c02
--- /dev/null
+++ b/lib/galaxy/datatypes/converters/sdf_to_smi_converter.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ openbabel
+
+
+&1
+]]>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/converters/smi_to_cml_converter.xml b/lib/galaxy/datatypes/converters/smi_to_cml_converter.xml
new file mode 100644
index 00000000000..0ab97693d2b
--- /dev/null
+++ b/lib/galaxy/datatypes/converters/smi_to_cml_converter.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ openbabel
+
+
+&1
+]]>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/converters/smi_to_inchi_converter.xml b/lib/galaxy/datatypes/converters/smi_to_inchi_converter.xml
new file mode 100644
index 00000000000..75de06cbeb9
--- /dev/null
+++ b/lib/galaxy/datatypes/converters/smi_to_inchi_converter.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ openbabel
+
+
+&1
+]]>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/converters/smi_to_mol2_converter.xml b/lib/galaxy/datatypes/converters/smi_to_mol2_converter.xml
new file mode 100644
index 00000000000..df068cace6f
--- /dev/null
+++ b/lib/galaxy/datatypes/converters/smi_to_mol2_converter.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ openbabel
+
+
+&1
+]]>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/converters/smi_to_mol_converter.xml b/lib/galaxy/datatypes/converters/smi_to_mol_converter.xml
new file mode 100644
index 00000000000..c9959815b75
--- /dev/null
+++ b/lib/galaxy/datatypes/converters/smi_to_mol_converter.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ openbabel
+
+
+&1
+]]>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/converters/smi_to_sdf_converter.xml b/lib/galaxy/datatypes/converters/smi_to_sdf_converter.xml
new file mode 100644
index 00000000000..f5c213dd275
--- /dev/null
+++ b/lib/galaxy/datatypes/converters/smi_to_sdf_converter.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ openbabel
+
+
+&1
+]]>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/converters/smi_to_smi_converter.xml b/lib/galaxy/datatypes/converters/smi_to_smi_converter.xml
new file mode 100644
index 00000000000..ce0f1ba63ed
--- /dev/null
+++ b/lib/galaxy/datatypes/converters/smi_to_smi_converter.xml
@@ -0,0 +1,48 @@
+
+
+
+
+ openbabel
+
+
+= 0:
+ -p $ph
+ #end if
+
+ 2>&1
+]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/molecules.py b/lib/galaxy/datatypes/molecules.py
new file mode 100644
index 00000000000..ce66f4b88cb
--- /dev/null
+++ b/lib/galaxy/datatypes/molecules.py
@@ -0,0 +1,769 @@
+# -*- coding: utf-8 -*-
+
+from galaxy.datatypes import data
+import logging
+from galaxy.datatypes.sniff import get_headers
+from galaxy.datatypes.data import get_file_peek
+from galaxy.datatypes.tabular import Tabular
+from galaxy.datatypes.binary import Binary
+from galaxy.datatypes.xml import GenericXml
+import subprocess
+import os
+
+from galaxy.datatypes.metadata import MetadataElement
+from galaxy.datatypes import metadata
+
+log = logging.getLogger(__name__)
+
+
+def count_special_lines(word, filename, invert=False):
+ """
+ searching for special 'words' using the grep tool
+ grep is used to speed up the searching and counting
+ The number of hits is returned.
+ """
+ try:
+ cmd = ["grep", "-c"]
+ if invert:
+ cmd.append('-v')
+ cmd.extend([word, filename])
+ out = subprocess.Popen(cmd, stdout=subprocess.PIPE)
+ return int(out.communicate()[0].split()[0])
+ except:
+ pass
+ return 0
+
+
+def count_lines(filename, non_empty=False):
+ """
+ counting the number of lines from the 'filename' file
+ """
+ try:
+ if non_empty:
+ out = subprocess.Popen(['grep', '-cve', '^\s*$', filename], stdout=subprocess.PIPE)
+ else:
+ out = subprocess.Popen(['wc', '-l', filename], stdout=subprocess.PIPE)
+ return int(out.communicate()[0].split()[0])
+ except:
+ pass
+ return 0
+
+
+class GenericMolFile(data.Text):
+ """
+ abstract class for most of the molecule files
+ """
+ MetadataElement(name="number_of_molecules", default=0, desc="Number of molecules", readonly=True, visible=True, optional=True, no_value=0)
+
+ def set_peek(self, dataset, is_multi_byte=False):
+ if not dataset.dataset.purged:
+ dataset.peek = get_file_peek(dataset.file_name, is_multi_byte=is_multi_byte)
+ if (dataset.metadata.number_of_molecules == 1):
+ dataset.blurb = "1 molecule"
+ else:
+ dataset.blurb = "%s molecules" % dataset.metadata.number_of_molecules
+ dataset.peek = data.get_file_peek(dataset.file_name, is_multi_byte=is_multi_byte)
+ else:
+ dataset.peek = 'file does not exist'
+ dataset.blurb = 'file purged from disk'
+
+ def get_mime(self):
+ return 'text/plain'
+
+
+class MOL(GenericMolFile):
+ file_ext = "mol"
+
+ def set_meta(self, dataset, **kwd):
+ """
+ Set the number molecules, in the case of MOL its always one.
+ """
+ dataset.metadata.number_of_molecules = 1
+
+
+class SDF(GenericMolFile):
+ file_ext = "sdf"
+
+ def sniff(self, filename):
+ """
+ Try to guess if the file is a SDF2 file.
+
+ >>> from galaxy.datatypes.sniff import get_test_fname
+ >>> fname = get_test_fname('drugbank_drugs.sdf')
+ >>> SDF().sniff(fname)
+ True
+
+ >>> fname = get_test_fname('drugbank_drugs.cml')
+ >>> SDF().sniff(fname)
+ False
+ """
+ counter = count_special_lines("^M\s*END", filename) + count_special_lines("^\$\$\$\$", filename)
+ if counter > 0 and counter % 2 == 0:
+ return True
+ else:
+ return False
+
+ def set_meta(self, dataset, **kwd):
+ """
+ Set the number of molecules in dataset.
+ """
+ dataset.metadata.number_of_molecules = count_special_lines("^\$\$\$\$", dataset.file_name)
+
+ def split(cls, input_datasets, subdir_generator_function, split_params):
+ """
+ Split the input files by molecule records.
+ """
+ if split_params is None:
+ return None
+
+ if len(input_datasets) > 1:
+ raise Exception("SD-file splitting does not support multiple files")
+ input_files = [ds.file_name for ds in input_datasets]
+
+ chunk_size = None
+ if split_params['split_mode'] == 'number_of_parts':
+ raise Exception('Split mode "%s" is currently not implemented for SD-files.' % split_params['split_mode'])
+ elif split_params['split_mode'] == 'to_size':
+ chunk_size = int(split_params['split_size'])
+ else:
+ raise Exception('Unsupported split mode %s' % split_params['split_mode'])
+
+ def _read_sdf_records(filename):
+ lines = []
+ with open(filename) as handle:
+ for line in handle:
+ lines.append(line)
+ if line.startswith("$$$$"):
+ yield lines
+ lines = []
+
+ def _write_part_sdf_file(accumulated_lines):
+ part_dir = subdir_generator_function()
+ part_path = os.path.join(part_dir, os.path.basename(input_files[0]))
+ part_file = open(part_path, 'w')
+ part_file.writelines(accumulated_lines)
+ part_file.close()
+
+ try:
+ sdf_records = _read_sdf_records(input_files[0])
+ sdf_lines_accumulated = []
+ for counter, sdf_record in enumerate(sdf_records, start=1):
+ sdf_lines_accumulated.extend(sdf_record)
+ if counter % chunk_size == 0:
+ _write_part_sdf_file(sdf_lines_accumulated)
+ sdf_lines_accumulated = []
+ if sdf_lines_accumulated:
+ _write_part_sdf_file(sdf_lines_accumulated)
+ except Exception, e:
+ log.error('Unable to split files: %s' % str(e))
+ raise
+ split = classmethod(split)
+
+
+class MOL2(GenericMolFile):
+ file_ext = "mol2"
+
+ def sniff(self, filename):
+ """
+ Try to guess if the file is a MOL2 file.
+
+ >>> from galaxy.datatypes.sniff import get_test_fname
+ >>> fname = get_test_fname('drugbank_drugs.mol2')
+ >>> MOL2().sniff(fname)
+ True
+
+ >>> fname = get_test_fname('drugbank_drugs.cml')
+ >>> MOL2().sniff(fname)
+ False
+ """
+ if count_special_lines("@MOLECULE", filename) > 0:
+ return True
+ else:
+ return False
+
+ def set_meta(self, dataset, **kwd):
+ """
+ Set the number of lines of data in dataset.
+ """
+ dataset.metadata.number_of_molecules = count_special_lines("@MOLECULE", dataset.file_name)
+
+ def split(cls, input_datasets, subdir_generator_function, split_params):
+ """
+ Split the input files by molecule records.
+ """
+ if split_params is None:
+ return None
+
+ if len(input_datasets) > 1:
+ raise Exception("MOL2-file splitting does not support multiple files")
+ input_files = [ds.file_name for ds in input_datasets]
+
+ chunk_size = None
+ if split_params['split_mode'] == 'number_of_parts':
+ raise Exception('Split mode "%s" is currently not implemented for MOL2-files.' % split_params['split_mode'])
+ elif split_params['split_mode'] == 'to_size':
+ chunk_size = int(split_params['split_size'])
+ else:
+ raise Exception('Unsupported split mode %s' % split_params['split_mode'])
+
+ def _read_mol2_records(filename):
+ lines = []
+ start = True
+ with open(filename) as handle:
+ for line in handle:
+ if line.startswith("@MOLECULE"):
+ if start:
+ start = False
+ else:
+ yield lines
+ lines = []
+ lines.append(line)
+
+ def _write_part_mol2_file(accumulated_lines):
+ part_dir = subdir_generator_function()
+ part_path = os.path.join(part_dir, os.path.basename(input_files[0]))
+ part_file = open(part_path, 'w')
+ part_file.writelines(accumulated_lines)
+ part_file.close()
+
+ try:
+ mol2_records = _read_mol2_records(input_files[0])
+ mol2_lines_accumulated = []
+ for counter, mol2_record in enumerate(mol2_records, start=1):
+ mol2_lines_accumulated.extend(mol2_record)
+ if counter % chunk_size == 0:
+ _write_part_mol2_file(mol2_lines_accumulated)
+ mol2_lines_accumulated = []
+ if mol2_lines_accumulated:
+ _write_part_mol2_file(mol2_lines_accumulated)
+ except Exception, e:
+ log.error('Unable to split files: %s' % str(e))
+ raise
+ split = classmethod(split)
+
+
+class FPS(GenericMolFile):
+ """
+ chemfp fingerprint file: http://code.google.com/p/chem-fingerprints/wiki/FPS
+ """
+ file_ext = "fps"
+
+ def sniff(self, filename):
+ """
+ Try to guess if the file is a FPS file.
+
+ >>> from galaxy.datatypes.sniff import get_test_fname
+ >>> fname = get_test_fname('q.fps')
+ >>> FPS().sniff(fname)
+ True
+
+ >>> fname = get_test_fname('drugbank_drugs.cml')
+ >>> FPS().sniff(fname)
+ False
+ """
+ header = get_headers(filename, sep='\t', count=1)
+ if header[0][0].strip() == '#FPS1':
+ return True
+ else:
+ return False
+
+ def set_meta(self, dataset, **kwd):
+ """
+ Set the number of lines of data in dataset.
+ """
+ dataset.metadata.number_of_molecules = count_special_lines('^#', dataset.file_name, invert=True)
+
+ def split(cls, input_datasets, subdir_generator_function, split_params):
+ """
+ Split the input files by fingerprint records.
+ """
+ if split_params is None:
+ return None
+
+ if len(input_datasets) > 1:
+ raise Exception("FPS-file splitting does not support multiple files")
+ input_files = [ds.file_name for ds in input_datasets]
+
+ chunk_size = None
+ if split_params['split_mode'] == 'number_of_parts':
+ raise Exception('Split mode "%s" is currently not implemented for MOL2-files.' % split_params['split_mode'])
+ elif split_params['split_mode'] == 'to_size':
+ chunk_size = int(split_params['split_size'])
+ else:
+ raise Exception('Unsupported split mode %s' % split_params['split_mode'])
+
+ def _write_part_fingerprint_file(accumulated_lines):
+ part_dir = subdir_generator_function()
+ part_path = os.path.join(part_dir, os.path.basename(input_files[0]))
+ part_file = open(part_path, 'w')
+ part_file.writelines(accumulated_lines)
+ part_file.close()
+
+ try:
+ header_lines = []
+ lines_accumulated = []
+ fingerprint_counter = 0
+ for line in open(input_files[0]):
+ if not line.strip():
+ continue
+ if line.startswith('#'):
+ header_lines.append(line)
+ else:
+ fingerprint_counter += 1
+ lines_accumulated.append(line)
+ if fingerprint_counter != 0 and fingerprint_counter % chunk_size == 0:
+ _write_part_fingerprint_file(header_lines + lines_accumulated)
+ lines_accumulated = []
+ if lines_accumulated:
+ _write_part_fingerprint_file(header_lines + lines_accumulated)
+ except Exception, e:
+ log.error('Unable to split files: %s' % str(e))
+ raise
+ split = classmethod(split)
+
+ def merge(split_files, output_file):
+ """
+ Merging fps files requires merging the header manually.
+ We take the header from the first file.
+ """
+ if len(split_files) == 1:
+ # For one file only, use base class method (move/copy)
+ return data.Text.merge(split_files, output_file)
+ if not split_files:
+ raise ValueError("No fps files given, %r, to merge into %s"
+ % (split_files, output_file))
+ out = open(output_file, "w")
+ first = True
+ for filename in split_files:
+ with open(filename) as handle:
+ for line in handle:
+ if line.startswith('#'):
+ if first:
+ out.write(line)
+ else:
+ # line is no header and not a comment, we assume the first header is written to out and we set 'first' to False
+ first = False
+ out.write(line)
+ out.close()
+ merge = staticmethod(merge)
+
+
+class OBFS(Binary):
+ """OpenBabel Fastsearch format (fs)."""
+ file_ext = 'fs'
+ composite_type = 'basic'
+ allow_datatype_change = False
+
+ MetadataElement(name="base_name", default='OpenBabel Fastsearch Index',
+ readonly=True, visible=True, optional=True,)
+
+ def __init__(self, **kwd):
+ """
+ A Fastsearch Index consists of a binary file with the fingerprints
+ and a pointer the actual molecule file.
+ """
+ Binary.__init__(self, **kwd)
+ self.add_composite_file('molecule.fs', is_binary=True,
+ description='OpenBabel Fastsearch Index')
+ self.add_composite_file('molecule.sdf', optional=True,
+ is_binary=False, description='Molecule File')
+ self.add_composite_file('molecule.smi', optional=True,
+ is_binary=False, description='Molecule File')
+ self.add_composite_file('molecule.inchi', optional=True,
+ is_binary=False, description='Molecule File')
+ self.add_composite_file('molecule.mol2', optional=True,
+ is_binary=False, description='Molecule File')
+ self.add_composite_file('molecule.cml', optional=True,
+ is_binary=False, description='Molecule File')
+
+ def set_peek(self, dataset, is_multi_byte=False):
+ """Set the peek and blurb text."""
+ if not dataset.dataset.purged:
+ dataset.peek = "OpenBabel Fastsearch Index"
+ dataset.blurb = "OpenBabel Fastsearch Index"
+ else:
+ dataset.peek = "file does not exist"
+ dataset.blurb = "file purged from disk"
+
+ def display_peek(self, dataset):
+ """Create HTML content, used for displaying peek."""
+ try:
+ return dataset.peek
+ except:
+ return "OpenBabel Fastsearch Index"
+
+ def display_data(self, trans, data, preview=False, filename=None,
+ to_ext=None, size=None, offset=None, **kwd):
+ """Apparently an old display method, but still gets called.
+
+ This allows us to format the data shown in the central pane via the "eye" icon.
+ """
+ return "This is a OpenBabel Fastsearch format. You can speed up your similarity and substructure search with it."
+
+ def get_mime(self):
+ """Returns the mime type of the datatype (pretend it is text for peek)"""
+ return 'text/plain'
+
+ def merge(split_files, output_file, extra_merge_args):
+ """Merging Fastsearch indices is not supported."""
+ raise NotImplementedError("Merging Fastsearch indices is not supported.")
+
+ def split(cls, input_datasets, subdir_generator_function, split_params):
+ """Splitting Fastsearch indices is not supported."""
+ if split_params is None:
+ return None
+ raise NotImplementedError("Splitting Fastsearch indices is not possible.")
+
+
+class DRF(GenericMolFile):
+ file_ext = "drf"
+
+ def set_meta(self, dataset, **kwd):
+ """
+ Set the number of lines of data in dataset.
+ """
+ dataset.metadata.number_of_molecules = count_special_lines('\"ligand id\"', dataset.file_name, invert=True)
+
+
+class PHAR(GenericMolFile):
+ """
+ Pharmacophore database format from silicos-it.
+ """
+ file_ext = "phar"
+
+ def set_peek(self, dataset, is_multi_byte=False):
+ if not dataset.dataset.purged:
+ dataset.peek = get_file_peek(dataset.file_name, is_multi_byte=is_multi_byte)
+ dataset.blurb = "pharmacophore"
+ else:
+ dataset.peek = 'file does not exist'
+ dataset.blurb = 'file purged from disk'
+
+
+class PDB(GenericMolFile):
+ """
+ Protein Databank format.
+ http://www.wwpdb.org/documentation/format33/v3.3.html
+ """
+ file_ext = "pdb"
+
+ def sniff(self, filename):
+ """
+ Try to guess if the file is a PDB file.
+
+ >>> from galaxy.datatypes.sniff import get_test_fname
+ >>> fname = get_test_fname('5e5z.pdb')
+ >>> PDB().sniff(fname)
+ True
+
+ >>> fname = get_test_fname('drugbank_drugs.cml')
+ >>> PDB().sniff(fname)
+ False
+ """
+ headers = get_headers(filename, sep=' ', count=300)
+ h = t = c = s = k = e = False
+ for line in headers:
+ section_name = line[0].strip()
+ if section_name == 'HEADER':
+ h = True
+ elif section_name == 'TITLE':
+ t = True
+ elif section_name == 'COMPND':
+ c = True
+ elif section_name == 'SOURCE':
+ s = True
+ elif section_name == 'KEYWDS':
+ k = True
+ elif section_name == 'EXPDTA':
+ e = True
+
+ if h * t * c * s * k * e:
+ return True
+ else:
+ return False
+
+ def set_peek(self, dataset, is_multi_byte=False):
+ if not dataset.dataset.purged:
+ atom_numbers = count_special_lines("^ATOM", dataset.file_name)
+ hetatm_numbers = count_special_lines("^HETATM", dataset.file_name)
+ dataset.peek = get_file_peek(dataset.file_name, is_multi_byte=is_multi_byte)
+ dataset.blurb = "%s atoms and %s HET-atoms" % (atom_numbers, hetatm_numbers)
+ else:
+ dataset.peek = 'file does not exist'
+ dataset.blurb = 'file purged from disk'
+
+
+class grd(data.Text):
+ file_ext = "grd"
+
+ def set_peek(self, dataset, is_multi_byte=False):
+ if not dataset.dataset.purged:
+ dataset.peek = get_file_peek(dataset.file_name, is_multi_byte=is_multi_byte)
+ dataset.blurb = "grids for docking"
+ else:
+ dataset.peek = 'file does not exist'
+ dataset.blurb = 'file purged from disk'
+
+
+class grdtgz(Binary):
+ file_ext = "grd.tgz"
+
+ def set_peek(self, dataset, is_multi_byte=False):
+ if not dataset.dataset.purged:
+ dataset.peek = 'binary data'
+ dataset.blurb = "compressed grids for docking"
+ else:
+ dataset.peek = 'file does not exist'
+ dataset.blurb = 'file purged from disk'
+
+
+class InChI(Tabular):
+ file_ext = "inchi"
+ column_names = ['InChI']
+ MetadataElement(name="columns", default=2, desc="Number of columns", readonly=True, visible=False)
+ MetadataElement(name="column_types", default=['str'], param=metadata.ColumnTypesParameter, desc="Column types", readonly=True, visible=False)
+ MetadataElement(name="number_of_molecules", default=0, desc="Number of molecules", readonly=True, visible=True, optional=True, no_value=0)
+
+ def set_meta(self, dataset, **kwd):
+ """
+ Set the number of lines of data in dataset.
+ """
+ dataset.metadata.number_of_molecules = self.count_data_lines(dataset)
+
+ def set_peek(self, dataset, is_multi_byte=False):
+ if not dataset.dataset.purged:
+ dataset.peek = get_file_peek(dataset.file_name, is_multi_byte=is_multi_byte)
+ if (dataset.metadata.number_of_molecules == 1):
+ dataset.blurb = "1 molecule"
+ else:
+ dataset.blurb = "%s molecules" % dataset.metadata.number_of_molecules
+ dataset.peek = data.get_file_peek(dataset.file_name, is_multi_byte=is_multi_byte)
+ else:
+ dataset.peek = 'file does not exist'
+ dataset.blurb = 'file purged from disk'
+
+ def sniff(self, filename):
+ """
+ Try to guess if the file is a InChI file.
+
+ >>> from galaxy.datatypes.sniff import get_test_fname
+ >>> fname = get_test_fname('drugbank_drugs.inchi')
+ >>> InChI().sniff(fname)
+ True
+
+ >>> fname = get_test_fname('drugbank_drugs.cml')
+ >>> InChI().sniff(fname)
+ False
+ """
+ inchi_lines = get_headers(filename, sep=' ', count=10)
+ for inchi in inchi_lines:
+ if not inchi[0].startswith('InChI='):
+ return False
+ return True
+
+
+class SMILES(Tabular):
+ file_ext = "smi"
+ column_names = ['SMILES', 'TITLE']
+ MetadataElement(name="columns", default=2, desc="Number of columns", readonly=True, visible=False)
+ MetadataElement(name="column_types", default=['str', 'str'], param=metadata.ColumnTypesParameter, desc="Column types", readonly=True, visible=False)
+ MetadataElement(name="number_of_molecules", default=0, desc="Number of molecules", readonly=True, visible=True, optional=True, no_value=0)
+
+ def set_meta(self, dataset, **kwd):
+ """
+ Set the number of lines of data in dataset.
+ """
+ dataset.metadata.number_of_molecules = self.count_data_lines(dataset)
+
+ def set_peek(self, dataset, is_multi_byte=False):
+ if not dataset.dataset.purged:
+ dataset.peek = get_file_peek(dataset.file_name, is_multi_byte=is_multi_byte)
+ if dataset.metadata.number_of_molecules == 1:
+ dataset.blurb = "1 molecule"
+ else:
+ dataset.blurb = "%s molecules" % dataset.metadata.number_of_molecules
+ dataset.peek = data.get_file_peek(dataset.file_name, is_multi_byte=is_multi_byte)
+ else:
+ dataset.peek = 'file does not exist'
+ dataset.blurb = 'file purged from disk'
+
+ '''
+ def sniff(self, filename):
+ """
+ Its hard or impossible to sniff a SMILES File. We can
+ try to import the first SMILES and check if it is a molecule, but
+ currently its not possible to use external libraries in datatype definition files.
+ Moreover it seems mpossible to inlcude OpenBabel as python library because OpenBabel
+ is GPL licensed.
+ """
+ self.molecule_number = count_lines(filename, non_empty = True)
+ word_count = count_lines(filename)
+
+ if self.molecule_number != word_count:
+ return False
+
+ if self.molecule_number > 0:
+ # test first 3 SMILES
+ smiles_lines = get_headers(filename, sep='\t', count=3)
+ for smiles_line in smiles_lines:
+ if len(smiles_line) > 2:
+ return False
+ smiles = smiles_line[0]
+ try:
+ # if we have atoms, we have a molecule
+ if not len(pybel.readstring('smi', smiles).atoms) > 0:
+ return False
+ except:
+ # if convert fails its not a smiles string
+ return False
+ return True
+ else:
+ return False
+ '''
+
+
+class CML(GenericXml):
+ """
+ Chemical Markup Language
+ http://cml.sourceforge.net/
+ """
+ file_ext = "cml"
+ MetadataElement(name="number_of_molecules", default=0, desc="Number of molecules", readonly=True, visible=True, optional=True, no_value=0)
+
+ def set_meta(self, dataset, **kwd):
+ """
+ Set the number of lines of data in dataset.
+ """
+ dataset.metadata.number_of_molecules = count_special_lines('^\s*>> from galaxy.datatypes.sniff import get_test_fname
+ >>> fname = get_test_fname('interval.interval')
+ >>> CML().sniff(fname)
+ False
+
+ >>> fname = get_test_fname('drugbank_drugs.cml')
+ >>> CML().sniff(fname)
+ True
+ """
+ handle = open(filename)
+ line = handle.readline()
+ if line.strip() != '':
+ handle.close()
+ return False
+ line = handle.readline()
+ if line.strip().find('http://www.xml-cml.org/schema') == -1:
+ handle.close()
+ return False
+ handle.close()
+ return True
+
+ def split(cls, input_datasets, subdir_generator_function, split_params):
+ """
+ Split the input files by molecule records.
+ """
+ if split_params is None:
+ return None
+
+ if len(input_datasets) > 1:
+ raise Exception("CML-file splitting does not support multiple files")
+ input_files = [ds.file_name for ds in input_datasets]
+
+ chunk_size = None
+ if split_params['split_mode'] == 'number_of_parts':
+ raise Exception('Split mode "%s" is currently not implemented for CML-files.' % split_params['split_mode'])
+ elif split_params['split_mode'] == 'to_size':
+ chunk_size = int(split_params['split_size'])
+ else:
+ raise Exception('Unsupported split mode %s' % split_params['split_mode'])
+
+ def _read_cml_records(filename):
+ lines = []
+ with open(filename) as handle:
+ for line in handle:
+ if line.lstrip().startswith('') or \
+ line.lstrip().startswith('\n', '\n']
+ footer_line = ['\n']
+
+ def _write_part_cml_file(accumulated_lines):
+ part_dir = subdir_generator_function()
+ part_path = os.path.join(part_dir, os.path.basename(input_files[0]))
+ part_file = open(part_path, 'w')
+ part_file.writelines(header_lines)
+ part_file.writelines(accumulated_lines)
+ part_file.writelines(footer_line)
+ part_file.close()
+
+ try:
+ cml_records = _read_cml_records(input_files[0])
+ cml_lines_accumulated = []
+ for counter, cml_record in enumerate(cml_records, start=1):
+ cml_lines_accumulated.extend(cml_record)
+ if counter % chunk_size == 0:
+ _write_part_cml_file(cml_lines_accumulated)
+ cml_lines_accumulated = []
+ if cml_lines_accumulated:
+ _write_part_cml_file(cml_lines_accumulated)
+ except Exception, e:
+ log.error('Unable to split files: %s' % str(e))
+ raise
+ split = classmethod(split)
+
+ def merge(split_files, output_file):
+ """
+ Merging CML files.
+ """
+ if len(split_files) == 1:
+ # For one file only, use base class method (move/copy)
+ return data.Text.merge(split_files, output_file)
+ if not split_files:
+ raise ValueError("Given no CML files, %r, to merge into %s"
+ % (split_files, output_file))
+ with open(output_file, "w") as out:
+ for filename in split_files:
+ with open(filename) as handle:
+ header = handle.readline()
+ if not header:
+ raise ValueError("CML file %s was empty" % filename)
+ if not header.lstrip().startswith(''):
+ out.write(header)
+ raise ValueError("%s is not a valid XML file!" % filename)
+ line = handle.readline()
+ header += line
+ if not line.lstrip().startswith('
+ if line.lstrip().startswith(''):
+ continue
+ if line.lstrip().startswith('\n")
+ merge = staticmethod(merge)
diff --git a/lib/galaxy/datatypes/sniff.py b/lib/galaxy/datatypes/sniff.py
index d85807d1309..ff9584d8b47 100644
--- a/lib/galaxy/datatypes/sniff.py
+++ b/lib/galaxy/datatypes/sniff.py
@@ -263,8 +263,9 @@ def guess_ext( fname, sniff_order, is_multi_byte=False ):
>>> fname = get_test_fname('megablast_xml_parser_test1.blastxml')
>>> from galaxy.datatypes import registry
+ >>> sample_conf = os.path.join(util.galaxy_directory(), "config", "datatypes_conf.xml.sample")
>>> datatypes_registry = registry.Registry()
- >>> datatypes_registry.load_datatypes()
+ >>> datatypes_registry.load_datatypes(root_dir=util.galaxy_directory(), config=sample_conf)
>>> sniff_order = datatypes_registry.sniff_order
>>> guess_ext(fname, sniff_order)
'xml'
@@ -324,6 +325,24 @@ def guess_ext( fname, sniff_order, is_multi_byte=False ):
>>> fname = get_test_fname('test.mz5')
>>> guess_ext(fname, sniff_order)
'h5'
+ >>> fname = get_test_fname('drugbank_drugs.cml')
+ >>> guess_ext(fname, sniff_order)
+ 'cml'
+ >>> fname = get_test_fname('q.fps')
+ >>> guess_ext(fname, sniff_order)
+ 'fps'
+ >>> fname = get_test_fname('drugbank_drugs.inchi')
+ >>> guess_ext(fname, sniff_order)
+ 'inchi'
+ >>> fname = get_test_fname('drugbank_drugs.mol2')
+ >>> guess_ext(fname, sniff_order)
+ 'mol2'
+ >>> fname = get_test_fname('drugbank_drugs.sdf')
+ >>> guess_ext(fname, sniff_order)
+ 'sdf'
+ >>> fname = get_test_fname('5e5z.pdb')
+ >>> guess_ext(fname, sniff_order)
+ 'pdb'
"""
for datatype in sniff_order:
"""
diff --git a/lib/galaxy/datatypes/test/5e5z.pdb b/lib/galaxy/datatypes/test/5e5z.pdb
new file mode 100644
index 00000000000..395b1fe3d11
--- /dev/null
+++ b/lib/galaxy/datatypes/test/5e5z.pdb
@@ -0,0 +1,357 @@
+HEADER DE NOVO PROTEIN, MEMBRANE PROTEIN 09-OCT-15 5E5Z
+TITLE STRUCTURE OF THE AMYLOID FORMING PEPTIDE LVHSSN (RESIDUES
+COMPND MOL_ID: 1;
+COMPND 2 MOLECULE: LVHSSN (RESIDUES 16-21) FROM ISLET AMYLOID POLYPEPTIDE;
+COMPND 3 CHAIN: A;
+COMPND 4 ENGINEERED: YES
+SOURCE MOL_ID: 1;
+SOURCE 2 SYNTHETIC: YES;
+SOURCE 3 ORGANISM_SCIENTIFIC: HOMO SAPIENS;
+SOURCE 4 ORGANISM_TAXID: 9606
+KEYWDS AMYLOID-LIKE PROTOFIBRIL, DE NOVO PROTEIN, MEMBRANE PROTEIN, PROTEIN
+KEYWDS 2 FIBRIL
+EXPDTA X-RAY DIFFRACTION
+AUTHOR A.B.SORIAGA,D.EISENBERG
+REVDAT 2 20-JAN-16 5E5Z 1 JRNL
+REVDAT 1 16-DEC-15 5E5Z 0
+JRNL AUTH A.B.SORIAGA,S.SANGWAN,R.MACDONALD,M.R.SAWAYA,D.EISENBERG
+JRNL TITL CRYSTAL STRUCTURES OF IAPP AMYLOIDOGENIC SEGMENTS REVEAL A
+JRNL TITL 2 NOVEL PACKING MOTIF OF OUT-OF-REGISTER BETA SHEETS.
+JRNL REF J.PHYS.CHEM.B 2016
+JRNL REFN ISSN 1089-5647
+JRNL PMID 26629790
+JRNL DOI 10.1021/ACS.JPCB.5B09981
+REMARK 2
+REMARK 2 RESOLUTION. 1.66 ANGSTROMS.
+REMARK 3
+REMARK 3 REFINEMENT.
+REMARK 3 PROGRAM : PHENIX 1.6.4_486
+REMARK 3 AUTHORS : PAUL ADAMS,PAVEL AFONINE,VINCENT CHEN,IAN
+REMARK 3 : DAVIS,KRESHNA GOPAL,RALF GROSSE-KUNSTLEVE,
+REMARK 3 : LI-WEI HUNG,ROBERT IMMORMINO,TOM IOERGER,
+REMARK 3 : AIRLIE MCCOY,ERIK MCKEE,NIGEL MORIARTY,
+REMARK 3 : REETAL PAI,RANDY READ,JANE RICHARDSON,
+REMARK 3 : DAVID RICHARDSON,TOD ROMO,JIM SACCHETTINI,
+REMARK 3 : NICHOLAS SAUTER,JACOB SMITH,LAURENT
+REMARK 3 : STORONI,TOM TERWILLIGER,PETER ZWART
+REMARK 3
+REMARK 3 REFINEMENT TARGET : LS_WUNIT_K1
+REMARK 3
+REMARK 3 DATA USED IN REFINEMENT.
+REMARK 3 RESOLUTION RANGE HIGH (ANGSTROMS) : 1.66
+REMARK 3 RESOLUTION RANGE LOW (ANGSTROMS) : 9.46
+REMARK 3 MIN(FOBS/SIGMA_FOBS) : 0.000
+REMARK 3 COMPLETENESS FOR RANGE (%) : 89.1
+REMARK 3 NUMBER OF REFLECTIONS : 391
+REMARK 3
+REMARK 3 FIT TO DATA USED IN REFINEMENT.
+REMARK 3 R VALUE (WORKING + TEST SET) : 0.170
+REMARK 3 R VALUE (WORKING SET) : 0.167
+REMARK 3 FREE R VALUE : 0.198
+REMARK 3 FREE R VALUE TEST SET SIZE (%) : 4.600
+REMARK 3 FREE R VALUE TEST SET COUNT : 18
+REMARK 3
+REMARK 3 FIT TO DATA USED IN REFINEMENT (IN BINS).
+REMARK 3 BIN RESOLUTION RANGE COMPL. NWORK NFREE RWORK RFREE
+REMARK 3 1 9.4587 - 1.6644 0.89 373 18 0.1673 0.1983
+REMARK 3
+REMARK 3 BULK SOLVENT MODELLING.
+REMARK 3 METHOD USED : FLAT BULK SOLVENT MODEL
+REMARK 3 SOLVENT RADIUS : 0.00
+REMARK 3 SHRINKAGE RADIUS : 0.00
+REMARK 3 K_SOL : 0.60
+REMARK 3 B_SOL : 251.4
+REMARK 3
+REMARK 3 ERROR ESTIMATES.
+REMARK 3 COORDINATE ERROR (MAXIMUM-LIKELIHOOD BASED) : 0.310
+REMARK 3 PHASE ERROR (DEGREES, MAXIMUM-LIKELIHOOD BASED) : 18.270
+REMARK 3
+REMARK 3 B VALUES.
+REMARK 3 FROM WILSON PLOT (A**2) : NULL
+REMARK 3 MEAN B VALUE (OVERALL, A**2) : NULL
+REMARK 3 OVERALL ANISOTROPIC B VALUE.
+REMARK 3 B11 (A**2) : 0.51090
+REMARK 3 B22 (A**2) : -3.44720
+REMARK 3 B33 (A**2) : -8.26450
+REMARK 3 B12 (A**2) : 0.00000
+REMARK 3 B13 (A**2) : 0.77970
+REMARK 3 B23 (A**2) : 0.00000
+REMARK 3
+REMARK 3 TWINNING INFORMATION.
+REMARK 3 FRACTION: NULL
+REMARK 3 OPERATOR: NULL
+REMARK 3
+REMARK 3 DEVIATIONS FROM IDEAL VALUES.
+REMARK 3 RMSD COUNT
+REMARK 3 BOND : 0.004 46
+REMARK 3 ANGLE : 0.975 62
+REMARK 3 CHIRALITY : 0.056 8
+REMARK 3 PLANARITY : 0.004 8
+REMARK 3 DIHEDRAL : 10.740 15
+REMARK 3
+REMARK 3 TLS DETAILS
+REMARK 3 NUMBER OF TLS GROUPS : 1
+REMARK 3 TLS GROUP : 1
+REMARK 3 SELECTION: ALL
+REMARK 3 ORIGIN FOR THE GROUP (A): 4.5323 0.1096 3.9760
+REMARK 3 T TENSOR
+REMARK 3 T11: -0.1260 T22: -0.0788
+REMARK 3 T33: -0.0487 T12: 0.0821
+REMARK 3 T13: -0.0518 T23: 0.0723
+REMARK 3 L TENSOR
+REMARK 3 L11: 0.1003 L22: 0.0184
+REMARK 3 L33: 0.0647 L12: -0.0319
+REMARK 3 L13: 0.0506 L23: -0.0233
+REMARK 3 S TENSOR
+REMARK 3 S11: 0.0084 S12: -0.0300 S13: -0.0565
+REMARK 3 S21: 0.0231 S22: 0.0090 S23: 0.0127
+REMARK 3 S31: -0.0046 S32: -0.0049 S33: -0.0009
+REMARK 3
+REMARK 3 NCS DETAILS
+REMARK 3 NUMBER OF NCS GROUPS : NULL
+REMARK 3
+REMARK 3 OTHER REFINEMENT REMARKS: NULL
+REMARK 4
+REMARK 4 5E5Z COMPLIES WITH FORMAT V. 3.30, 13-JUL-11
+REMARK 100
+REMARK 100 THIS ENTRY HAS BEEN PROCESSED BY RCSB ON 09-OCT-15.
+REMARK 100 THE DEPOSITION ID IS D_1000214421.
+REMARK 200
+REMARK 200 EXPERIMENTAL DETAILS
+REMARK 200 EXPERIMENT TYPE : X-RAY DIFFRACTION
+REMARK 200 DATE OF DATA COLLECTION : 10-MAR-10
+REMARK 200 TEMPERATURE (KELVIN) : 291
+REMARK 200 PH : NULL
+REMARK 200 NUMBER OF CRYSTALS USED : NULL
+REMARK 200
+REMARK 200 SYNCHROTRON (Y/N) : Y
+REMARK 200 RADIATION SOURCE : APS
+REMARK 200 BEAMLINE : 24-ID-E
+REMARK 200 X-RAY GENERATOR MODEL : NULL
+REMARK 200 MONOCHROMATIC OR LAUE (M/L) : M
+REMARK 200 WAVELENGTH OR RANGE (A) : 0.979
+REMARK 200 MONOCHROMATOR : NULL
+REMARK 200 OPTICS : NULL
+REMARK 200
+REMARK 200 DETECTOR TYPE : CCD
+REMARK 200 DETECTOR MANUFACTURER : ADSC QUANTUM 315
+REMARK 200 INTENSITY-INTEGRATION SOFTWARE : DENZO
+REMARK 200 DATA SCALING SOFTWARE : NULL
+REMARK 200
+REMARK 200 NUMBER OF UNIQUE REFLECTIONS : 1136
+REMARK 200 RESOLUTION RANGE HIGH (A) : 1.600
+REMARK 200 RESOLUTION RANGE LOW (A) : 100.000
+REMARK 200 REJECTION CRITERIA (SIGMA(I)) : NULL
+REMARK 200
+REMARK 200 OVERALL.
+REMARK 200 COMPLETENESS FOR RANGE (%) : 92.9
+REMARK 200 DATA REDUNDANCY : 2.900
+REMARK 200 R MERGE (I) : 0.07600
+REMARK 200 R SYM (I) : NULL
+REMARK 200 FOR THE DATA SET : 17.8600
+REMARK 200
+REMARK 200 IN THE HIGHEST RESOLUTION SHELL.
+REMARK 200 HIGHEST RESOLUTION SHELL, RANGE HIGH (A) : NULL
+REMARK 200 HIGHEST RESOLUTION SHELL, RANGE LOW (A) : NULL
+REMARK 200 COMPLETENESS FOR SHELL (%) : NULL
+REMARK 200 DATA REDUNDANCY IN SHELL : NULL
+REMARK 200 R MERGE FOR SHELL (I) : NULL
+REMARK 200 R SYM FOR SHELL (I) : NULL
+REMARK 200 FOR SHELL : NULL
+REMARK 200
+REMARK 200 DIFFRACTION PROTOCOL: SINGLE WAVELENGTH
+REMARK 200 METHOD USED TO DETERMINE THE STRUCTURE: MOLECULAR REPLACEMENT
+REMARK 200 SOFTWARE USED: PHASER
+REMARK 200 STARTING MODEL: NULL
+REMARK 200
+REMARK 200 REMARK: NULL
+REMARK 280
+REMARK 280 CRYSTAL
+REMARK 280 SOLVENT CONTENT, VS (%): 6.59
+REMARK 280 MATTHEWS COEFFICIENT, VM (ANGSTROMS**3/DA): 1.32
+REMARK 280
+REMARK 280 CRYSTALLIZATION CONDITIONS: 20 MG/ML IN WATER AND MIXED WITH 0.09
+REMARK 280 M HEPES PH 7.5, 1.26M TRI-SODIUM CITRATE, AND 10% GLYCEROL,
+REMARK 280 VAPOR DIFFUSION, HANGING DROP, TEMPERATURE 291K
+REMARK 290
+REMARK 290 CRYSTALLOGRAPHIC SYMMETRY
+REMARK 290 SYMMETRY OPERATORS FOR SPACE GROUP: P 1 21 1
+REMARK 290
+REMARK 290 SYMOP SYMMETRY
+REMARK 290 NNNMMM OPERATOR
+REMARK 290 1555 X,Y,Z
+REMARK 290 2555 -X,Y+1/2,-Z
+REMARK 290
+REMARK 290 WHERE NNN -> OPERATOR NUMBER
+REMARK 290 MMM -> TRANSLATION VECTOR
+REMARK 290
+REMARK 290 CRYSTALLOGRAPHIC SYMMETRY TRANSFORMATIONS
+REMARK 290 THE FOLLOWING TRANSFORMATIONS OPERATE ON THE ATOM/HETATM
+REMARK 290 RECORDS IN THIS ENTRY TO PRODUCE CRYSTALLOGRAPHICALLY
+REMARK 290 RELATED MOLECULES.
+REMARK 290 SMTRY1 1 1.000000 0.000000 0.000000 0.00000
+REMARK 290 SMTRY2 1 0.000000 1.000000 0.000000 0.00000
+REMARK 290 SMTRY3 1 0.000000 0.000000 1.000000 0.00000
+REMARK 290 SMTRY1 2 -1.000000 0.000000 0.000000 0.00000
+REMARK 290 SMTRY2 2 0.000000 1.000000 0.000000 4.80450
+REMARK 290 SMTRY3 2 0.000000 0.000000 -1.000000 0.00000
+REMARK 290
+REMARK 290 REMARK: NULL
+REMARK 300
+REMARK 300 BIOMOLECULE: 1
+REMARK 300 SEE REMARK 350 FOR THE AUTHOR PROVIDED AND/OR PROGRAM
+REMARK 300 GENERATED ASSEMBLY INFORMATION FOR THE STRUCTURE IN
+REMARK 300 THIS ENTRY. THE REMARK MAY ALSO PROVIDE INFORMATION ON
+REMARK 300 BURIED SURFACE AREA.
+REMARK 350
+REMARK 350 COORDINATES FOR A COMPLETE MULTIMER REPRESENTING THE KNOWN
+REMARK 350 BIOLOGICALLY SIGNIFICANT OLIGOMERIZATION STATE OF THE
+REMARK 350 MOLECULE CAN BE GENERATED BY APPLYING BIOMT TRANSFORMATIONS
+REMARK 350 GIVEN BELOW. BOTH NON-CRYSTALLOGRAPHIC AND
+REMARK 350 CRYSTALLOGRAPHIC OPERATIONS ARE GIVEN.
+REMARK 350
+REMARK 350 BIOMOLECULE: 1
+REMARK 350 AUTHOR DETERMINED BIOLOGICAL UNIT: DECAMERIC
+REMARK 350 APPLY THE FOLLOWING TO CHAINS: A
+REMARK 350 BIOMT1 1 1.000000 0.000000 0.000000 0.00000
+REMARK 350 BIOMT2 1 0.000000 1.000000 0.000000 0.00000
+REMARK 350 BIOMT3 1 0.000000 0.000000 1.000000 0.00000
+REMARK 350 BIOMT1 2 1.000000 0.000000 0.000000 0.00000
+REMARK 350 BIOMT2 2 0.000000 1.000000 0.000000 -9.60900
+REMARK 350 BIOMT3 2 0.000000 0.000000 1.000000 0.00000
+REMARK 350 BIOMT1 3 1.000000 0.000000 0.000000 0.00000
+REMARK 350 BIOMT2 3 0.000000 1.000000 0.000000 9.60900
+REMARK 350 BIOMT3 3 0.000000 0.000000 1.000000 0.00000
+REMARK 350 BIOMT1 4 1.000000 0.000000 0.000000 9.64300
+REMARK 350 BIOMT2 4 0.000000 1.000000 0.000000 0.00000
+REMARK 350 BIOMT3 4 0.000000 0.000000 1.000000 0.00000
+REMARK 350 BIOMT1 5 1.000000 0.000000 0.000000 9.64300
+REMARK 350 BIOMT2 5 0.000000 1.000000 0.000000 -9.60900
+REMARK 350 BIOMT3 5 0.000000 0.000000 1.000000 0.00000
+REMARK 350 BIOMT1 6 1.000000 0.000000 0.000000 9.64300
+REMARK 350 BIOMT2 6 0.000000 1.000000 0.000000 9.60900
+REMARK 350 BIOMT3 6 0.000000 0.000000 1.000000 0.00000
+REMARK 350 BIOMT1 7 -1.000000 0.000000 0.000000 9.64300
+REMARK 350 BIOMT2 7 0.000000 1.000000 0.000000 -4.80450
+REMARK 350 BIOMT3 7 0.000000 0.000000 -1.000000 0.00000
+REMARK 350 BIOMT1 8 -1.000000 0.000000 0.000000 9.64300
+REMARK 350 BIOMT2 8 0.000000 1.000000 0.000000 4.80450
+REMARK 350 BIOMT3 8 0.000000 0.000000 -1.000000 0.00000
+REMARK 350 BIOMT1 9 -1.000000 0.000000 0.000000 19.28600
+REMARK 350 BIOMT2 9 0.000000 1.000000 0.000000 -4.80450
+REMARK 350 BIOMT3 9 0.000000 0.000000 -1.000000 0.00000
+REMARK 350 BIOMT1 10 -1.000000 0.000000 0.000000 19.28600
+REMARK 350 BIOMT2 10 0.000000 1.000000 0.000000 4.80450
+REMARK 350 BIOMT3 10 0.000000 0.000000 -1.000000 0.00000
+REMARK 900
+REMARK 900 RELATED ENTRIES
+REMARK 900 RELATED ID: 5E5V RELATED DB: PDB
+REMARK 900 RELATED ID: 5E5X RELATED DB: PDB
+REMARK 900 RELATED ID: 5E61 RELATED DB: PDB
+DBREF 5E5Z A 1 6 PDB 5E5Z 5E5Z 1 6
+SEQRES 1 A 6 LEU VAL HIS SER SER ASN
+FORMUL 2 HOH *(H2 O)
+CRYST1 9.643 9.609 19.029 90.00 101.22 90.00 P 1 21 1 2
+ORIGX1 1.000000 0.000000 0.000000 0.00000
+ORIGX2 0.000000 1.000000 0.000000 0.00000
+ORIGX3 0.000000 0.000000 1.000000 0.00000
+SCALE1 0.103702 0.000000 0.020579 0.00000
+SCALE2 0.000000 0.104069 0.000000 0.00000
+SCALE3 0.000000 0.000000 0.053576 0.00000
+ATOM 1 N LEU A 1 6.078 -0.306 -5.753 1.00 0.00 N
+ANISOU 1 N LEU A 1 0 0 0 0 0 0 N
+ATOM 2 CA LEU A 1 5.166 -0.026 -4.647 1.00 2.42 C
+ANISOU 2 CA LEU A 1 307 307 307 0 0 0 C
+ATOM 3 C LEU A 1 5.682 -0.642 -3.356 1.00 3.48 C
+ANISOU 3 C LEU A 1 435 443 445 1 1 9 C
+ATOM 4 O LEU A 1 6.056 -1.814 -3.322 1.00 3.52 O
+ANISOU 4 O LEU A 1 436 449 454 2 2 16 O
+ATOM 5 CB LEU A 1 3.755 -0.555 -4.967 1.00 1.86 C
+ANISOU 5 CB LEU A 1 232 237 238 1 1 5 C
+ATOM 6 CG LEU A 1 2.596 -0.354 -3.975 1.00 6.87 C
+ANISOU 6 CG LEU A 1 861 873 877 2 2 14 C
+ATOM 7 CD1 LEU A 1 2.753 -1.182 -2.704 1.00 11.83 C
+ANISOU 7 CD1 LEU A 1 1481 1504 1512 4 4 27 C
+ATOM 8 CD2 LEU A 1 2.404 1.122 -3.638 1.00 4.27 C
+ANISOU 8 CD2 LEU A 1 537 543 544 1 2 7 C
+ATOM 9 N VAL A 2 5.715 0.161 -2.297 1.00 0.61 N
+ANISOU 9 N VAL A 2 71 80 82 2 2 11 N
+ATOM 10 CA VAL A 2 5.968 -0.352 -0.960 1.00 0.12 C
+ANISOU 10 CA VAL A 2 1 20 24 4 4 22 C
+ATOM 11 C VAL A 2 4.976 0.281 0.000 1.00 3.40 C
+ANISOU 11 C VAL A 2 413 437 440 5 5 27 C
+ATOM 12 O VAL A 2 4.746 1.489 -0.046 1.00 3.22 O
+ANISOU 12 O VAL A 2 395 414 414 4 5 20 O
+ATOM 13 CB VAL A 2 7.400 -0.027 -0.475 1.00 3.56 C
+ANISOU 13 CB VAL A 2 440 456 458 3 3 18 C
+ATOM 14 CG1 VAL A 2 7.566 -0.421 0.993 1.00 7.93 C
+ANISOU 14 CG1 VAL A 2 986 1012 1016 5 5 30 C
+ATOM 15 CG2 VAL A 2 8.429 -0.722 -1.342 1.00 6.71 C
+ANISOU 15 CG2 VAL A 2 841 853 856 2 2 14 C
+ATOM 16 N HIS A 3 4.367 -0.537 0.850 1.00 0.22 N
+ANISOU 16 N HIS A 3 1 38 44 7 8 41 N
+ATOM 17 CA HIS A 3 3.603 -0.011 1.971 1.00 1.73 C
+ANISOU 17 CA HIS A 3 189 233 237 10 10 48 C
+ATOM 18 C HIS A 3 4.003 -0.675 3.280 1.00 1.84 C
+ANISOU 18 C HIS A 3 194 250 255 12 12 61 C
+ATOM 19 O HIS A 3 4.208 -1.889 3.338 1.00 0.73 O
+ANISOU 19 O HIS A 3 47 109 120 11 12 69 O
+ATOM 20 CB HIS A 3 2.095 -0.177 1.781 1.00 2.62 C
+ANISOU 20 CB HIS A 3 296 346 351 11 11 54 C
+ATOM 21 CG HIS A 3 1.324 0.074 3.040 1.00 2.97 C
+ANISOU 21 CG HIS A 3 335 396 399 14 14 66 C
+ATOM 22 ND1 HIS A 3 0.950 -0.937 3.900 1.00 4.29 N
+ANISOU 22 ND1 HIS A 3 491 566 573 16 17 82 N
+ATOM 23 CD2 HIS A 3 0.921 1.230 3.620 1.00 4.90 C
+ANISOU 23 CD2 HIS A 3 581 642 639 16 16 64 C
+ATOM 24 CE1 HIS A 3 0.321 -0.417 4.940 1.00 5.53 C
+ANISOU 24 CE1 HIS A 3 644 727 729 20 20 89 C
+ATOM 25 NE2 HIS A 3 0.290 0.896 4.794 1.00 6.02 N
+ANISOU 25 NE2 HIS A 3 714 790 785 20 19 78 N
+ATOM 26 N SER A 4 4.099 0.141 4.326 1.00 0.34 N
+ANISOU 26 N SER A 4 3 63 63 14 14 62 N
+ATOM 27 CA SER A 4 4.357 -0.330 5.683 1.00 1.49 C
+ANISOU 27 CA SER A 4 141 213 213 16 16 75 C
+ATOM 28 C SER A 4 3.814 0.686 6.681 1.00 2.14 C
+ANISOU 28 C SER A 4 222 299 292 20 19 78 C
+ATOM 29 O SER A 4 4.008 1.889 6.507 1.00 3.47 O
+ANISOU 29 O SER A 4 397 465 454 19 18 68 O
+ATOM 30 CB SER A 4 5.858 -0.513 5.905 1.00 5.61 C
+ANISOU 30 CB SER A 4 665 734 734 15 15 72 C
+ATOM 31 OG SER A 4 6.132 -0.771 7.272 1.00 9.89 O
+ANISOU 31 OG SER A 4 1200 1280 1278 18 18 83 O
+ATOM 32 N SER A 5 3.138 0.213 7.725 1.00 2.34 N
+ANISOU 32 N SER A 5 239 330 322 24 23 93 N
+ATOM 33 CA SER A 5 2.651 1.119 8.765 1.00 0.66 C
+ANISOU 33 CA SER A 5 24 123 106 28 26 97 C
+ATOM 34 C SER A 5 3.677 1.311 9.885 1.00 2.66 C
+ANISOU 34 C SER A 5 275 378 356 30 27 100 C
+ATOM 35 O SER A 5 3.411 2.024 10.851 1.00 2.02 O
+ANISOU 35 O SER A 5 193 303 273 35 30 104 O
+ATOM 36 CB SER A 5 1.318 0.639 9.350 1.00 2.68 C
+ANISOU 36 CB SER A 5 269 383 365 32 29 113 C
+ATOM 37 OG SER A 5 1.478 -0.544 10.117 1.00 2.49 O
+ANISOU 37 OG SER A 5 236 363 349 33 31 128 O
+ATOM 38 N ASN A 6 4.838 0.672 9.758 1.00 2.94 N
+ANISOU 38 N ASN A 6 311 412 394 28 25 98 N
+ATOM 39 CA ASN A 6 5.912 0.838 10.741 1.00 4.68 C
+ANISOU 39 CA ASN A 6 530 634 613 29 26 100 C
+ATOM 40 C ASN A 6 6.574 2.203 10.638 1.00 10.84 C
+ANISOU 40 C ASN A 6 1320 1413 1387 28 24 87 C
+ATOM 41 O ASN A 6 7.335 2.594 11.519 1.00 13.68 O
+ANISOU 41 O ASN A 6 1680 1775 1745 30 26 88 O
+ATOM 42 CB ASN A 6 6.986 -0.243 10.589 1.00 5.08 C
+ANISOU 42 CB ASN A 6 579 682 668 27 25 102 C
+ATOM 43 CG ASN A 6 6.592 -1.558 11.236 1.00 8.08 C
+ANISOU 43 CG ASN A 6 948 1067 1057 28 27 120 C
+ATOM 44 OD1 ASN A 6 5.576 -1.644 11.923 1.00 8.72 O
+ANISOU 44 OD1 ASN A 6 1022 1152 1139 32 30 131 O
+ATOM 45 ND2 ASN A 6 7.409 -2.588 11.030 1.00 9.89 N
+ANISOU 45 ND2 ASN A 6 1174 1293 1290 25 25 122 N
+ATOM 46 OXT ASN A 6 6.383 2.933 9.667 1.00 14.02 O
+ANISOU 46 OXT ASN A 6 1730 1811 1787 25 22 75 O
+TER 47 ASN A 6
+HETATM 48 O HOH A 101 8.203 1.052 -4.564 1.00 12.67 O
+ANISOU 48 O HOH A 101 1605 1605 1605 0 0 0 O
+MASTER 227 0 0 0 0 0 0 6 47 1 0 1
+END
diff --git a/lib/galaxy/datatypes/test/drugbank_drugs.cml b/lib/galaxy/datatypes/test/drugbank_drugs.cml
new file mode 100644
index 00000000000..a807bd8166c
--- /dev/null
+++ b/lib/galaxy/datatypes/test/drugbank_drugs.cml
@@ -0,0 +1,385 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+ 1
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+ 1
+
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/test/drugbank_drugs.inchi b/lib/galaxy/datatypes/test/drugbank_drugs.inchi
new file mode 100644
index 00000000000..4a9224d2d3f
--- /dev/null
+++ b/lib/galaxy/datatypes/test/drugbank_drugs.inchi
@@ -0,0 +1,2 @@
+InChI=1S/C59H84N18O14/c1-31(2)22-40(49(82)68-39(12-8-20-64-57(60)61)56(89)77-21-9-13-46(77)55(88)75-76-58(62)90)69-54(87)45(29-91-59(3,4)5)74-50(83)41(23-32-14-16-35(79)17-15-32)70-53(86)44(28-78)73-51(84)42(24-33-26-65-37-11-7-6-10-36(33)37)71-52(85)43(25-34-27-63-30-66-34)72-48(81)38-18-19-47(80)67-38/h6-7,10-11,14-17,26-27,30-31,38-46,65,78-79H,8-9,12-13,18-25,28-29H2,1-5H3,(H,63,66)(H,67,80)(H,68,82)(H,69,87)(H,70,86)(H,71,85)(H,72,81)(H,73,84)(H,74,83)(H,75,88)(H4,60,61,64)(H3,62,76,90)/t38-,39-,40-,41-,42-,43-,44-,45+,46-/m0/s1
+InChI=1S/C46H64N14O12S2/c47-35(62)15-14-29-40(67)58-32(22-36(48)63)43(70)59-33(45(72)60-18-5-9-34(60)44(71)56-28(8-4-17-52-46(50)51)39(66)53-23-37(49)64)24-74-73-19-16-38(65)54-30(21-26-10-12-27(61)13-11-26)41(68)57-31(42(69)55-29)20-25-6-2-1-3-7-25/h1-3,6-7,10-13,28-34,61H,4-5,8-9,14-24H2,(H2,47,62)(H2,48,63)(H2,49,64)(H,53,66)(H,54,65)(H,55,69)(H,56,71)(H,57,68)(H,58,67)(H,59,70)(H4,50,51,52)/t28-,29-,30-,31-,32-,33-,34-/m0/s1
diff --git a/lib/galaxy/datatypes/test/drugbank_drugs.mol2 b/lib/galaxy/datatypes/test/drugbank_drugs.mol2
new file mode 100644
index 00000000000..356242db586
--- /dev/null
+++ b/lib/galaxy/datatypes/test/drugbank_drugs.mol2
@@ -0,0 +1,354 @@
+@MOLECULE
+Goserelin
+ 91 96 0 0 0
+SMALL
+GASTEIGER
+
+@ATOM
+ 1 O 12.8548 -2.6382 0.0000 O.2 4 UNK4 -0.2730
+ 2 O 13.9726 -2.5226 0.0000 O.2 4 UNK4 -0.2699
+ 3 O 10.1766 -3.9327 0.0000 O.2 4 UNK4 -0.2715
+ 4 O 11.2019 -0.7961 0.0000 O.3 4 UNK4 -0.3562
+ 5 O 8.7800 -1.3064 0.0000 O.2 4 UNK4 -0.2714
+ 6 O 16.8589 -3.2421 0.0000 O.2 4 UNK4 -0.2457
+ 7 O 10.3562 1.2163 0.0000 O.2 4 UNK4 -0.2715
+ 8 O 3.2702 4.8341 0.0000 O.2 1 UNK1 -0.2715
+ 9 O 2.3500 8.2734 0.0000 O.2 1 UNK1 -0.2733
+ 10 O 3.8213 4.2201 0.0000 O.2 2 HIS2 -0.2715
+ 11 O 5.2178 1.5938 0.0000 O.2 3 TRP3 -0.2715
+ 12 O 7.8960 2.8883 0.0000 O.2 4 UNK4 -0.2714
+ 13 O 7.1271 0.5358 0.0000 O.3 4 UNK4 -0.2179
+ 14 O 12.4834 3.1249 0.0000 O.3 4 UNK4 -0.2866
+ 15 N 13.1495 -4.0364 0.0000 N.am 4 UNK4 -0.2715
+ 16 N 11.2402 -2.9784 0.0000 N.am 4 UNK4 -0.1964
+ 17 N 15.2089 -3.2393 0.0000 N.am 4 UNK4 -0.0850
+ 18 N 10.1383 -1.7503 0.0000 N.am 4 UNK4 -0.1963
+ 19 N 15.6226 -2.5255 0.0000 N.am 4 UNK4 -0.0678
+ 20 N 12.3806 -6.3890 0.0000 N.pl3 4 UNK4 -0.0865
+ 21 N 9.2926 0.2619 0.0000 N.am 4 UNK4 -0.1937
+ 22 N 3.1485 7.0391 0.0000 N.am 1 UNK1 -0.1978
+ 23 N 4.3338 5.7884 0.0000 N.am 2 HIS2 -0.1959
+ 24 N 16.8613 -1.8132 0.0000 N.am 4 UNK4 -0.0665
+ 25 N 8.1907 1.4900 0.0000 N.am 4 UNK4 -0.1959
+ 26 N 5.1795 3.7761 0.0000 N.am 3 TRP3 -0.1960
+ 27 N 6.2814 2.5480 0.0000 N.am 4 UNK4 -0.1936
+ 28 N 11.3170 -7.3433 0.0000 N.pl3 4 UNK4 0.1354
+ 29 N 12.6753 -7.7873 0.0000 N.pl3 4 UNK4 0.1354
+ 30 NE1 3.8596 0.7098 0.0000 N.ar 3 TRP3 -0.2442
+ 31 ND1 6.7335 6.3823 0.0000 N.ar 2 HIS2 -0.2267
+ 32 NE2 5.9507 7.4636 0.0000 N.ar 2 HIS2 -0.2212
+ 33 C 13.9701 -3.9516 0.0000 C.3 4 UNK4 0.1552
+ 34 C 14.3043 -4.7058 0.0000 C.3 4 UNK4 0.0311
+ 35 C 13.6903 -5.2569 0.0000 C.3 4 UNK4 0.0237
+ 36 C 12.9766 -4.8431 0.0000 C.3 4 UNK4 0.0939
+ 37 C 12.5984 -3.4224 0.0000 C.2 4 UNK4 0.2458
+ 38 C 11.7912 -3.5925 0.0000 C.3 4 UNK4 0.1714
+ 39 C 14.3838 -3.2378 0.0000 C.2 4 UNK4 0.2788
+ 40 C 11.5349 -4.3767 0.0000 C.3 4 UNK4 0.0347
+ 41 C 12.0859 -4.9907 0.0000 C.3 4 UNK4 0.0492
+ 42 C 9.8819 -2.5345 0.0000 C.3 4 UNK4 0.1728
+ 43 C 10.4330 -3.1486 0.0000 C.2 4 UNK4 0.2616
+ 44 C 9.0747 -2.7046 0.0000 C.3 4 UNK4 0.0311
+ 45 C 8.8184 -3.4889 0.0000 C.3 4 UNK4 0.0022
+ 46 C 11.8295 -5.7750 0.0000 C.3 4 UNK4 0.2205
+ 47 C 8.0112 -3.6590 0.0000 C.3 4 UNK4 0.0001
+ 48 C 9.3694 -4.1029 0.0000 C.3 4 UNK4 0.0001
+ 49 C 9.5873 -1.1363 0.0000 C.2 4 UNK4 0.2642
+ 50 C 9.8436 -0.3521 0.0000 C.3 4 UNK4 0.2021
+ 51 C 10.6509 -0.1820 0.0000 C.3 4 UNK4 0.1729
+ 52 C 16.4476 -2.5269 0.0000 C.2 4 UNK4 0.3786
+ 53 C 2.9756 6.2324 0.0000 C.3 1 UNK1 0.1732
+ 54 C 12.0091 -0.6259 0.0000 C.3 4 UNK4 0.0931
+ 55 C 8.9979 1.6602 0.0000 C.3 4 UNK4 0.1771
+ 56 C 9.5489 1.0461 0.0000 C.2 4 UNK4 0.2620
+ 57 C 12.1242 -7.1732 0.0000 C.cat 4 UNK4 0.5346
+ 58 C 2.1549 6.1475 0.0000 C.3 1 UNK1 0.0407
+ 59 CA 4.8848 5.1744 0.0000 C.3 2 HIS2 0.1787
+ 60 CA 4.9232 2.9920 0.0000 C.3 3 TRP3 0.1771
+ 61 C 1.8207 6.9019 0.0000 C.3 1 UNK1 0.0891
+ 62 C 9.2542 2.4444 0.0000 C.3 4 UNK4 0.0574
+ 63 CB 4.1159 2.8219 0.0000 C.3 3 TRP3 0.0590
+ 64 C 3.5266 5.6183 0.0000 C.2 1 UNK1 0.2616
+ 65 C 2.4348 7.4528 0.0000 C.2 1 UNK1 0.2418
+ 66 CB 5.6921 5.3445 0.0000 C.3 2 HIS2 0.0785
+ 67 C 6.8324 1.9340 0.0000 C.3 4 UNK4 0.2055
+ 68 C 4.6285 4.3902 0.0000 C.2 2 HIS2 0.2620
+ 69 C 12.1793 -1.4332 0.0000 C.3 4 UNK4 0.0296
+ 70 C 12.8164 -0.4557 0.0000 C.3 4 UNK4 0.0296
+ 71 C 11.8389 0.1814 0.0000 C.3 4 UNK4 0.0296
+ 72 CG 3.8596 2.0376 0.0000 C.ar 3 TRP3 0.0006
+ 73 C 5.4742 2.3779 0.0000 C.2 3 TRP3 0.2620
+ 74 C 7.6397 2.1041 0.0000 C.2 4 UNK4 0.2643
+ 75 C 10.0615 2.6145 0.0000 C.ar 4 UNK4 -0.0198
+ 76 CD2 3.0790 1.7862 0.0000 C.ar 3 TRP3 0.0152
+ 77 CG 5.9484 6.1287 0.0000 C.ar 2 HIS2 0.0821
+ 78 CD1 4.3411 1.3737 0.0000 C.ar 3 TRP3 0.0946
+ 79 CE2 3.0790 0.9612 0.0000 C.ar 3 TRP3 0.0810
+ 80 C 6.5761 1.1498 0.0000 C.3 4 UNK4 0.2130
+ 81 CE3 2.3645 2.1987 0.0000 C.ar 3 TRP3 0.0012
+ 82 C 10.3178 3.3987 0.0000 C.ar 4 UNK4 -0.0009
+ 83 C 10.6125 2.0005 0.0000 C.ar 4 UNK4 -0.0009
+ 84 CZ2 2.3645 0.5487 0.0000 C.ar 3 TRP3 0.0191
+ 85 CD2 5.4646 6.7970 0.0000 C.ar 2 HIS2 0.1154
+ 86 CZ3 1.6500 1.7862 0.0000 C.ar 3 TRP3 0.0001
+ 87 CH2 1.6500 0.9612 0.0000 C.ar 3 TRP3 0.0015
+ 88 C 11.1251 3.5688 0.0000 C.ar 4 UNK4 0.0417
+ 89 C 11.4198 2.1706 0.0000 C.ar 4 UNK4 0.0417
+ 90 CE1 6.7349 7.2073 0.0000 C.ar 2 HIS2 0.1986
+ 91 C 11.6761 2.9548 0.0000 C.ar 4 UNK4 0.1957
+@BOND
+ 1 1 37 2
+ 2 2 39 2
+ 3 3 43 2
+ 4 4 51 1
+ 5 4 54 1
+ 6 5 49 2
+ 7 6 52 2
+ 8 7 56 2
+ 9 8 64 2
+ 10 9 65 2
+ 11 10 68 2
+ 12 11 73 2
+ 13 12 74 2
+ 14 13 80 1
+ 15 14 91 1
+ 16 15 33 1
+ 17 15 36 1
+ 18 15 37 am
+ 19 38 16 1
+ 20 16 43 am
+ 21 17 19 1
+ 22 17 39 am
+ 23 42 18 1
+ 24 18 49 am
+ 25 19 52 am
+ 26 20 46 1
+ 27 20 57 2
+ 28 50 21 1
+ 29 21 56 am
+ 30 22 53 1
+ 31 22 65 am
+ 32 59 23 1
+ 33 23 64 am
+ 34 24 52 am
+ 35 55 25 1
+ 36 25 74 am
+ 37 60 26 1
+ 38 26 68 am
+ 39 67 27 1
+ 40 27 73 am
+ 41 28 57 1
+ 42 29 57 1
+ 43 30 78 ar
+ 44 30 79 ar
+ 45 31 77 ar
+ 46 31 90 ar
+ 47 32 85 ar
+ 48 32 90 ar
+ 49 33 34 1
+ 50 33 39 1
+ 51 34 35 1
+ 52 35 36 1
+ 53 37 38 1
+ 54 38 40 1
+ 55 40 41 1
+ 56 41 46 1
+ 57 42 43 1
+ 58 42 44 1
+ 59 44 45 1
+ 60 45 47 1
+ 61 45 48 1
+ 62 49 50 1
+ 63 50 51 1
+ 64 53 58 1
+ 65 53 64 1
+ 66 54 69 1
+ 67 54 70 1
+ 68 54 71 1
+ 69 55 56 1
+ 70 55 62 1
+ 71 58 61 1
+ 72 59 66 1
+ 73 59 68 1
+ 74 60 63 1
+ 75 60 73 1
+ 76 61 65 1
+ 77 62 75 1
+ 78 63 72 1
+ 79 66 77 1
+ 80 67 74 1
+ 81 67 80 1
+ 82 72 76 ar
+ 83 72 78 ar
+ 84 75 82 ar
+ 85 75 83 ar
+ 86 76 79 ar
+ 87 76 81 ar
+ 88 77 85 ar
+ 89 79 84 ar
+ 90 81 86 ar
+ 91 82 88 ar
+ 92 83 89 ar
+ 93 84 87 ar
+ 94 86 87 ar
+ 95 88 91 ar
+ 96 89 91 ar
+@MOLECULE
+Desmopressin
+ 74 77 0 0 0
+SMALL
+GASTEIGER
+
+@ATOM
+ 1 N 0.0000 -7.8646 0.0000 N.am 1 LIG1 -0.0862
+ 2 C 0.6741 -7.4601 0.0000 C.2 1 LIG1 0.2828
+ 3 C 1.3932 -7.8646 0.0000 C.3 1 LIG1 0.2031
+ 4 N 2.1122 -7.4601 0.0000 N.am 1 LIG1 -0.1939
+ 5 C 2.8313 -7.8646 0.0000 C.2 1 LIG1 0.2617
+ 6 C 3.5503 -7.4601 0.0000 C.3 1 LIG1 0.1729
+ 7 N 4.2693 -7.8646 0.0000 N.am 1 LIG1 -0.1964
+ 8 C 4.9435 -7.4601 0.0000 C.2 1 LIG1 0.2598
+ 9 O 5.6625 -7.8646 0.0000 O.2 1 LIG1 -0.2715
+ 10 O 0.6741 -6.6512 0.0000 O.2 1 LIG1 -0.2697
+ 11 O 2.8313 -8.7184 0.0000 O.2 1 LIG1 -0.2715
+ 12 C 3.5503 -6.6512 0.0000 C.3 1 LIG1 0.0348
+ 13 C 2.8313 -6.2467 0.0000 C.3 1 LIG1 0.0492
+ 14 C 2.8313 -5.4378 0.0000 C.3 1 LIG1 0.2205
+ 15 N 2.1122 -5.0333 0.0000 N.pl3 1 LIG1 -0.0865
+ 16 C 4.9435 -6.6512 0.0000 C.3 1 LIG1 0.1536
+ 17 C 4.3143 -6.1568 0.0000 C.3 1 LIG1 0.0310
+ 18 N 5.6176 -6.1568 0.0000 N.am 1 LIG1 -0.2715
+ 19 C 4.5390 -5.3929 0.0000 C.3 1 LIG1 0.0237
+ 20 C 5.3479 -5.3929 0.0000 C.3 1 LIG1 0.0939
+ 21 C 6.3366 -6.5613 0.0000 C.2 1 LIG1 0.2467
+ 22 C 7.0557 -6.1568 0.0000 C.3 1 LIG1 0.1828
+ 23 N 7.7747 -6.5613 0.0000 N.am 1 LIG1 -0.1954
+ 24 C 8.4488 -6.1568 0.0000 C.2 1 LIG1 0.2621
+ 25 C 9.1678 -6.5613 0.0000 C.3 1 LIG1 0.1819
+ 26 N 9.8869 -6.1568 0.0000 N.am 1 LIG1 -0.1958
+ 27 O 6.3366 -7.4152 0.0000 O.2 1 LIG1 -0.2730
+ 28 C 7.0557 -5.3479 0.0000 C.3 1 LIG1 0.0996
+ 29 S 6.3366 -4.9435 0.0000 S.3 1 LIG1 -0.0798
+ 30 S 6.3366 -4.1345 0.0000 S.3 1 LIG1 -0.0816
+ 31 O 8.4488 -5.3479 0.0000 O.2 1 LIG1 -0.2715
+ 32 C 9.1678 -7.4152 0.0000 C.3 1 LIG1 0.1195
+ 33 C 9.8869 -7.8197 0.0000 C.2 1 LIG1 0.2630
+ 34 O 9.8869 -8.6286 0.0000 O.2 1 LIG1 -0.2716
+ 35 N 10.6060 -7.4152 0.0000 N.am 1 LIG1 -0.0877
+ 36 C 9.8869 -5.3479 0.0000 C.2 1 LIG1 0.2616
+ 37 C 10.6060 -4.9435 0.0000 C.3 1 LIG1 0.1733
+ 38 O 9.1678 -4.9435 0.0000 O.2 1 LIG1 -0.2715
+ 39 C 11.3250 -5.3479 0.0000 C.3 1 LIG1 0.0408
+ 40 C 12.0441 -4.9435 0.0000 C.3 1 LIG1 0.0908
+ 41 C 12.7631 -5.3479 0.0000 C.2 1 LIG1 0.2608
+ 42 N 13.4822 -4.9435 0.0000 N.am 1 LIG1 -0.0878
+ 43 O 12.7631 -6.2018 0.0000 O.2 1 LIG1 -0.2717
+ 44 N 10.6060 -4.1345 0.0000 N.am 1 LIG1 -0.1963
+ 45 C 11.3250 -2.8762 0.0000 C.ar 1 LIG1 -0.0200
+ 46 C 11.3250 -3.7300 0.0000 C.ar 1 LIG1 -0.0042
+ 47 C 10.6060 -2.4717 0.0000 C.3 1 LIG1 0.0574
+ 48 C 9.8869 -2.8762 0.0000 C.3 1 LIG1 0.1771
+ 49 C 9.8869 -3.7300 0.0000 C.2 1 LIG1 0.2619
+ 50 C 12.7631 -2.8762 0.0000 C.ar 1 LIG1 -0.0003
+ 51 C 12.7631 -3.7300 0.0000 C.ar 1 LIG1 -0.0000
+ 52 C 12.0441 -2.4717 0.0000 C.ar 1 LIG1 -0.0042
+ 53 C 12.0441 -4.1345 0.0000 C.ar 1 LIG1 -0.0003
+ 54 N 7.0557 -2.8762 0.0000 N.am 1 LIG1 -0.1974
+ 55 C 6.3366 -2.4717 0.0000 C.2 1 LIG1 0.2427
+ 56 C 5.6176 -2.8762 0.0000 C.3 1 LIG1 0.0993
+ 57 C 5.6176 -3.7300 0.0000 C.3 1 LIG1 0.0783
+ 58 C 8.4488 -2.8762 0.0000 C.2 1 LIG1 0.2620
+ 59 O 8.4488 -3.7300 0.0000 O.2 1 LIG1 -0.2715
+ 60 C 7.7747 -2.4717 0.0000 C.3 1 LIG1 0.1770
+ 61 N 9.1678 -2.4717 0.0000 N.am 1 LIG1 -0.1960
+ 62 O 9.1678 -4.1345 0.0000 O.2 1 LIG1 -0.2715
+ 63 C 7.7747 -1.6628 0.0000 C.3 1 LIG1 0.0574
+ 64 C 9.1678 -1.6628 0.0000 C.ar 1 LIG1 -0.0009
+ 65 C 8.4488 -1.2583 0.0000 C.ar 1 LIG1 -0.0198
+ 66 C 9.8869 -1.2583 0.0000 C.ar 1 LIG1 0.0417
+ 67 C 9.8869 -0.4045 0.0000 C.ar 1 LIG1 0.1957
+ 68 C 8.4488 -0.4045 0.0000 C.ar 1 LIG1 -0.0009
+ 69 C 9.1678 0.0000 0.0000 C.ar 1 LIG1 0.0417
+ 70 O 6.3366 -1.6628 0.0000 O.2 1 LIG1 -0.2733
+ 71 O 10.6060 0.0000 0.0000 O.3 1 LIG1 -0.2866
+ 72 C 1.3932 -5.4378 0.0000 C.cat 1 LIG1 0.5346
+ 73 N 1.3932 -6.2467 0.0000 N.pl3 1 LIG1 0.1354
+ 74 N 0.6741 -5.0333 0.0000 N.pl3 1 LIG1 0.1354
+@BOND
+ 1 1 2 am
+ 2 2 3 1
+ 3 2 10 2
+ 4 3 4 1
+ 5 4 5 am
+ 6 5 6 1
+ 7 5 11 2
+ 8 6 7 1
+ 9 6 12 1
+ 10 7 8 am
+ 11 8 9 2
+ 12 16 8 1
+ 13 12 13 1
+ 14 13 14 1
+ 15 14 15 1
+ 16 15 72 1
+ 17 16 17 1
+ 18 16 18 1
+ 19 17 19 1
+ 20 18 20 1
+ 21 18 21 am
+ 22 19 20 1
+ 23 22 21 1
+ 24 21 27 2
+ 25 22 23 1
+ 26 22 28 1
+ 27 23 24 am
+ 28 24 25 1
+ 29 24 31 2
+ 30 25 26 1
+ 31 25 32 1
+ 32 26 36 am
+ 33 28 29 1
+ 34 29 30 1
+ 35 30 57 1
+ 36 32 33 1
+ 37 33 34 2
+ 38 33 35 am
+ 39 36 37 1
+ 40 36 38 2
+ 41 37 39 1
+ 42 37 44 1
+ 43 39 40 1
+ 44 40 41 1
+ 45 41 42 am
+ 46 41 43 2
+ 47 44 49 am
+ 48 45 47 1
+ 49 45 52 ar
+ 50 45 46 ar
+ 51 46 53 ar
+ 52 48 47 1
+ 53 48 61 1
+ 54 48 49 1
+ 55 49 62 2
+ 56 50 51 ar
+ 57 50 52 ar
+ 58 51 53 ar
+ 59 54 55 am
+ 60 54 60 1
+ 61 55 56 1
+ 62 55 70 2
+ 63 56 57 1
+ 64 58 59 2
+ 65 58 60 1
+ 66 58 61 am
+ 67 60 63 1
+ 68 63 65 1
+ 69 64 66 ar
+ 70 64 65 ar
+ 71 65 68 ar
+ 72 66 67 ar
+ 73 67 69 ar
+ 74 67 71 1
+ 75 68 69 ar
+ 76 72 73 2
+ 77 72 74 1
diff --git a/lib/galaxy/datatypes/test/drugbank_drugs.sdf b/lib/galaxy/datatypes/test/drugbank_drugs.sdf
new file mode 100644
index 00000000000..b03703e0ddc
--- /dev/null
+++ b/lib/galaxy/datatypes/test/drugbank_drugs.sdf
@@ -0,0 +1,491 @@
+Goserelin
+ Mrv0541 04221219462D
+
+ 91 96 0 0 1 0 999 V2000
+ 12.8548 -2.6382 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
+ 13.9726 -2.5226 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
+ 10.1766 -3.9327 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
+ 11.2019 -0.7961 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
+ 8.7800 -1.3064 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
+ 16.8589 -3.2421 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
+ 10.3562 1.2163 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
+ 3.2702 4.8341 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
+ 2.3500 8.2734 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
+ 3.8213 4.2201 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
+ 5.2178 1.5938 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
+ 7.8960 2.8883 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
+ 7.1271 0.5358 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
+ 12.4834 3.1249 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
+ 13.1495 -4.0364 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 11.2402 -2.9784 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 15.2089 -3.2393 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 10.1383 -1.7503 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 15.6226 -2.5255 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 12.3806 -6.3890 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 9.2926 0.2619 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 3.1485 7.0391 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 4.3338 5.7884 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 16.8613 -1.8132 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 8.1907 1.4900 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 5.1795 3.7761 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 6.2814 2.5480 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 11.3170 -7.3433 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 12.6753 -7.7873 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 3.8596 0.7098 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 6.7335 6.3823 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 5.9507 7.4636 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 13.9701 -3.9516 0.0000 C 0 0 1 0 0 0 0 0 0 0 0 0
+ 14.3043 -4.7058 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 13.6903 -5.2569 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 12.9766 -4.8431 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 12.5984 -3.4224 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 11.7912 -3.5925 0.0000 C 0 0 2 0 0 0 0 0 0 0 0 0
+ 14.3838 -3.2378 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 11.5349 -4.3767 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 12.0859 -4.9907 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 9.8819 -2.5345 0.0000 C 0 0 2 0 0 0 0 0 0 0 0 0
+ 10.4330 -3.1486 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 9.0747 -2.7046 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 8.8184 -3.4889 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 11.8295 -5.7750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 8.0112 -3.6590 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 9.3694 -4.1029 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 9.5873 -1.1363 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 9.8436 -0.3521 0.0000 C 0 0 1 0 0 0 0 0 0 0 0 0
+ 10.6509 -0.1820 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 16.4476 -2.5269 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 2.9756 6.2324 0.0000 C 0 0 1 0 0 0 0 0 0 0 0 0
+ 12.0091 -0.6259 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 8.9979 1.6602 0.0000 C 0 0 2 0 0 0 0 0 0 0 0 0
+ 9.5489 1.0461 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 12.1242 -7.1732 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 2.1549 6.1475 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 4.8848 5.1744 0.0000 C 0 0 1 0 0 0 0 0 0 0 0 0
+ 4.9232 2.9920 0.0000 C 0 0 1 0 0 0 0 0 0 0 0 0
+ 1.8207 6.9019 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 9.2542 2.4444 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 4.1159 2.8219 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 3.5266 5.6183 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 2.4348 7.4528 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 5.6921 5.3445 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 6.8324 1.9340 0.0000 C 0 0 2 0 0 0 0 0 0 0 0 0
+ 4.6285 4.3902 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 12.1793 -1.4332 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 12.8164 -0.4557 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 11.8389 0.1814 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 3.8596 2.0376 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 5.4742 2.3779 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 7.6397 2.1041 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 10.0615 2.6145 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 3.0790 1.7862 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 5.9484 6.1287 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 4.3411 1.3737 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 3.0790 0.9612 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 6.5761 1.1498 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 2.3645 2.1987 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 10.3178 3.3987 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 10.6125 2.0005 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 2.3645 0.5487 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 5.4646 6.7970 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 1.6500 1.7862 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 1.6500 0.9612 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 11.1251 3.5688 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 11.4198 2.1706 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 6.7349 7.2073 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 11.6761 2.9548 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 1 37 2 0 0 0 0
+ 2 39 2 0 0 0 0
+ 3 43 2 0 0 0 0
+ 4 51 1 0 0 0 0
+ 4 54 1 0 0 0 0
+ 5 49 2 0 0 0 0
+ 6 52 2 0 0 0 0
+ 7 56 2 0 0 0 0
+ 8 64 2 0 0 0 0
+ 9 65 2 0 0 0 0
+ 10 68 2 0 0 0 0
+ 11 73 2 0 0 0 0
+ 12 74 2 0 0 0 0
+ 13 80 1 0 0 0 0
+ 14 91 1 0 0 0 0
+ 15 33 1 0 0 0 0
+ 15 36 1 0 0 0 0
+ 15 37 1 0 0 0 0
+ 38 16 1 6 0 0 0
+ 16 43 1 0 0 0 0
+ 17 19 1 0 0 0 0
+ 17 39 1 0 0 0 0
+ 42 18 1 6 0 0 0
+ 18 49 1 0 0 0 0
+ 19 52 1 0 0 0 0
+ 20 46 1 0 0 0 0
+ 20 57 2 0 0 0 0
+ 50 21 1 6 0 0 0
+ 21 56 1 0 0 0 0
+ 22 53 1 0 0 0 0
+ 22 65 1 0 0 0 0
+ 59 23 1 1 0 0 0
+ 23 64 1 0 0 0 0
+ 24 52 1 0 0 0 0
+ 55 25 1 1 0 0 0
+ 25 74 1 0 0 0 0
+ 60 26 1 6 0 0 0
+ 26 68 1 0 0 0 0
+ 67 27 1 6 0 0 0
+ 27 73 1 0 0 0 0
+ 28 57 1 0 0 0 0
+ 29 57 1 0 0 0 0
+ 30 78 1 0 0 0 0
+ 30 79 1 0 0 0 0
+ 31 77 1 0 0 0 0
+ 31 90 1 0 0 0 0
+ 32 85 1 0 0 0 0
+ 32 90 2 0 0 0 0
+ 33 34 1 0 0 0 0
+ 33 39 1 6 0 0 0
+ 34 35 1 0 0 0 0
+ 35 36 1 0 0 0 0
+ 37 38 1 0 0 0 0
+ 38 40 1 0 0 0 0
+ 40 41 1 0 0 0 0
+ 41 46 1 0 0 0 0
+ 42 43 1 0 0 0 0
+ 42 44 1 0 0 0 0
+ 44 45 1 0 0 0 0
+ 45 47 1 0 0 0 0
+ 45 48 1 0 0 0 0
+ 49 50 1 0 0 0 0
+ 50 51 1 0 0 0 0
+ 53 58 1 0 0 0 0
+ 53 64 1 6 0 0 0
+ 54 69 1 0 0 0 0
+ 54 70 1 0 0 0 0
+ 54 71 1 0 0 0 0
+ 55 56 1 0 0 0 0
+ 55 62 1 0 0 0 0
+ 58 61 1 0 0 0 0
+ 59 66 1 0 0 0 0
+ 59 68 1 0 0 0 0
+ 60 63 1 0 0 0 0
+ 60 73 1 0 0 0 0
+ 61 65 1 0 0 0 0
+ 62 75 1 0 0 0 0
+ 63 72 1 0 0 0 0
+ 66 77 1 0 0 0 0
+ 67 74 1 0 0 0 0
+ 67 80 1 0 0 0 0
+ 72 76 1 0 0 0 0
+ 72 78 2 0 0 0 0
+ 75 82 2 0 0 0 0
+ 75 83 1 0 0 0 0
+ 76 79 1 0 0 0 0
+ 76 81 2 0 0 0 0
+ 77 85 2 0 0 0 0
+ 79 84 2 0 0 0 0
+ 81 86 1 0 0 0 0
+ 82 88 1 0 0 0 0
+ 83 89 2 0 0 0 0
+ 84 87 1 0 0 0 0
+ 86 87 2 0 0 0 0
+ 88 91 2 0 0 0 0
+ 89 91 1 0 0 0 0
+M END
+>
+DB00014
+
+>
+approved
+
+>
+Goserelin
+
+>
+Goserelin acetate
+
+>
+Zoladex
+
+>
+C59H84N18O14
+
+>
+1269.4105
+
+>
+1268.641439486
+
+>
+(2S)-1-[(2S)-2-[(2S)-2-[(2R)-3-(tert-butoxy)-2-[(2S)-2-[(2S)-3-hydroxy-2-[(2S)-2-[(2S)-3-(1H-imidazol-5-yl)-2-{[(2S)-5-oxopyrrolidin-2-yl]formamido}propanamido]-3-(1H-indol-3-yl)propanamido]propanamido]-3-(4-hydroxyphenyl)propanamido]propanamido]-4-methylpentanamido]-5-[(diaminomethylidene)amino]pentanoyl]-N-(carbamoylamino)pyrrolidine-2-carboxamide
+
+>
+InChI=1S/C59H84N18O14/c1-31(2)22-40(49(82)68-39(12-8-20-64-57(60)61)56(89)77-21-9-13-46(77)55(88)75-76-58(62)90)69-54(87)45(29-91-59(3,4)5)74-50(83)41(23-32-14-16-35(79)17-15-32)70-53(86)44(28-78)73-51(84)42(24-33-26-65-37-11-7-6-10-36(33)37)71-52(85)43(25-34-27-63-30-66-34)72-48(81)38-18-19-47(80)67-38/h6-7,10-11,14-17,26-27,30-31,38-46,65,78-79H,8-9,12-13,18-25,28-29H2,1-5H3,(H,63,66)(H,67,80)(H,68,82)(H,69,87)(H,70,86)(H,71,85)(H,72,81)(H,73,84)(H,74,83)(H,75,88)(H4,60,61,64)(H3,62,76,90)/t38-,39-,40-,41-,42-,43-,44-,45+,46-/m0/s1
+
+>
+InChIKey=BLCLNMBMMGCOAS-URPVMXJPSA-N
+
+>
+CC(C)C[C@H](NC(=O)[C@@H](COC(C)(C)C)NC(=O)[C@H](CC1=CC=C(O)C=C1)NC(=O)[C@H](CO)NC(=O)[C@H](CC1=CNC2=CC=CC=C12)NC(=O)[C@H](CC1=CN=CN1)NC(=O)[C@@H]1CCC(=O)N1)C(=O)N[C@@H](CCCN=C(N)N)C(=O)N1CCC[C@H]1C(=O)NNC(N)=O
+
+>
+18
+
+>
+17
+
+>
+9.82
+
+>
+0.3
+
+>
+-5.2
+
+>
+-4.7
+
+>
+131.22
+
+>
+495.89
+
+>
+325.84
+
+>
+33
+
+>
+2.83e-02 g/l
+
+$$$$
+Desmopressin
+ Mrv0541 04221221522D
+
+ 74 77 0 0 1 0 999 V2000
+ 0.0000 -7.8646 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 0.6741 -7.4601 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 1.3932 -7.8646 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 2.1122 -7.4601 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 2.8313 -7.8646 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 3.5503 -7.4601 0.0000 C 0 0 1 0 0 0 0 0 0 0 0 0
+ 4.2693 -7.8646 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 4.9435 -7.4601 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 5.6625 -7.8646 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
+ 0.6741 -6.6512 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
+ 2.8313 -8.7184 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
+ 3.5503 -6.6512 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 2.8313 -6.2467 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 2.8313 -5.4378 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 2.1122 -5.0333 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 4.9435 -6.6512 0.0000 C 0 0 2 0 0 0 0 0 0 0 0 0
+ 4.3143 -6.1568 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 5.6176 -6.1568 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 4.5390 -5.3929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 5.3479 -5.3929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 6.3366 -6.5613 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 7.0557 -6.1568 0.0000 C 0 0 1 0 0 0 0 0 0 0 0 0
+ 7.7747 -6.5613 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 8.4488 -6.1568 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 9.1678 -6.5613 0.0000 C 0 0 1 0 0 0 0 0 0 0 0 0
+ 9.8869 -6.1568 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 6.3366 -7.4152 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
+ 7.0557 -5.3479 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 6.3366 -4.9435 0.0000 S 0 0 0 0 0 0 0 0 0 0 0 0
+ 6.3366 -4.1345 0.0000 S 0 0 0 0 0 0 0 0 0 0 0 0
+ 8.4488 -5.3479 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
+ 9.1678 -7.4152 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 9.8869 -7.8197 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 9.8869 -8.6286 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
+ 10.6060 -7.4152 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 9.8869 -5.3479 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 10.6060 -4.9435 0.0000 C 0 0 2 0 0 0 0 0 0 0 0 0
+ 9.1678 -4.9435 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
+ 11.3250 -5.3479 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 12.0441 -4.9435 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 12.7631 -5.3479 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 13.4822 -4.9435 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 12.7631 -6.2018 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
+ 10.6060 -4.1345 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 11.3250 -2.8762 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 11.3250 -3.7300 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 10.6060 -2.4717 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 9.8869 -2.8762 0.0000 C 0 0 1 0 0 0 0 0 0 0 0 0
+ 9.8869 -3.7300 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 12.7631 -2.8762 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 12.7631 -3.7300 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 12.0441 -2.4717 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 12.0441 -4.1345 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 7.0557 -2.8762 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 6.3366 -2.4717 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 5.6176 -2.8762 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 5.6176 -3.7300 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 8.4488 -2.8762 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 8.4488 -3.7300 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
+ 7.7747 -2.4717 0.0000 C 0 0 2 0 0 0 0 0 0 0 0 0
+ 9.1678 -2.4717 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 9.1678 -4.1345 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
+ 7.7747 -1.6628 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 9.1678 -1.6628 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 8.4488 -1.2583 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 9.8869 -1.2583 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 9.8869 -0.4045 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 8.4488 -0.4045 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 9.1678 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 6.3366 -1.6628 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
+ 10.6060 0.0000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
+ 1.3932 -5.4378 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
+ 1.3932 -6.2467 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 0.6741 -5.0333 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
+ 1 2 1 0 0 0 0
+ 2 3 1 0 0 0 0
+ 2 10 2 0 0 0 0
+ 3 4 1 0 0 0 0
+ 4 5 1 0 0 0 0
+ 5 6 1 0 0 0 0
+ 5 11 2 0 0 0 0
+ 6 7 1 0 0 0 0
+ 6 12 1 6 0 0 0
+ 7 8 1 0 0 0 0
+ 8 9 2 0 0 0 0
+ 16 8 1 6 0 0 0
+ 12 13 1 0 0 0 0
+ 13 14 1 0 0 0 0
+ 14 15 1 0 0 0 0
+ 15 72 1 0 0 0 0
+ 16 17 1 0 0 0 0
+ 16 18 1 0 0 0 0
+ 17 19 1 0 0 0 0
+ 18 20 1 0 0 0 0
+ 18 21 1 0 0 0 0
+ 19 20 1 0 0 0 0
+ 22 21 1 6 0 0 0
+ 21 27 2 0 0 0 0
+ 22 23 1 0 0 0 0
+ 22 28 1 0 0 0 0
+ 23 24 1 0 0 0 0
+ 24 25 1 0 0 0 0
+ 24 31 2 0 0 0 0
+ 25 26 1 0 0 0 0
+ 25 32 1 1 0 0 0
+ 26 36 1 0 0 0 0
+ 28 29 1 0 0 0 0
+ 29 30 1 0 0 0 0
+ 30 57 1 0 0 0 0
+ 32 33 1 0 0 0 0
+ 33 34 2 0 0 0 0
+ 33 35 1 0 0 0 0
+ 36 37 1 0 0 0 0
+ 36 38 2 0 0 0 0
+ 37 39 1 1 0 0 0
+ 37 44 1 0 0 0 0
+ 39 40 1 0 0 0 0
+ 40 41 1 0 0 0 0
+ 41 42 1 0 0 0 0
+ 41 43 2 0 0 0 0
+ 44 49 1 0 0 0 0
+ 45 47 1 0 0 0 0
+ 45 52 1 0 0 0 0
+ 45 46 2 0 0 0 0
+ 46 53 1 0 0 0 0
+ 48 47 1 1 0 0 0
+ 48 61 1 0 0 0 0
+ 48 49 1 0 0 0 0
+ 49 62 2 0 0 0 0
+ 50 51 1 0 0 0 0
+ 50 52 2 0 0 0 0
+ 51 53 2 0 0 0 0
+ 54 55 1 0 0 0 0
+ 54 60 1 0 0 0 0
+ 55 56 1 0 0 0 0
+ 55 70 2 0 0 0 0
+ 56 57 1 0 0 0 0
+ 58 59 2 0 0 0 0
+ 58 60 1 0 0 0 0
+ 58 61 1 0 0 0 0
+ 60 63 1 1 0 0 0
+ 63 65 1 0 0 0 0
+ 64 66 2 0 0 0 0
+ 64 65 1 0 0 0 0
+ 65 68 2 0 0 0 0
+ 66 67 1 0 0 0 0
+ 67 69 2 0 0 0 0
+ 67 71 1 0 0 0 0
+ 68 69 1 0 0 0 0
+ 72 73 2 3 0 0 0
+ 72 74 1 0 0 0 0
+M END
+>
+DB00035
+
+>
+approved
+
+>
+Desmopressin
+
+>
+1-Desamino-8-D-arginine vasopressin; Desmopresina [INN-Spanish]; Desmopressine [INN-French]; Desmopressinum [INN-Latin]
+
+>
+Desmopressin acetate
+
+>
+Adiuretin; Concentraid; DDAVP; Minirin; Stimate
+
+>
+C46H64N14O12S2
+
+>
+1069.217
+
+>
+1068.426954962
+
+>
+(2S)-2-{[(2S)-1-{[(4R,7S,10S,13S,16S)-13-benzyl-10-(2-carbamoylethyl)-7-(carbamoylmethyl)-16-[(4-hydroxyphenyl)methyl]-6,9,12,15,18-pentaoxo-1,2-dithia-5,8,11,14,17-pentaazacycloicosan-4-yl]carbonyl}pyrrolidin-2-yl]formamido}-5-carbamimidamido-N-(carbamoylmethyl)pentanamide
+
+>
+InChI=1S/C46H64N14O12S2/c47-35(62)15-14-29-40(67)58-32(22-36(48)63)43(70)59-33(45(72)60-18-5-9-34(60)44(71)56-28(8-4-17-52-46(50)51)39(66)53-23-37(49)64)24-74-73-19-16-38(65)54-30(21-26-10-12-27(61)13-11-26)41(68)57-31(42(69)55-29)20-25-6-2-1-3-7-25/h1-3,6-7,10-13,28-34,61H,4-5,8-9,14-24H2,(H2,47,62)(H2,48,63)(H2,49,64)(H,53,66)(H,54,65)(H,55,69)(H,56,71)(H,57,68)(H,58,67)(H,59,70)(H4,50,51,52)/t28-,29-,30-,31-,32-,33-,34-/m0/s1
+
+>
+InChIKey=NFLWUMRGJYTJIN-NXBWRCJVSA-N
+
+>
+NC(=O)CC[C@@H]1NC(=O)[C@H](CC2=CC=CC=C2)NC(=O)[C@H](CC2=CC=C(O)C=C2)NC(=O)CCSSC[C@H](NC(=O)[C@H](CC(N)=O)NC1=O)C(=O)N1CCC[C@H]1C(=O)N[C@@H](CCCNC(N)=N)C(=O)NCC(N)=O
+
+>
+15
+
+>
+14
+
+>
+11.34
+
+>
+-1
+
+>
+-6.1
+
+>
+-4
+
+>
+106.19
+
+>
+435.41
+
+>
+279.78
+
+>
+19
+
+>
+1.10e-01 g/l
+
+$$$$
diff --git a/lib/galaxy/datatypes/test/drugbank_drugs.smi b/lib/galaxy/datatypes/test/drugbank_drugs.smi
new file mode 100644
index 00000000000..02a68671884
--- /dev/null
+++ b/lib/galaxy/datatypes/test/drugbank_drugs.smi
@@ -0,0 +1,2 @@
+O=C(N1[C@@H](CCC1)C(=O)NNC(=O)N)[C@@H](NC(=O)[C@@H](NC(=O)[C@H](NC(=O)[C@@H](NC(=O)[C@@H](NC(=O)[C@@H](NC(=O)[C@@H](NC(=O)[C@H]1NC(=O)CC1)Cc1[nH]cnc1)Cc1c2c([nH]c1)cccc2)CO)Cc1ccc(O)cc1)COC(C)(C)C)CC(C)C)CCCN=C(N)N Goserelin
+NC(=O)CNC(=O)[C@@H](NC(=O)[C@@H]1CCCN1C(=O)[C@H]1NC(=O)[C@@H](NC(=O)[C@H](CCC(=O)N)NC(=O)[C@H](Cc2ccccc2)NC(=O)[C@@H](NC(=O)CCSSC1)Cc1ccc(cc1)O)CC(=O)N)CCCNC(=N)N Desmopressin
diff --git a/lib/galaxy/datatypes/test/q.fps b/lib/galaxy/datatypes/test/q.fps
new file mode 100644
index 00000000000..d6499c223a8
--- /dev/null
+++ b/lib/galaxy/datatypes/test/q.fps
@@ -0,0 +1,7 @@
+#FPS1
+#num_bits=881
+#type=CACTVS-E_SCREEN/1.0 extended=2
+#software=CACTVS/unknown
+#source=CID_28434379.sdf
+#date=2012-02-03T13:08:39
+07ce04000000000000000000000000000080060000000c060000000000001a800f0000780008100000101487e9608c0bed3248000580644626204101b4844805901b041c2e19511e45039b8b2924101609401b13e40800000000000100200000040080000010000002000000000000 28434379