mirror of
https://github.com/openbabel/openbabel.git
synced 2026-08-27 05:37:38 -05:00
New test file to exercise the SMILES canonicalizer.
This commit is contained in:
Executable
+77
@@ -0,0 +1,77 @@
|
||||
#!/bin/sh
|
||||
#======================================================================
|
||||
# FILE: cansmiles_shuffle.sh
|
||||
# AUTHOR: Craig A. James
|
||||
# DESCRIPTION:
|
||||
# Tests SMILES canonicalization. For each SMILES of input:
|
||||
#
|
||||
# * Writes the SMILES (repeats it) N times
|
||||
#
|
||||
# * Runs the N repeated SMILES through "babel ... -o smi -xC", (the
|
||||
# "anti-canonicalizer" option that generates randomly-ordered
|
||||
# SMILES) to generate N different but equivalent SMILES.
|
||||
#
|
||||
# * The N random SMILES are canonicalized using "babel ... -o can",
|
||||
# which in theory should result in N identical SMILES.
|
||||
#
|
||||
# * The N canonical smiles are run through "sort -u" (sort-unique),
|
||||
# which should produce a file with exactly one SMILES.
|
||||
#
|
||||
# * The final output file's lines are counted. If there is more
|
||||
# than one line (more than one SMILES), it is reported as
|
||||
# an error.
|
||||
#
|
||||
#======================================================================
|
||||
# Copyright (c) 2009, Craig A. James, eMolecules Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation version 2 of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#======================================================================
|
||||
|
||||
niter=$1
|
||||
echo "$0: $niter shuffles per molecule";
|
||||
|
||||
n=0
|
||||
errors=0
|
||||
tmpfile=/tmp/babel$$.smi
|
||||
canfile=/tmp/babel$$.can
|
||||
|
||||
unset xpg_echo
|
||||
|
||||
while read -r smiles ; do
|
||||
|
||||
# Generate N random SMILES for this molecule
|
||||
n=`expr $n + 1`
|
||||
(
|
||||
i=0
|
||||
while test $i -lt $niter ; do
|
||||
/bin/echo $smiles
|
||||
i=`expr $i + 1`
|
||||
done
|
||||
) | babel -i smi -o smi -xC >$tmpfile 2>/dev/null
|
||||
|
||||
# Canonicalize them: They should all come out the same
|
||||
babel $tmpfile -o can 2>/dev/null | sort -u >$canfile
|
||||
|
||||
# We should only have one SMILES now. Any more (or zero) is an error.
|
||||
count=`wc --lines <$canfile`
|
||||
if [ "$count" -ne "1" ] ; then
|
||||
echo ""
|
||||
echo "error: Record $n: Got $count SMILES for one molecule:"
|
||||
cat $canfile
|
||||
errors=`expr $errors + 1`
|
||||
fi
|
||||
|
||||
echo -n "."
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "$n SMILES tested, $errors errors."
|
||||
rm $tmpfile $canfile
|
||||
|
||||
Reference in New Issue
Block a user