Version 2 of ETKDG (#1597)

* version 2 of ETKDG

* setting default and changing to unsigned int

* ETversion 2 only via EmbedParams available

* Some refactoring so that the DG functions that take the parameter object are the primaries.
This should allow new parameters to be added without having to modify the API

* test and wrapper changes to go along with that

* update cookbook to use etkdg
This commit is contained in:
sriniker
2017-10-31 12:43:28 +01:00
committed by Greg Landrum
parent 78bacd3f01
commit a14f853e56
11 changed files with 1428 additions and 989 deletions

View File

@@ -52,67 +52,92 @@ typedef std::pair<int, int> INT_PAIR;
typedef std::vector<INT_PAIR> INT_PAIR_VECT;
//! Parameters corresponding to Sereina Riniker's KDG approach
const EmbedParameters KDG(0, // maxIterations
1, // numThreads
-1, // randomSeed
true, // clearConfs
false, // useRandomCoords
2.0, // boxSizeMult
true, // randNegEig
1, // numZeroFail
nullptr, // coordMap
1e-3, // optimizerForceTol
false, // ignoreSmoothingFailures
true, // enforceChirality
false, // useExpTorsionAnglePrefs
true, // useBasicKnowledge
false, // verbose
5.0, // basinThresh
-1.0, // pruneRmsThresh
true // onlyHeavyAtomsForRMS
const EmbedParameters KDG(0, // maxIterations
1, // numThreads
-1, // randomSeed
true, // clearConfs
false, // useRandomCoords
2.0, // boxSizeMult
true, // randNegEig
1, // numZeroFail
NULL, // coordMap
1e-3, // optimizerForceTol
false, // ignoreSmoothingFailures
true, // enforceChirality
false, // useExpTorsionAnglePrefs
true, // useBasicKnowledge
false, // verbose
5.0, // basinThresh
-1.0, // pruneRmsThresh
true, // onlyHeavyAtomsForRMS
1 // ETversion
);
//! Parameters corresponding to Sereina Riniker's ETDG approach
const EmbedParameters ETDG(0, // maxIterations
1, // numThreads
-1, // randomSeed
true, // clearConfs
false, // useRandomCoords
2.0, // boxSizeMult
true, // randNegEig
1, // numZeroFail
nullptr, // coordMap
1e-3, // optimizerForceTol
false, // ignoreSmoothingFailures
false, // enforceChirality
true, // useExpTorsionAnglePrefs
false, // useBasicKnowledge
false, // verbose
5.0, // basinThresh
-1.0, // pruneRmsThresh
true // onlyHeavyAtomsForRMS
const EmbedParameters ETDG(0, // maxIterations
1, // numThreads
-1, // randomSeed
true, // clearConfs
false, // useRandomCoords
2.0, // boxSizeMult
true, // randNegEig
1, // numZeroFail
NULL, // coordMap
1e-3, // optimizerForceTol
false, // ignoreSmoothingFailures
false, // enforceChirality
true, // useExpTorsionAnglePrefs
false, // useBasicKnowledge
false, // verbose
5.0, // basinThresh
-1.0, // pruneRmsThresh
true, // onlyHeavyAtomsForRMS
1 // ETversion
);
//! Parameters corresponding to Sereina Riniker's ETKDG approach
const EmbedParameters ETKDG(0, // maxIterations
1, // numThreads
-1, // randomSeed
true, // clearConfs
false, // useRandomCoords
2.0, // boxSizeMult
true, // randNegEig
1, // numZeroFail
nullptr, // coordMap
1e-3, // optimizerForceTol
false, // ignoreSmoothingFailures
true, // enforceChirality
true, // useExpTorsionAnglePrefs
true, // useBasicKnowledge
false, // verbose
5.0, // basinThresh
-1.0, // pruneRmsThresh
true // onlyHeavyAtomsForRMS
const EmbedParameters ETKDG(0, // maxIterations
1, // numThreads
-1, // randomSeed
true, // clearConfs
false, // useRandomCoords
2.0, // boxSizeMult
true, // randNegEig
1, // numZeroFail
NULL, // coordMap
1e-3, // optimizerForceTol
false, // ignoreSmoothingFailures
true, // enforceChirality
true, // useExpTorsionAnglePrefs
true, // useBasicKnowledge
false, // verbose
5.0, // basinThresh
-1.0, // pruneRmsThresh
true, // onlyHeavyAtomsForRMS
1 // ETversion
);
//! Parameters corresponding to Sereina Riniker's ETKDG approach - version 2
const EmbedParameters ETKDGv2(0, // maxIterations
1, // numThreads
-1, // randomSeed
true, // clearConfs
false, // useRandomCoords
2.0, // boxSizeMult
true, // randNegEig
1, // numZeroFail
NULL, // coordMap
1e-3, // optimizerForceTol
false, // ignoreSmoothingFailures
true, // enforceChirality
true, // useExpTorsionAnglePrefs
true, // useBasicKnowledge
false, // verbose
5.0, // basinThresh
-1.0, // pruneRmsThresh
true, // onlyHeavyAtomsForRMS
2 // ETversion
);
bool _volumeTest(const DistGeom::ChiralSetPtr &chiralSet,
const RDGeom::PointPtrVect &positions, bool verbose = false) {
RDGeom::Point3D p0((*positions[chiralSet->d_idx0])[0],
@@ -277,7 +302,8 @@ bool _minimizeWithExpTorsions(
// minimize!
field->initialize();
// std::cout << "Field with torsion constraints: " << field->calcEnergy() << "
// std::cout << "Field with torsion constraints: " << field->calcEnergy() <<
// "
// " << ERROR_TOL << std::endl;
if (field->calcEnergy() > ERROR_TOL) {
// while (needMore) {
@@ -669,30 +695,6 @@ bool _isConfFarFromRest(const ROMol &mol, const Conformer &conf,
return res;
}
int EmbedMolecule(ROMol &mol, unsigned int maxIterations, int seed,
bool clearConfs, bool useRandomCoords, double boxSizeMult,
bool randNegEig, unsigned int numZeroFail,
const std::map<int, RDGeom::Point3D> *coordMap,
double optimizerForceTol, bool ignoreSmoothingFailures,
bool enforceChirality, bool useExpTorsionAnglePrefs,
bool useBasicKnowledge, bool verbose, double basinThresh,
bool onlyHeavyAtomsForRMS) {
INT_VECT confIds;
EmbedMultipleConfs(
mol, confIds, 1, 1, maxIterations, seed, clearConfs, useRandomCoords,
boxSizeMult, randNegEig, numZeroFail, -1.0, coordMap, optimizerForceTol,
ignoreSmoothingFailures, enforceChirality, useExpTorsionAnglePrefs,
useBasicKnowledge, verbose, basinThresh, onlyHeavyAtomsForRMS);
int res;
if (confIds.size()) {
res = confIds[0];
} else {
res = -1;
}
return res;
}
void adjustBoundsMatFromCoordMap(
DistGeom::BoundsMatPtr mmat, unsigned int nAtoms,
const std::map<int, RDGeom::Point3D> *coordMap) {
@@ -806,25 +808,24 @@ void embedHelper_(int threadId, int numThreads, EmbedArgs *eargs) {
} // end of namespace detail
void EmbedMultipleConfs(ROMol &mol, INT_VECT &res, unsigned int numConfs,
int numThreads, unsigned int maxIterations, int seed,
bool clearConfs, bool useRandomCoords,
double boxSizeMult, bool randNegEig,
unsigned int numZeroFail, double pruneRmsThresh,
const std::map<int, RDGeom::Point3D> *coordMap,
double optimizerForceTol, bool ignoreSmoothingFailures,
bool enforceChirality, bool useExpTorsionAnglePrefs,
bool useBasicKnowledge, bool verbose,
double basinThresh, bool onlyHeavyAtomsForRMS) {
const EmbedParameters &params) {
if (!mol.getNumAtoms()) {
throw ValueErrorException("molecule has no atoms");
}
if (params.ETversion < 1 || params.ETversion > 2) {
throw ValueErrorException(
"Only version 1 and 2 of the experimental "
"torsion-angle preferences (ETversion) supported");
}
INT_VECT fragMapping;
std::vector<ROMOL_SPTR> molFrags =
MolOps::getMolFrags(mol, true, &fragMapping);
const std::map<int, RDGeom::Point3D> *coordMap = params.coordMap;
if (molFrags.size() > 1 && coordMap) {
BOOST_LOG(rdWarningLog)
<< "Constrained conformer generation (via the coordMap argument) does "
<< "Constrained conformer generation (via the coordMap argument) "
"does "
"not work with molecules that have multiple fragments."
<< std::endl;
coordMap = nullptr;
@@ -837,7 +838,7 @@ void EmbedMultipleConfs(ROMol &mol, INT_VECT &res, unsigned int numConfs,
boost::dynamic_bitset<> confsOk(numConfs);
confsOk.set();
if (clearConfs) {
if (params.clearConfs) {
res.clear();
mol.clearConformers();
}
@@ -857,10 +858,11 @@ void EmbedMultipleConfs(ROMol &mol, INT_VECT &res, unsigned int numConfs,
std::vector<std::pair<int, int> > bonds;
std::vector<std::vector<int> > angles;
std::vector<int> atomNums(nAtoms);
if (useExpTorsionAnglePrefs || useBasicKnowledge) {
if (params.useExpTorsionAnglePrefs || params.useBasicKnowledge) {
ForceFields::CrystalFF::getExperimentalTorsions(
*piece, expTorsionAtoms, expTorsionAngles, improperAtoms,
useExpTorsionAnglePrefs, useBasicKnowledge, verbose);
params.useExpTorsionAnglePrefs, params.useBasicKnowledge,
params.ETversion, params.verbose);
setTopolBounds(*piece, mmat, bonds, angles, true, false);
for (unsigned int i = 0; i < nAtoms; ++i) {
atomNums[i] = (*piece).getAtomWithIdx(i)->getAtomicNum();
@@ -873,7 +875,8 @@ void EmbedMultipleConfs(ROMol &mol, INT_VECT &res, unsigned int numConfs,
tol = 0.05;
}
if (!DistGeom::triangleSmoothBounds(mmat, tol)) {
// ok this bound matrix failed to triangle smooth - re-compute the bounds
// ok this bound matrix failed to triangle smooth - re-compute the
// bounds
// matrix
// without 15 bounds and with VDW scaling
initBoundsMat(mmat);
@@ -886,7 +889,7 @@ void EmbedMultipleConfs(ROMol &mol, INT_VECT &res, unsigned int numConfs,
// try triangle smoothing again
if (!DistGeom::triangleSmoothBounds(mmat, tol)) {
// ok, we're not going to be able to smooth this,
if (ignoreSmoothingFailures) {
if (params.ignoreSmoothingFailures) {
// proceed anyway with the more relaxed bounds matrix
initBoundsMat(mmat);
setTopolBounds(*piece, mmat, false, true);
@@ -913,18 +916,18 @@ void EmbedMultipleConfs(ROMol &mol, INT_VECT &res, unsigned int numConfs,
DistGeom::VECT_CHIRALSET tetrahedralCarbons;
MolOps::assignStereochemistry(*piece);
_findChiralSets(*piece, chiralCenters, tetrahedralCarbons, coordMap);
_findChiralSets(*piece, chiralCenters, tetrahedralCarbons, params.coordMap);
// if we have any chiral centers or are using random coordinates, we will
// first embed the molecule in four dimensions, otherwise we will use 3D
bool fourD = false;
if (useRandomCoords || chiralCenters.size() > 0) {
if (params.useRandomCoords || chiralCenters.size() > 0) {
fourD = true;
}
#ifdef RDK_THREADSAFE_SSS
boost::thread_group tg;
#endif
numThreads = getNumThreadsToUse(numThreads);
int numThreads = getNumThreadsToUse(params.numThreads);
detail::EmbedArgs eargs = {&confsOk,
fourD,
@@ -932,19 +935,19 @@ void EmbedMultipleConfs(ROMol &mol, INT_VECT &res, unsigned int numConfs,
&confs,
fragIdx,
mmat,
useRandomCoords,
boxSizeMult,
randNegEig,
numZeroFail,
optimizerForceTol,
basinThresh,
seed,
maxIterations,
params.useRandomCoords,
params.boxSizeMult,
params.randNegEig,
params.numZeroFail,
params.optimizerForceTol,
params.basinThresh,
params.randomSeed,
params.maxIterations,
&chiralCenters,
&tetrahedralCarbons,
enforceChirality,
useExpTorsionAnglePrefs,
useBasicKnowledge,
params.enforceChirality,
params.useExpTorsionAnglePrefs,
params.useBasicKnowledge,
&bonds,
&angles,
&expTorsionAtoms,
@@ -969,9 +972,9 @@ void EmbedMultipleConfs(ROMol &mol, INT_VECT &res, unsigned int numConfs,
if (confsOk[ci]) {
// check if we are pruning away conformations and
// a closeby conformation has already been chosen :
if (pruneRmsThresh > 0.0 &&
!_isConfFarFromRest(mol, *conf, pruneRmsThresh,
onlyHeavyAtomsForRMS)) {
if (params.pruneRmsThresh > 0.0 &&
!_isConfFarFromRest(mol, *conf, params.pruneRmsThresh,
params.onlyHeavyAtomsForRMS)) {
delete conf;
} else {
int confId = (int)mol.addConformer(conf, true);
@@ -983,22 +986,5 @@ void EmbedMultipleConfs(ROMol &mol, INT_VECT &res, unsigned int numConfs,
}
}
INT_VECT EmbedMultipleConfs(
ROMol &mol, unsigned int numConfs, unsigned int maxIterations, int seed,
bool clearConfs, bool useRandomCoords, double boxSizeMult, bool randNegEig,
unsigned int numZeroFail, double pruneRmsThresh,
const std::map<int, RDGeom::Point3D> *coordMap, double optimizerForceTol,
bool ignoreSmoothingFailures, bool enforceChirality,
bool useExpTorsionAnglePrefs, bool useBasicKnowledge, bool verbose,
double basinThresh, bool onlyHeavyAtomsForRMS) {
INT_VECT res;
EmbedMultipleConfs(mol, res, numConfs, 1, maxIterations, seed, clearConfs,
useRandomCoords, boxSizeMult, randNegEig, numZeroFail,
pruneRmsThresh, coordMap, optimizerForceTol,
ignoreSmoothingFailures, enforceChirality,
useExpTorsionAnglePrefs, useBasicKnowledge, verbose,
basinThresh, onlyHeavyAtomsForRMS);
return res;
}
} // end of namespace DGeomHelpers
} // end of namespace RDKit

View File

@@ -18,212 +18,6 @@
namespace RDKit {
namespace DGeomHelpers {
//! Compute an embedding (in 3D) for the specified molecule using Distance
// Geometry
/*!
The following operations are performed (in order) here:
-# Build a distance bounds matrix based on the topology, including 1-5
distances but not VDW scaling
-# Triangle smooth this bounds matrix
-# If step 2 fails - repeat step 1, this time without 1-5 bounds and with vdW
scaling, and repeat step 2
-# Pick a distance matrix at random using the bounds matrix
-# Compute initial coordinates from the distance matrix
-# Repeat steps 3 and 4 until maxIterations is reached or embedding is
successful
-# Adjust initial coordinates by minimizing a Distance Violation error
function
**NOTE**: if the molecule has multiple fragments, they will be embedded
separately,
this means that they will likely occupy the same region of space.
\param mol Molecule of interest
\param maxIterations Max. number of times the embedding will be tried if
coordinates are
not obtained successfully. The default value is 10x the
number of atoms.
\param seed provides a seed for the random number generator (so that
the same
coordinates can be obtained for a molecule on multiple
runs)
If negative, the RNG will not be seeded.
\param clearConfs Clear all existing conformations on the molecule
\param useRandomCoords Start the embedding from random coordinates instead of
using eigenvalues of the distance matrix.
\param boxSizeMult Determines the size of the box that is used for
random coordinates. If this is a positive number, the
side length will equal the largest element of the
distance
matrix times \c boxSizeMult. If this is a negative
number,
the side length will equal \c -boxSizeMult (i.e.
independent
of the elements of the distance matrix).
\param randNegEig Picks coordinates at random when a embedding process
produces
negative eigenvalues
\param numZeroFail Fail embedding if we find this many or more zero
eigenvalues
(within a tolerance)
\param coordMap a map of int to Point3D, between atom IDs and their locations
their locations. If this container is provided, the
coordinates
are used to set distance constraints on the embedding. The
resulting
conformer(s) should have distances between the specified
atoms that
reproduce those between the points in \c coordMap. Because
the embedding
produces a molecule in an arbitrary reference frame, an
alignment step
is required to actually reproduce the provided coordinates.
\param optimizerForceTol set the tolerance on forces in the distgeom optimizer
(this shouldn't normally be altered in client code).
\param ignoreSmoothingFailures try to embed the molecule even if triangle
bounds
smoothing fails
\param enforceChirality enforce the correct chirality if chiral centers are
present
\param useExpTorsionAnglePrefs impose experimental torsion-angle preferences
\param useBasicKnowledge impose "basic knowledge" terms such as flat
aromatic rings, ketones, etc.
\param verbose print output of experimental torsion-angle preferences
\param basinThresh set the basin threshold for the DGeom force field,
(this shouldn't normally be altered in client code).
\param onlyHeavyAtomsForRMS only use the heavy atoms when doing RMS filtering
\return ID of the conformations added to the molecule, -1 if the emdedding
failed
*/
int EmbedMolecule(ROMol &mol, unsigned int maxIterations = 0, int seed = -1,
bool clearConfs = true, bool useRandomCoords = false,
double boxSizeMult = 2.0, bool randNegEig = true,
unsigned int numZeroFail = 1,
const std::map<int, RDGeom::Point3D> *coordMap = 0,
double optimizerForceTol = 1e-3,
bool ignoreSmoothingFailures = false,
bool enforceChirality = true,
bool useExpTorsionAnglePrefs = false,
bool useBasicKnowledge = false, bool verbose = false,
double basinThresh = 5.0, bool onlyHeavyAtomsForRMS = false);
//*! Embed multiple conformations for a molecule
/*!
This is kind of equivalent to calling EmbedMolecule multiple times - just that
the bounds
matrix is computed only once from the topology
**NOTE**: if the molecule has multiple fragments, they will be embedded
separately,
this means that they will likely occupy the same region of space.
\param mol Molecule of interest
\param res Used to return the resulting conformer ids
\param numConfs Number of conformations to be generated
\param numThreads Sets the number of threads to use (more than one thread
will only
be used if the RDKit was build with multithread support)
If set to zero, the max supported by the system will be
used.
\param maxIterations Max. number of times the embedding will be tried if
coordinates are
not obtained successfully. The default value is 10x the
number of atoms.
\param seed provides a seed for the random number generator (so that
the same
coordinates can be obtained for a molecule on multiple
runs).
If negative, the RNG will not be seeded.
\param clearConfs Clear all existing conformations on the molecule
\param useRandomCoords Start the embedding from random coordinates instead of
using eigenvalues of the distance matrix.
\param boxSizeMult Determines the size of the box that is used for
random coordinates. If this is a positive number, the
side length will equal the largest element of the
distance
matrix times \c boxSizeMult. If this is a negative
number,
the side length will equal \c -boxSizeMult (i.e.
independent
of the elements of the distance matrix).
\param randNegEig Picks coordinates at random when a embedding process
produces
negative eigenvalues
\param numZeroFail Fail embedding if we find this many or more zero
eigenvalues
(within a tolerance)
\param pruneRmsThresh Retain only the conformations out of 'numConfs' after
embedding that are
at least this far apart from each other. RMSD is
computed on the heavy atoms.
Prunining is greedy; i.e. the first embedded
conformation is retained and from
then on only those that are atleast pruneRmsThresh away
from already
retained conformations are kept. The pruning is done
after embedding and
bounds violation minimization. No pruning by default.
\param coordMap a map of int to Point3D, between atom IDs and their locations
their locations. If this container is provided, the
coordinates
are used to set distance constraints on the embedding. The
resulting
conformer(s) should have distances between the specified
atoms that
reproduce those between the points in \c coordMap. Because
the embedding
produces a molecule in an arbitrary reference frame, an
alignment step
is required to actually reproduce the provided coordinates.
\param optimizerForceTol set the tolerance on forces in the DGeom optimizer
(this shouldn't normally be altered in client code).
\param ignoreSmoothingFailures try to embed the molecule even if triangle
bounds
smoothing fails
\param enforceChirality enforce the correct chirality if chiral centers are
present
\param useExpTorsionAnglePrefs impose experimental torsion-angle preferences
\param useBasicKnowledge impose "basic knowledge" terms such as flat
aromatic rings, ketones, etc.
\param verbose print output of experimental torsion-angle preferences
\param basinThresh set the basin threshold for the DGeom force field,
(this shouldn't normally be altered in client code).
\param onlyHeavyAtomsForRMS only use the heavy atoms when doing RMS filtering
*/
void EmbedMultipleConfs(
ROMol &mol, INT_VECT &res, unsigned int numConfs = 10, int numThreads = 1,
unsigned int maxIterations = 30, int seed = -1, bool clearConfs = true,
bool useRandomCoords = false, double boxSizeMult = 2.0,
bool randNegEig = true, unsigned int numZeroFail = 1,
double pruneRmsThresh = -1.0,
const std::map<int, RDGeom::Point3D> *coordMap = 0,
double optimizerForceTol = 1e-3, bool ignoreSmoothingFailures = false,
bool enforceChirality = true, bool useExpTorsionAnglePrefs = false,
bool useBasicKnowledge = false, bool verbose = false,
double basinThresh = 5.0, bool onlyHeavyAtomsForRMS = false);
//! \overload
INT_VECT EmbedMultipleConfs(
ROMol &mol, unsigned int numConfs = 10, unsigned int maxIterations = 30,
int seed = -1, bool clearConfs = true, bool useRandomCoords = false,
double boxSizeMult = 2.0, bool randNegEig = true,
unsigned int numZeroFail = 1, double pruneRmsThresh = -1.0,
const std::map<int, RDGeom::Point3D> *coordMap = 0,
double optimizerForceTol = 1e-3, bool ignoreSmoothingFailures = false,
bool enforceChirality = true, bool useExpTorsionAnglePrefs = false,
bool useBasicKnowledge = false, bool verbose = false,
double basinThresh = 5.0, bool onlyHeavyAtomsForRMS = false);
//! Parameter object for controlling embedding
/*!
numConfs Number of conformations to be generated
@@ -292,6 +86,8 @@ INT_VECT EmbedMultipleConfs(
useBasicKnowledge impose "basic knowledge" terms such as flat
aromatic rings, ketones, etc.
ETversion version of the experimental torsion-angle preferences
verbose print output of experimental torsion-angle preferences
basinThresh set the basin threshold for the DGeom force field,
@@ -318,6 +114,7 @@ struct EmbedParameters {
double basinThresh;
double pruneRmsThresh;
bool onlyHeavyAtomsForRMS;
unsigned int ETversion;
EmbedParameters()
: maxIterations(0),
numThreads(1),
@@ -336,7 +133,8 @@ struct EmbedParameters {
verbose(false),
basinThresh(5.0),
pruneRmsThresh(-1.0),
onlyHeavyAtomsForRMS(false){};
onlyHeavyAtomsForRMS(false),
ETversion(1){};
EmbedParameters(unsigned int maxIterations, int numThreads, int randomSeed,
bool clearConfs, bool useRandomCoords, double boxSizeMult,
bool randNegEig, unsigned int numZeroFail,
@@ -344,7 +142,8 @@ struct EmbedParameters {
double optimizerForceTol, bool ignoreSmoothingFailures,
bool enforceChirality, bool useExpTorsionAnglePrefs,
bool useBasicKnowledge, bool verbose, double basinThresh,
double pruneRmsThresh, bool onlyHeavyAtomsForRMS)
double pruneRmsThresh, bool onlyHeavyAtomsForRMS,
unsigned int ETversion = 1)
: maxIterations(maxIterations),
numThreads(numThreads),
randomSeed(randomSeed),
@@ -362,7 +161,234 @@ struct EmbedParameters {
verbose(verbose),
basinThresh(basinThresh),
pruneRmsThresh(pruneRmsThresh),
onlyHeavyAtomsForRMS(onlyHeavyAtomsForRMS){};
onlyHeavyAtomsForRMS(onlyHeavyAtomsForRMS),
ETversion(ETversion){};
};
//*! Embed multiple conformations for a molecule
void EmbedMultipleConfs(ROMol &mol, INT_VECT &res, unsigned int numConfs,
const EmbedParameters &params);
inline INT_VECT EmbedMultipleConfs(ROMol &mol, unsigned int numConfs,
const EmbedParameters &params) {
INT_VECT res;
EmbedMultipleConfs(mol, res, numConfs, params);
return res;
}
//! Compute an embedding (in 3D) for the specified molecule using Distance
// Geometry
inline int EmbedMolecule(ROMol &mol, const EmbedParameters &params) {
INT_VECT confIds;
EmbedMultipleConfs(mol, confIds, 1, params);
int res;
if (confIds.size()) {
res = confIds[0];
} else {
res = -1;
}
return res;
}
//! Compute an embedding (in 3D) for the specified molecule using Distance
// Geometry
/*!
The following operations are performed (in order) here:
-# Build a distance bounds matrix based on the topology, including 1-5
distances but not VDW scaling
-# Triangle smooth this bounds matrix
-# If step 2 fails - repeat step 1, this time without 1-5 bounds and with vdW
scaling, and repeat step 2
-# Pick a distance matrix at random using the bounds matrix
-# Compute initial coordinates from the distance matrix
-# Repeat steps 3 and 4 until maxIterations is reached or embedding is
successful
-# Adjust initial coordinates by minimizing a Distance Violation error
function
**NOTE**: if the molecule has multiple fragments, they will be embedded
separately,
this means that they will likely occupy the same region of space.
\param mol Molecule of interest
\param maxIterations Max. number of times the embedding will be tried if
coordinates are not obtained successfully. The default
value is 10x the number of atoms.
\param seed provides a seed for the random number generator (so that
the same coordinates can be obtained for a molecule on
multiple runs). If negative, the RNG will not be seeded.
\param clearConfs Clear all existing conformations on the molecule
\param useRandomCoords Start the embedding from random coordinates instead of
using eigenvalues of the distance matrix.
\param boxSizeMult Determines the size of the box that is used for
random coordinates. If this is a positive number, the
side length will equal the largest element of the
distance matrix times \c boxSizeMult. If this is a
negative number, the side length will equal
\c -boxSizeMult (i.e. independent of the elements of the
distance matrix).
\param randNegEig Picks coordinates at random when a embedding process
produces negative eigenvalues
\param numZeroFail Fail embedding if we find this many or more zero
eigenvalues (within a tolerance)
\param coordMap a map of int to Point3D, between atom IDs and their locations
their locations. If this container is provided, the
coordinates are used to set distance constraints on the
embedding. The resulting conformer(s) should have distances
between the specified atoms that reproduce those between the
points in \c coordMap. Because the embedding produces a
molecule in an arbitrary reference frame, an alignment step
is required to actually reproduce the provided coordinates.
\param optimizerForceTol set the tolerance on forces in the distgeom optimizer
(this shouldn't normally be altered in client code).
\param ignoreSmoothingFailures try to embed the molecule even if triangle
bounds smoothing fails
\param enforceChirality enforce the correct chirality if chiral centers are
present
\param useExpTorsionAnglePrefs impose experimental torsion-angle preferences
\param useBasicKnowledge impose "basic knowledge" terms such as flat
aromatic rings, ketones, etc.
\param verbose print output of experimental torsion-angle preferences
\param basinThresh set the basin threshold for the DGeom force field,
(this shouldn't normally be altered in client code).
\param onlyHeavyAtomsForRMS only use the heavy atoms when doing RMS filtering
\return ID of the conformations added to the molecule, -1 if the emdedding
failed
*/
inline int EmbedMolecule(ROMol &mol, unsigned int maxIterations = 0,
int seed = -1, bool clearConfs = true,
bool useRandomCoords = false, double boxSizeMult = 2.0,
bool randNegEig = true, unsigned int numZeroFail = 1,
const std::map<int, RDGeom::Point3D> *coordMap = 0,
double optimizerForceTol = 1e-3,
bool ignoreSmoothingFailures = false,
bool enforceChirality = true,
bool useExpTorsionAnglePrefs = false,
bool useBasicKnowledge = false, bool verbose = false,
double basinThresh = 5.0,
bool onlyHeavyAtomsForRMS = false) {
EmbedParameters params(
maxIterations, 1, seed, clearConfs, useRandomCoords, boxSizeMult,
randNegEig, numZeroFail, coordMap, optimizerForceTol,
ignoreSmoothingFailures, enforceChirality, useExpTorsionAnglePrefs,
useBasicKnowledge, verbose, basinThresh, -1.0, onlyHeavyAtomsForRMS);
return EmbedMolecule(mol, params);
};
//*! Embed multiple conformations for a molecule
/*!
This is kind of equivalent to calling EmbedMolecule multiple times - just that
the bounds
matrix is computed only once from the topology
**NOTE**: if the molecule has multiple fragments, they will be embedded
separately,
this means that they will likely occupy the same region of space.
\param mol Molecule of interest
\param res Used to return the resulting conformer ids
\param numConfs Number of conformations to be generated
\param numThreads Sets the number of threads to use (more than one thread
will only be used if the RDKit was build with
multithread
support). If set to zero, the max supported by the
system
will be used.
\param maxIterations Max. number of times the embedding will be tried if
coordinates are not obtained successfully. The default
value is 10x the number of atoms.
\param seed provides a seed for the random number generator (so that
the same coordinates can be obtained for a molecule on
multiple runs). If negative, the RNG will not be seeded.
\param clearConfs Clear all existing conformations on the molecule
\param useRandomCoords Start the embedding from random coordinates instead of
using eigenvalues of the distance matrix.
\param boxSizeMult Determines the size of the box that is used for
random coordinates. If this is a positive number, the
side length will equal the largest element of the
distance matrix times \c boxSizeMult. If this is a
negative number, the side length will equal
\c -boxSizeMult (i.e. independent of the elements of the
distance matrix).
\param randNegEig Picks coordinates at random when a embedding process
produces negative eigenvalues
\param numZeroFail Fail embedding if we find this many or more zero
eigenvalues (within a tolerance)
\param pruneRmsThresh Retain only the conformations out of 'numConfs' after
embedding that are at least this far apart from each
other. RMSD is computed on the heavy atoms.
Pruning is greedy; i.e. the first embedded conformation
is retained and from then on only those that are at
least
pruneRmsThresh away from already retained conformations
are kept. The pruning is done after embedding and
bounds violation minimization. No pruning by default.
\param coordMap a map of int to Point3D, between atom IDs and their locations
their locations. If this container is provided, the
coordinates are used to set distance constraints on the
embedding. The resulting conformer(s) should have distances
between the specified atoms that reproduce those between the
points in \c coordMap. Because the embedding produces a
molecule in an arbitrary reference frame, an alignment step
is required to actually reproduce the provided coordinates.
\param optimizerForceTol set the tolerance on forces in the DGeom optimizer
(this shouldn't normally be altered in client code).
\param ignoreSmoothingFailures try to embed the molecule even if triangle
bounds smoothing fails
\param enforceChirality enforce the correct chirality if chiral centers are
present
\param useExpTorsionAnglePrefs impose experimental torsion-angle preferences
\param useBasicKnowledge impose "basic knowledge" terms such as flat
aromatic rings, ketones, etc.
\param verbose print output of experimental torsion-angle preferences
\param basinThresh set the basin threshold for the DGeom force field,
(this shouldn't normally be altered in client code).
\param onlyHeavyAtomsForRMS only use the heavy atoms when doing RMS filtering
*/
inline void EmbedMultipleConfs(
ROMol &mol, INT_VECT &res, unsigned int numConfs = 10, int numThreads = 1,
unsigned int maxIterations = 30, int seed = -1, bool clearConfs = true,
bool useRandomCoords = false, double boxSizeMult = 2.0,
bool randNegEig = true, unsigned int numZeroFail = 1,
double pruneRmsThresh = -1.0,
const std::map<int, RDGeom::Point3D> *coordMap = 0,
double optimizerForceTol = 1e-3, bool ignoreSmoothingFailures = false,
bool enforceChirality = true, bool useExpTorsionAnglePrefs = false,
bool useBasicKnowledge = false, bool verbose = false,
double basinThresh = 5.0, bool onlyHeavyAtomsForRMS = false) {
EmbedParameters params(maxIterations, numThreads, seed, clearConfs,
useRandomCoords, boxSizeMult, randNegEig, numZeroFail,
coordMap, optimizerForceTol, ignoreSmoothingFailures,
enforceChirality, useExpTorsionAnglePrefs,
useBasicKnowledge, verbose, basinThresh,
pruneRmsThresh, onlyHeavyAtomsForRMS);
EmbedMultipleConfs(mol, res, numConfs, params);
};
//! \overload
inline INT_VECT EmbedMultipleConfs(
ROMol &mol, unsigned int numConfs = 10, unsigned int maxIterations = 30,
int seed = -1, bool clearConfs = true, bool useRandomCoords = false,
double boxSizeMult = 2.0, bool randNegEig = true,
unsigned int numZeroFail = 1, double pruneRmsThresh = -1.0,
const std::map<int, RDGeom::Point3D> *coordMap = 0,
double optimizerForceTol = 1e-3, bool ignoreSmoothingFailures = false,
bool enforceChirality = true, bool useExpTorsionAnglePrefs = false,
bool useBasicKnowledge = false, bool verbose = false,
double basinThresh = 5.0, bool onlyHeavyAtomsForRMS = false) {
EmbedParameters params(maxIterations, 1, seed, clearConfs, useRandomCoords,
boxSizeMult, randNegEig, numZeroFail, coordMap,
optimizerForceTol, ignoreSmoothingFailures,
enforceChirality, useExpTorsionAnglePrefs,
useBasicKnowledge, verbose, basinThresh,
pruneRmsThresh, onlyHeavyAtomsForRMS);
INT_VECT res;
EmbedMultipleConfs(mol, res, numConfs, params);
return res;
};
//! Parameters corresponding to Sereina Riniker's KDG approach
@@ -371,33 +397,8 @@ extern const EmbedParameters KDG;
extern const EmbedParameters ETDG;
//! Parameters corresponding to Sereina Riniker's ETKDG approach
extern const EmbedParameters ETKDG;
inline int EmbedMolecule(ROMol &mol, const EmbedParameters &params) {
return EmbedMolecule(
mol, params.maxIterations, params.randomSeed, params.clearConfs,
params.useRandomCoords, params.boxSizeMult, params.randNegEig,
params.numZeroFail, params.coordMap, params.optimizerForceTol,
params.ignoreSmoothingFailures, params.enforceChirality,
params.useExpTorsionAnglePrefs, params.useBasicKnowledge, params.verbose,
params.basinThresh, params.onlyHeavyAtomsForRMS);
}
inline void EmbedMultipleConfs(ROMol &mol, INT_VECT &res, unsigned int numConfs,
const EmbedParameters &params) {
EmbedMultipleConfs(
mol, res, numConfs, params.numThreads, params.maxIterations,
params.randomSeed, params.clearConfs, params.useRandomCoords,
params.boxSizeMult, params.randNegEig, params.numZeroFail,
params.pruneRmsThresh, params.coordMap, params.optimizerForceTol,
params.ignoreSmoothingFailures, params.enforceChirality,
params.useExpTorsionAnglePrefs, params.useBasicKnowledge, params.verbose,
params.basinThresh, params.onlyHeavyAtomsForRMS);
}
inline INT_VECT EmbedMultipleConfs(ROMol &mol, unsigned int numConfs,
const EmbedParameters &params) {
INT_VECT res;
EmbedMultipleConfs(mol, res, numConfs, params);
return res;
}
//! Parameters corresponding to Sereina Riniker's ETKDG approach - version 2
extern const EmbedParameters ETKDGv2;
}
}

View File

@@ -41,14 +41,21 @@ int EmbedMolecule(ROMol &mol, unsigned int maxAttempts, int seed,
pMapPtr = &pMap;
}
bool verbose = printExpTorsionAngles;
int numThreads = 1;
double pruneRmsThresh = -1.;
const double basinThresh = DGeomHelpers::EmbedParameters().basinThresh;
bool onlyHeavyAtomsForRMS = false;
DGeomHelpers::EmbedParameters params(
maxAttempts, numThreads, seed, clearConfs, useRandomCoords, boxSizeMult,
randNegEig, numZeroFail, pMapPtr, forceTol, ignoreSmoothingFailures,
enforceChirality, useExpTorsionAnglePrefs, useBasicKnowledge, verbose,
basinThresh, pruneRmsThresh, onlyHeavyAtomsForRMS);
int res;
{
NOGIL gil;
res = DGeomHelpers::EmbedMolecule(
mol, maxAttempts, seed, clearConfs, useRandomCoords, boxSizeMult,
randNegEig, numZeroFail, pMapPtr, forceTol, ignoreSmoothingFailures,
enforceChirality, useExpTorsionAnglePrefs, useBasicKnowledge,
printExpTorsionAngles);
res = DGeomHelpers::EmbedMolecule(mol, params);
}
return res;
}
@@ -80,15 +87,19 @@ INT_VECT EmbedMultipleConfs(
if (nKeys) {
pMapPtr = &pMap;
}
bool verbose = printExpTorsionAngles;
const double basinThresh = DGeomHelpers::EmbedParameters().basinThresh;
bool onlyHeavyAtomsForRMS = false;
DGeomHelpers::EmbedParameters params(
maxAttempts, numThreads, seed, clearConfs, useRandomCoords, boxSizeMult,
randNegEig, numZeroFail, pMapPtr, forceTol, ignoreSmoothingFailures,
enforceChirality, useExpTorsionAnglePrefs, useBasicKnowledge, verbose,
basinThresh, pruneRmsThresh, onlyHeavyAtomsForRMS);
INT_VECT res;
{
NOGIL gil;
DGeomHelpers::EmbedMultipleConfs(
mol, res, numConfs, numThreads, maxAttempts, seed, clearConfs,
useRandomCoords, boxSizeMult, randNegEig, numZeroFail, pruneRmsThresh,
pMapPtr, forceTol, ignoreSmoothingFailures, enforceChirality,
useExpTorsionAnglePrefs, useBasicKnowledge, printExpTorsionAngles);
DGeomHelpers::EmbedMultipleConfs(mol, res, numConfs, params);
}
return res;
}
@@ -119,9 +130,12 @@ PyObject *getMolBoundsMatrix(ROMol &mol, bool set15bounds = true,
return PyArray_Return(res);
}
DGeomHelpers::EmbedParameters *getETKDG() {
DGeomHelpers::EmbedParameters *getETKDG() { // ET version 1
return new DGeomHelpers::EmbedParameters(DGeomHelpers::ETKDG);
}
DGeomHelpers::EmbedParameters *getETKDGv2() { // ET version 2
return new DGeomHelpers::EmbedParameters(DGeomHelpers::ETKDGv2);
}
DGeomHelpers::EmbedParameters *getKDG() {
return new DGeomHelpers::EmbedParameters(DGeomHelpers::KDG);
}
@@ -306,6 +320,9 @@ BOOST_PYTHON_MODULE(rdDistGeom) {
.def_readwrite("useBasicKnowledge",
&RDKit::DGeomHelpers::EmbedParameters::useBasicKnowledge,
"impose basic-knowledge constraints such as flat rings")
.def_readwrite("ETversion",
&RDKit::DGeomHelpers::EmbedParameters::ETversion,
"version of the experimental torsion-angle preferences")
.def_readwrite("verbose", &RDKit::DGeomHelpers::EmbedParameters::verbose,
"be verbose about configuration")
.def_readwrite("pruneRmsThresh",
@@ -346,9 +363,14 @@ BOOST_PYTHON_MODULE(rdDistGeom) {
\n";
python::def("EmbedMolecule", RDKit::EmbedMolecule2,
(python::arg("mol"), python::arg("params")), docString.c_str());
python::def("ETKDG", RDKit::getETKDG,
"Returns an EmbedParameters object for the ETKDG method.",
python::return_value_policy<python::manage_new_object>());
python::def(
"ETKDG", RDKit::getETKDG,
"Returns an EmbedParameters object for the ETKDG method - version 1.",
python::return_value_policy<python::manage_new_object>());
python::def(
"ETKDGv2", RDKit::getETKDGv2,
"Returns an EmbedParameters object for the ETKDG method - version 2.",
python::return_value_policy<python::manage_new_object>());
python::def("ETDG", RDKit::getETDG,
"Returns an EmbedParameters object for the ETDG method.",
python::return_value_policy<python::manage_new_object>());

View File

@@ -456,6 +456,14 @@ class TestCase(unittest.TestCase):
self.assertEqual(rdDistGeom.EmbedMolecule(mol, params), 0)
self._compareConfs(mol, ref, 0, 0)
fn = os.path.join(RDConfig.RDBaseDir, 'Code', 'GraphMol', 'DistGeomHelpers', 'test_data',
'simple_torsion.etkdg.mol')
ref = Chem.MolFromMolFile(fn, removeHs=False)
params = rdDistGeom.ETKDGv2()
params.randomSeed = 42
self.assertEqual(rdDistGeom.EmbedMolecule(mol, params), 0)
self._compareConfs(mol, ref, 0, 0)
if __name__ == '__main__':
unittest.main()

View File

@@ -569,9 +569,9 @@ void testMultipleConfs() {
void testMultipleConfsExpTors() {
std::string smi = "CC(C)(C)c(cc1)ccc1c(cc23)n[n]3C(=O)/C(=C\\N2)C(=O)OCC";
ROMol *m = SmilesToMol(smi, 0, 1);
INT_VECT cids = DGeomHelpers::EmbedMultipleConfs(
*m, 10, 30, 100, true, false, -1, true, 1, -1.0, nullptr, 1e-3, false,
true, true, true, false);
INT_VECT cids = DGeomHelpers::EmbedMultipleConfs(*m, 10, 30, 100, true, false,
-1, true, 1, -1.0, 0, 1e-3,
false, true, true, true);
INT_VECT_CI ci;
// SDWriter writer("junk.sdf");
double energy;
@@ -1493,7 +1493,8 @@ void testGithub568() {
"Nc1ncnc2c1ncn2[C@H]3C[C@H](O)[C@@H](CO)C3",
"C[C@@H](N1CC[C@@]23CCCC[C@@H]2[C@@H]1Cc4ccc(OCc5cccc(F)c5)cc34)C(=O)N",
"CN1C(=O)CC[C@@]2(C)C1=CCc3cc(Cl)ccc23",
"Cc1nc(COc2ccc3OC[C@H](Cc4cccnc4)[C@H](O)c3c2)ccc1[N+](=O)[O-]", "EOS"};
"Cc1nc(COc2ccc3OC[C@H](Cc4cccnc4)[C@H](O)c3c2)ccc1[N+](=O)[O-]",
"EOS"};
for (unsigned int idx = 0; smis[idx] != "EOS"; ++idx) {
ROMol *m = SmilesToMol(smis[idx]);
std::string csmi = MolToSmiles(*m, true);
@@ -1551,8 +1552,11 @@ void testGithub697() {
{ // a group of chembl molecules (and things derived from them), all of which
// contain a c1cscn1 heterocycle
std::string smis[] = {
"C1SC2=NC1CCCCCC2", "C1CCCc2nc(CC1)cs2", "C1Cc2coc(n2)-c2coc(C1)n2",
"C1Cc2coc(n2)-c2csc(C1)n2", "C1CCc2nc(cs2)-c2nc(C1)co2",
"C1SC2=NC1CCCCCC2",
"C1CCCc2nc(CC1)cs2",
"C1Cc2coc(n2)-c2coc(C1)n2",
"C1Cc2coc(n2)-c2csc(C1)n2",
"C1CCc2nc(cs2)-c2nc(C1)co2",
"C1Cc2nc(co2)-c2nc(cs2)-c2nc1co2",
"C1Cc2nc(co2)-c2nc(co2)-c2nc(cs2)-c2nc(co2)-c2nc1co2",
"C1CNCc2coc(n2)-c2coc(n2)-c2csc(n2)-c2coc(n2)-c2coc(CNCCN1)n2",
@@ -1725,6 +1729,27 @@ void testEmbedParameters() {
delete ref;
delete mol;
}
{
std::string fname =
rdbase +
"/Code/GraphMol/DistGeomHelpers/test_data/simple_torsion.etkdg.mol";
RWMol *ref = MolFileToMol(fname, true, false);
TEST_ASSERT(ref);
RWMol *mol = SmilesToMol("OCCC");
TEST_ASSERT(mol);
MolOps::addHs(*mol);
TEST_ASSERT(ref->getNumAtoms() == mol->getNumAtoms());
DGeomHelpers::EmbedParameters params;
params.randomSeed = 42;
params.useExpTorsionAnglePrefs = true;
params.useBasicKnowledge = true;
params.ETversion = 2;
DGeomHelpers::EmbedMolecule(*mol, params);
compareConfs(ref, mol);
delete ref;
delete mol;
}
{
std::string fname =
rdbase +

View File

@@ -1,5 +1,5 @@
//
// Copyright (C) 2015 Sereina Riniker
// Copyright (C) 2017 Sereina Riniker
//
// @@ All Rights Reserved @@
// This file is part of the RDKit.
@@ -32,7 +32,8 @@ namespace CrystalFF {
using namespace RDKit;
/* SMARTS patterns for experimental torsion angle preferences
* taken from J. Med. Chem. 56, 1026-2028 (2013)
* Version 1 taken from J. Med. Chem. 56, 1026-2028 (2013)
* Version 2 taken from J. Chem. Inf. Model. 56, 1 (2016)
*
* torsion-angle potential form:
* V = V1*(1 + s1*cos(1x)) + V2*(1 + s2*cos(2x)) + V3*(1 + s3*cos(1x))
@@ -40,589 +41,8 @@ using namespace RDKit;
*
* format: [SMARTS, s1, V1, s2, V2, s3, V3, s4, V4, s5, V5, s6, V6]
*/
const std::string torsionPreferences =
"[O:1]=[C:2]!@;-[O:3]~[CH0:4] -1 78.2 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]!@;-[O:3]~[CH0:4] -1 78.2 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]([N])!@;-[O:3]~[C:4] -1 79.1 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]!@;-[O:3]~[C:4] -1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]!@;-[O:3]~[!#1:4] -1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][O:2]!@;-[c:3]~[*:4] 1 0.0 1 0.8 1 0.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][O:2]!@;-[CX3:3]~[*:4] 1 0.0 1 0.0 1 0.0 -1 1.0 1 0.0 1 0.0\n"
"O=[C:1][O:2]!@;-[CH1:3][H:4] -1 20.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][O:2]!@;-[CH2:3]~[C:4] 1 0.0 1 0.0 1 2.5 1 0.0 1 0.0 1 0.0\n"
"[H:1][CX4H1:2]!@;-[O:3][CX4:4] -1 20.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[C:1][CH2:2]!@;-[O:3][CX4:4] 1 0.0 1 0.0 1 2.5 1 0.0 1 0.0 1 0.0\n"
"[*:1][CX4:2]!@;-[O:3][CX3:4](=[!O]) 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[O:1][CX4:2]!@;-[O:3][CX4:4] 1 0.0 1 0.0 1 8.8 1 0.0 1 0.0 1 0.0\n"
"[*:1][CX4:2]!@;-[O:3][CX4:4] 1 0.0 1 0.0 1 2.5 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[O:3][S:4] 1 0.0 1 3.2 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH0])!@;-[O:3][S:4] 1 0.0 1 8.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[O:3][S:4] 1 0.0 1 11.5 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[O:3][c:4] 1 0.0 1 0.0 1 0.0 -1 0.5 1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH0])!@;-[O:3][c:4] 1 0.0 1 0.0 -1 3.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[O:3][c:4] 1 0.0 1 2.7 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[O:3][!C;!H:4] 1 0.0 -1 5.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH0:1][c:2]([cH1])!@;-[O:3][!C;!H:4] 1 0.0 -1 5.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH1:1][c:2]([cH1])!@;-[O:3][!C;!H:4] 1 0.0 1 0.0 1 0.0 -1 2.0 1 0.0 1 "
"0.0\n"
"[cH:1][c:2]([cH])!@;-[O:3][C:4](F)(F)[F] 1 0.0 1 30.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
//"[cH0:1][c:2]([cH0])!@;-[O:3][CX4:4]([!#1])([!#1])([!#1])\n"
"[a:1][c:2]([a])!@;-[O:3][CX4H0:4] 1 0.0 1 0.0 1 0.0 -1 2.0 1 0.0 1 0.0\n"
"[cH1,n:1][c:2]!@;-[O:3][CRH1:4] 1 0.0 -1 5.4 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1,n:1][c:2]!@;-[O:3][CH1:4] 1 0.0 -1 7.2 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[nX2H0:1][c:2]([cH0])!@;-[O:3][CX4H0:4] -1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
//"[cH0:1][c:2]([cH0])!@;-[O:3][CX4H0:4]\n"
"[cH0:1][c:2]([nX2])!@;-[O:3][C:4] 1 110.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[nX2:1][c:2]([nX2])!@;-[O:3][C:4] 1 0.0 -1 44.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[nX2:1][c:2]([nX3])!@;-[O:3][C:4] -1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([nX3])!@;-[O:3][C:4] -1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([nX2])!@;-[O:3][C:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1]([CX3])[c:2]([cH1])!@;-[O:3][C:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
"[cH1:1][c:2](cO)!@;-[O:3][C:4] -1 61.9 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"O[c:1][c:2](cO)!@;-[O:3][C:4] 1 0.0 1 3.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[O:3][C:4] 1 0.0 1 6.6 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH1])!@;-[O:3][C:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[O:3][C:4] 1 0.0 -1 19.5 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[O:3][CX3H0:4] 1 0.0 1 1.9 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[O:3][!#1:4] 1 0.0 1 6.6 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[aH0:1][c:2]!@;-[OX2:3][!#1:4] 1 0.8 1 0.7 -1 -0.3 -1 2.5 -1 -0.1 1 -0.8\n"
//"[cH1,nX3H1:1][c:2]([cH0])!@;-[O:3][CX4H0:4]\n"
"[!#1:1][CX4H0:2]!@;-[OX2:3][!#1:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[H:1][CX4H1:2]!@;-[OX2:3][!#1:4] -1 5.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[C:1][CX4H2:2]!@;-[OX2:3][c:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][CX4H2:2]!@;-[OX2:3][C:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[C:1][CX4H2:2]!@;-[OX2:3][C:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][CX4H2:2]!@;-[OX2:3][c:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4H2:2]!@;-[OX2:3][c:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4H2:2]!@;-[OX2:3][C:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][CX4H2:2]!@;-[OX2:3][!#1:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[C:1][CX4H2:2]!@;-[OX2:3][!#1:4] -1 -3.5 1 2.5 -1 -2.3 1 0.6 -1 -0.4 -1 "
"0.4\n"
"[!#1:1][CX4H2:2]!@;-[OX2:3][!#1:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4:2]!@;-[OX2:3][!#1:4] -1 -3.5 1 2.5 -1 -2.3 1 0.6 -1 -0.4 -1 "
"0.4\n"
"O=[CX3:1][NX3H0:2](C)!@;-[CX4H2:3][C:4] 1 0.0 1 8.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[CX3:1][NX3H1:2]!@;-[CX4H2:3][C:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"O=[S:1](=O)[NX3H0:2]!@;-[CX4H2:3][!#1:4] 1 0.0 1 1.9 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[S:1](=O)[NX3H1:2]!@;-[CX4H2:3][!#1:4] 1 17.9 -1 -13.3 1 9.2 1 4.7 -1 "
"-2.3 -1 -0.9\n"
"O=[S:1](=O)[NX3H0:2]!@;-[CX4H1:3][H:4] 1 0.0 -1 15.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[S:1](=O)[NX3H1:2]!@;-[CX4H1:3][H:4] -1 20.0 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[S:1](=O)[NH1:2]!@;-[c:3][nX2:4] 1 0.0 -1 15.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"O=[S:1](=O)[NH0:2]!@;-[c:3]([cH1])[cH1:4] 1 0.0 1 13.3 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
"O=[S:1](=O)[NH1:2]!@;-[c:3]([cH1])[cH1:4] 1 0.0 1 0.0 1 0.0 1 0.9 1 0.0 1 "
"0.0\n"
"O=[S:1](=O)[NH0:2]!@;-[c:3]([cH1])[cH0:4] 1 0.0 1 50.0 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
"O=[S:1](=O)[NH1:2]!@;-[c:3]([cH1])[cH0:4] 1 1.9 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[S:1](=O)[NH0:2]!@;-[c:3]([cH0])[cH0:4] 1 0.0 1 17.8 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
"O=[S:1](=O)[NH1:2]!@;-[c:3]([cH0])[cH0:4] 1 0.0 1 10.6 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
"O=[S:1](=O)[N:2]!@;-[c:3][a:4] 1 0.0 1 0.0 1 0.0 -1 2.0 1 0.0 1 0.0\n"
"[O-:1][N+:2](=O)!@;-[c:3]([cH,nX2H0])[cH,nX2H0:4] 1 0.0 -1 5.0 1 0.0 1 "
"0.0 1 0.0 1 0.0\n"
"[O-:1][N+:2](=O)!@;-[c:3]([cH0])[cH,nX2H0:4] -1 -0.2 1 -5.7 1 -0.2 -1 "
"-3.2 1 0.1 1 -1.3\n"
"[O-:1][N+:2](=O)!@;-[c:3]([cH0])[cH0:4] -1 -0.4 1 0.3 1 -0.1 -1 0.6 1 "
"-0.1 -1 0.2\n"
"[O-:1][N+:2](=O)!@;-[c:3][a:4] 1 0.0 -1 11.8 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[NX3H1:3][C,c:4] 1 0.0 1 0.0 1 0.0 -1 0.8 1 0.0 1 "
"0.0\n"
"[cH0:1][c:2]([cH1])!@;-[NX3H1:3][C,c:4] 1 15.0 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH0:1][c:2]([nX2H0])!@;-[NX3H1:3][C,c:4] 1 40.0 1 0.0 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
"[cH0:1][c:2]([nX3H1])!@;-[NX3H1:3][C,c:4] 1 50.0 1 0.0 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[NX3H1:3][C,c:4] 1 0.0 -1 1.4 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH1:1][c:2]([nX3H1])!@;-[NX3H1:3][C,c:4] 1 0.0 -1 100.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[nX2H0:1][c:2]([nX2H0])!@;-[NX3H1:3][C,c:4] 1 0.0 -1 15.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[nX2H0:1][c:2]([nX3H1])!@;-[NX3H1:3][C,c:4] 1 0.0 -1 27.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[a:1][a:2]!@;-[NH1:3][C,c:4] 1 0.0 -1 6.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[C:1][NH:2]!@;-[C:3](=[NH2:4])[NH2] 1 0.0 -1 100.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[NH2][C:1](=[NH2])[NH:2]!@;-[CH2:3][C:4] 1 0.0 1 0.0 1 2.5 1 0.0 1 0.0 1 "
"0.0\n"
"[a:1][c:2]!@;-[NX2:3]=[C:4]([NX3])n -1 -0.1 1 1.9 -1 -0.1 -1 -1.9 -1 0.1 "
"1 0.0\n"
"[nX2:1][c:2]!@;-[NX2:3]=[C:4]([NX3])N 1 0.0 -1 6.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH0:1][c:2]!@;-[NX2:3]=[C:4]([NX3])N -1 -0.1 1 1.9 -1 -0.1 -1 -1.9 -1 "
"0.1 1 0.0\n"
"[cH1:1][c:2]!@;-[NX2:3]=[C:4]([NX3])N 1 -0.4 -1 -0.9 1 -0.4 1 1.1 1 -0.2 "
"1 -0.1\n"
"[O:1]=[C:2]([NH1])!@;-[NX3H1:3](C=O)[H:4] -1 144.7 1 0.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[O:1]=[C:2]!@;-[NX3H1:3](C=O)[H:4] 1 0.0 -1 10.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]!@;-[NX3:3](C=O)[*:4] 1 0.0 -1 10.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][NX3H1:2]!@;-[CX3:3]=[NX2:4] 1 63.8 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][NX3H0:2]!@;-[CX3:3]=[*H0:4] 1 0.0 -1 8.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][NX3H0:2]!@;-[CX3:3]=[*H1:4] 1 0.0 1 0.0 1 2.5 1 0.0 1 0.0 1 0.0\n"
//"O=[C:1][NX3H0:2]!@;-[CX3:3]=[*H2:4] \n"
"O=[C:1][NX3H1:2]!@;-[CX3:3]=[*H2:4] 1 0.0 -1 68.5 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[C:1][NX3H1:2]!@;-[CX3:3]=[*H1:4] 1 0.0 1 0.0 -1 2.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][NX3H1:2]!@;-[CX3:3]=[*H0:4] 1 0.0 -1 39.4 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[C:1][NX3H0:2]!@;-[CX3H1:3]=[*:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[C:1][NX3H1:2]!@;-[CX3H1:3]=[*:4] 1 84.1 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][NX3H1:2]!@;-[CX3:3]=[*:4] 1 0.0 -1 33.2 1 0.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][NX3H0:2]!@;-[CX4H2:3][c:4]([cH,nX2H0])[cH,nX2H0] 1 0.0 1 3.0 1 "
"0.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][NX3H1:2]!@;-[CX4H2:3][c:4]([cH,nX2H0])[cH,nX2H0] -1 -1.3 1 1.6 -1 "
"-0.6 -1 0.6 1 -0.1 -1 0.3\n"
"O=[C:1][NX3H0:2]!@;-[CX4H2:3][!#1:4] 1 0.0 1 15.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[C:1][NX3H1:2]!@;-[CX4H2:3][!#1:4] 1 0.0 1 0.0 1 2.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][NX3H0:2]!@;-[CX4H1:3][H:4] 1 0.0 -1 8.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][NX3H1:2]!@;-[CX4H1:3][H:4] -1 5.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][NX3H0:2]!@;-[CX4H0:3][C:4] 1 0.0 1 0.0 1 2.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][NX3H1:2]!@;-[CX4H0:3][C:4] 1 0.0 1 0.0 1 2.5 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][NX3:2]!@;-[!#1:3][!#1:4] 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0 -1 0.7\n"
"O=[C:1][NX3H0:2]!@;-[c:3]([s,o])[n:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[C:1][NX3H1:2]!@;-[c:3]([s,o])[n:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[C:1][NX3:2]!@;-[a:3]([s,o])[a:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[C:1][NX3H1:2]!@;-[c:3]([cH,nX2H0])[cH,nX2H0:4] 1 0.0 -1 2.8 1 0.0 1 "
"0.0 1 0.0 1 0.0\n"
//"O=[C:1][NX3:2]!@;-[a:3]([nX2H0])[cH0:4]\n"
"O=[C:1][NX3H1:2]!@;-[a:3]([nX2H0])[cH1:4] -1 22.9 1 0.0 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
"O=[C:1][NX3:2]!@;-[a:3]([nX2H0])[cH1:4] -1 21.4 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[C:1][NX3:2]!@;-[a:3][nH:4] -1 53.3 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][NX3H1:2]!@;-[c:3]([cH0]Cl)[cH:4] -1 20.0 1 0.0 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
"O=[C:1][NX3H1:2]!@;-[c:3]([cH0]F)[cH:4] -1 11.4 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[C:1][NX3:2]!@;-[a:3]([cH1])[aH0:4]!@;-O 1 38.2 1 0.0 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
"O=[C:1][NX3:2]!@;-[a:3][aH0:4] 1 0.0 1 0.0 1 0.0 -1 0.7 1 0.0 1 0.0\n"
"O=[C:1][NX3H1:2]!@;-[c:3]([cH1])[cH1:4] 1 0.0 -1 2.1 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[C:1][NX3H0:2]!@;-[c:3]([cH1])[cH1:4] 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0 -1 "
"0.8\n"
"O=[C:1][NX3H0:2]!@;-[c:3]([cH0])[cH:4] 1 0.0 1 2.4 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[C:1][NX3H1:2]!@;-[c:3]([cH0])[cH:4] -1 9.7 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[C:1][NX3H0:2]!@;-[c:3]([cH0])[cH0:4] 1 0.0 1 2.9 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[C:1][NX3H1:2]!@;-[c:3]([cH0])[cH0:4] 1 0.0 1 2.9 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[C:1][NX3H0:2]!@;-[a:3][a:4] 1 0.0 1 0.7 1 0.0 1 0.0 1 0.0 -1 0.3\n"
"O=[C:1][NX3H1:2]!@;-[a:3][a:4] 1 0.0 -1 3.1 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[CX3:2]([NX3H1]C)!@;-[NX3H1:3][!#1:4] -1 51.7 1 0.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[O:1]=[C:2]([!NH1])!@;-[NX3H1:3]([H:4])(c([nX2H0])([nX2H0])) 1 100.0 1 "
"0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]([NH1])!@;-[NX3H1:3]([H:4])(c([nX2H0])([nX2H0])) -1 100.0 1 "
"0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]!@;-[NX3H1:3]([H:4])(c([nX2H0])([nX2H0])) 1 0.0 -1 100.0 1 0.0 "
"1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]!@;-[NX3H1:3]([H:4])(cn) 1 0.0 -1 50.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[O:1]=[C:2]!@;-[NX3H0:3]([a:4])[A] 1 0.0 -1 4.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[CX3:2](a)!@;-[NX3H0:3][!#1:4] 1 0.0 -1 13.9 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[O:1]=[CX3:2]!@;-[NX3H0:3][!#1:4] 1 0.0 -1 8.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[CX3:2]!@;-[NX3H1:3][!#1:4] -1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[CH0:1][NX3:2]([CH0])!@;-[c:3][a:4] 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[CH0:1][NX3:2]([CH1])!@;-[c:3][a:4] 1 0.0 1 0.0 1 0.0 -1 0.7 1 0.0 1 0.0\n"
"[cH1,nX2H0:1][c:2]([cH1,nX2H0])!@;-[NX3&r:3][*:4] 1 0.0 -1 0.9 1 0.0 1 "
"0.0 1 0.0 1 0.0\n"
"[cH1,nX2H0:1][c:2]([cH1,nX2H0])!@;-[NX3&r:3][CX4&r:4] 1 0.0 -1 3.7 1 0.0 "
"1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[NX3H1:3][CX4&r:4]([C&r])([C&r]) 1 0.0 -1 6.8 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[NX3:3][CX4:4] 1 0.0 1 -0.7 1 0.0 1 -0.5 1 0.0 1 "
"-0.6\n"
"[cH0:1][c:2]([cH,nX2H0])!@;-[NX3H1:3][CX4:4] 1 73.1 1 0.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[cH0:1][c:2]([cH,nX2H0])!@;-[NX3H0:3][CX4:4] 1 0.0 1 0.0 1 0.8 1 0.0 1 "
"0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[NX3:3][CX4:4] 1 0.0 1 0.0 1 0.0 -1 2.0 1 0.0 1 "
"0.0\n"
"[c:1][c:2](c)!@;-[NX3:3][CX4:4] 1 0.0 -1 0.5 1 0.0 -1 0.8 1 0.0 1 -0.6\n"
"[cH1:1][c:2]([cH1])!@;-[NX3:3][a:4] 1 0.0 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH0])!@;-[NX3:3][a:4] 1 0.0 1 0.0 -1 3.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[NX3:3][a:4] 1 0.0 1 1.3 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][a:2]!@;-[NX3H0:3][CX3:4]=O 1 0.0 1 2.3 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][a:2]!@;-[NX3H1:3][CX3:4]=O -1 -1.6 -1 -0.6 1 0.6 -1 0.0 -1 0.1 1 "
"-0.5\n"
//"[nX2H0:1][a:2]([nX2H0])!@;-[NX3H0:3][CX3:4]=O\n"
"[nX2H0:1][a:2]([!nX2H0])!@;-[NX3H1:3][CX3:4](A)=O 1 72.8 1 0.0 1 0.0 1 "
"0.0 1 0.0 1 0.0\n"
"[nX2H0:1][a:2]([!nX2H0])!@;-[NX3H1:3][CX3:4](a)=O 1 72.8 1 0.0 1 0.0 1 "
"0.0 1 0.0 1 0.0\n"
"[nX2H0:1][a:2]([!nX2H0])!@;-[NX3H1:3][CX3:4](C)=O 1 72.8 1 0.0 1 0.0 1 "
"0.0 1 0.0 1 0.0\n"
"[nX2H0:1][a:2]([!nX2H0])!@;-[NX3H1:3][CX3:4]([NX3H1])=O 1 72.8 1 0.0 1 "
"0.0 1 0.0 1 0.0 1 0.0\n"
"[nX2H0:1][a:2]([!nX2H0])!@;-[NX3H1:3][CX3:4]([OX2])=O 1 72.8 1 0.0 1 0.0 "
"1 0.0 1 0.0 1 0.0\n"
"[nX2H0:1][a:2]([!nX2H0])!@;-[NX3H1:3][CX3:4]=O 1 72.8 1 0.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[nX2H0:1][a:2]!@;-[NX3H1:3][CX3:4]=O 1 0.0 -1 34.4 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[a:1][a:2]!@;-[NX3H0:3][CX3:4]=O 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0 -1 0.6\n"
"[a:1][a:2]!@;-[NX3H1:3][CX3:4]=O 1 0.0 -1 3.1 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][a:2]!@;-[NX3:3][CX4H0:4] 1 0.0 1 0.0 1 0.0 -1 4.0 1 0.0 1 0.0\n"
"[a:1][a:2]!@;-[NX3:3][!#1:4] 1 0.0 1 -0.7 1 0.0 1 -0.5 1 0.0 1 -0.6\n"
"[O:1]=[CX3:2]!@;-[nX3:3]([aH0:4])([aH0]) 1 0.0 -1 8.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[O:1]=[CX3:2]!@;-[nX3:3][aH1:4] 1 0.0 -1 18.7 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[CX3:2]!@;-[nX3:3][aH0:4] 1 0.0 -1 6.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][CX3:2](=S)!@;-[NX3:3][a:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX3:2](=S)!@;-[NX3H0:3][!#1:4] 1 0.0 -1 22.5 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[!#1:1][CX3:2](=S)!@;-[NX3H1:3][!#1:4] 1 0.0 -1 20.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[!#1:1][CH2:2]!@;-[n:3][cH0:4] 1 0.0 1 6.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CH2:2]!@;-[n:3][a:4] 1 0.0 1 8.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[CX4:1][CX4H2:2]!@;-[NX3;N^3:3][CX4:4] 1 4.0 1 3.1 1 3.9 -1 -0.8 1 0.0 1 "
"0.7\n"
"[CX4:1][CX4H2:2]!@;-[NX3:3][CX4:4] 1 4.0 1 3.1 1 3.9 -1 -0.8 1 0.0 1 0.7\n"
"[C:1][CX4H2:2]!@;-[NX3;N^3:3][C:4] 1 4.0 1 3.1 1 3.9 -1 -0.8 1 0.0 1 0.7\n"
"[C:1][CX4H2:2]!@;-[NX3:3][C:4] 1 4.0 1 3.1 1 3.9 -1 -0.8 1 0.0 1 0.7\n"
"[C:1][CX4:2]!@;-[NX3;N^3:3][C:4] 1 1.9 1 1.6 1 2.3 -1 -0.5 1 -0.1 1 0.2\n"
"[C:1][CX4:2]!@;-[NX3:3][C:4] 1 0.0 1 0.0 1 1.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4H2:2]!@;-[NX3H1;N^3:3][!#1:4] -1 -3.1 1 1.5 -1 -1.6 1 0.2 -1 "
"-0.2 1 -0.2\n"
"[!#1:1][CX4H2:2]!@;-[NX3H1:3][!#1:4] 1 0.0 1 0.0 1 1.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4H2:2]!@;-[NX3;N^3:3][!#1:4] 1 0.0 1 0.0 1 1.7 1 0.0 1 0.0 1 "
"0.0\n"
"[!#1:1][CX4H2:2]!@;-[NX3:3][!#1:4] 1 0.0 1 0.0 1 1.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4:2]!@;-[NX3;N^3:3][!#1:4] 1 0.0 1 0.0 1 1.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4:2]!@;-[NX3:3][!#1:4] 1 0.0 1 0.0 1 1.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][S:2](=O)(=O)!@;-[nX3:3]([aH1])[aH1:4] 1 0.0 1 20.5 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[!#1:1][S:2](=O)(=O)!@;-[nX3:3][aH0:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 "
"0.0\n"
"[!#1:1][S:2](=O)(=O)!@;-[nX3:3][a:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 "
"0.0\n"
"[c:1][S:2](=O)(=O)!@;-[NX2H0:3]-[*:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 "
"0.0\n"
"[*:1][S:2](=O)(=O)!@;-[NX3H0&r:3][*:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 "
"0.0\n"
"[C:1][S:2](=O)(=O)!@;-[NX3H1:3][c:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 "
"0.0\n"
"[C:1][S:2](=O)(=O)!@;-[NX3H0:3][c:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 "
"0.0\n"
"[c:1][S:2](=O)(=O)!@;-[NX3H1:3][C:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 "
"0.0\n"
"[c:1][S:2](=O)(=O)!@;-[NX3H0:3][C:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 "
"0.0\n"
"[c:1][S:2](=O)(=O)!@;-[NX3H1:3][c:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 "
"0.0\n"
"[c:1][S:2](=O)(=O)!@;-[NX3H0:3][c:4] 1 0.0 1 4.1 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[C:1][S:2](=O)(=O)!@;-[NX3H1:3][C:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 "
"0.0\n"
"[C:1][S:2](=O)(=O)!@;-[NX3H0:3][C:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 "
"0.0\n"
"[*:1][S:2](=O)(=O)!@;-[NX3H1:3][*:4] 1 0.0 1 1.2 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[*:1][S:2](=O)(=O)!@;-[NX3H0:3][*:4] 1 0.0 1 3.7 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX3:2]!@;-[SX2:3][!#1:4] 1 0.0 -1 2.5 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4:2]!@;-[SX2:3][!#1:4] -1 -0.8 -1 -0.8 -1 -1.5 -1 0.4 1 -0.1 -1 "
"0.3\n"
"[!#1:1][CX3:2]!@;-[SX3:3][!#1:4] -1 5.5 1 8.7 -1 3.1 1 5.0 1 -1.7 1 1.0\n"
"[!#1:1][CX4:2]!@;-[SX3:3][!#1:4] 1 0.0 1 0.0 1 10.4 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX3:2]!@;-[SX4:3][!#1:4] 1 0.0 1 3.8 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[H:1][CX4H1:2]!@;-[SX4:3][!#1:4] 1 0.0 1 0.0 1 2.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4:2]!@;-[SX4:3][!#1:4] 1 0.0 1 0.0 1 5.0 1 0.0 1 0.0 1 0.0\n"
"[aH1:1][c:2]([aH1])!@;-[SX2:3][!#1:4] 1 0.0 1 0.0 1 0.0 -1 0.9 1 0.0 1 "
"0.0\n"
"[aH1:1][c:2]([aH0])!@;-[SX2:3][!#1:4] 1 0.0 1 0.0 1 0.0 -1 0.9 1 0.0 1 "
"0.0\n"
"[aH0:1][c:2]([aH0])!@;-[SX2:3][!#1:4] 1 -0.2 1 0.4 -1 -0.0 -1 1.9 -1 -0.0 "
"1 -1.1\n"
"[!#1:1][c:2]!@;-[SX2:3][!#1:4] 1 0.0 1 0.0 1 0.0 -1 4.4 1 0.0 1 0.0\n"
"[!#1:1][c:2]!@;-[SX3:3][!#1:4] 1 0.0 1 1.3 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[aH1:1][c:2]([aH1])!@;-[SX4:3][!#1:4] 1 0.0 1 1.5 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[aH0:1][c:2]([aH1])!@;-[SX4:3][!#1:4] 1 0.0 1 0.0 1 2.0 1 0.0 1 0.0 1 "
"0.0\n"
"[aH0:1][c:2]([aH0])!@;-[SX4:3][!#1:4] 1 0.0 1 3.3 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[!#1:1][c:2]!@;-[SX4:3][!#1:4] 1 0.0 1 1.5 1 0.0 1 0.0 1 0.0 1 0.0\n"
//"[O:1]=[CX3:2]([NH1])!@;-[CH2:3][CX3:4]=O\n"
"[O:1]=[CX3:2]([NH1])!@;-[CH2:3][C:4] -1 8.0 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[C]\\[CX3:1]([H])=[CX3:2]([C])!@;-\\[CH2:3][C:4] 1 0.0 1 0.0 -1 5.0 1 0.0 "
"1 0.0 1 0.0\n"
"[C]\\[CX3:1]([H])=[CX3:2]([H])!@;-\\[CH1:3](C)[C:4] 1 0.0 1 0.0 -1 5.0 1 "
"0.0 1 0.0 1 0.0\n"
"[C]\\[CX3:1]([H])=[CX3:2]([H])!@;-\\[CH2:3][C:4] 1 0.0 1 0.0 -1 5.0 1 0.0 "
"1 0.0 1 0.0\n"
"[C]\\[CX3:1]([H])=[CX3:2]([H])!@;-/[CH2:3][C:4] 1 0.0 1 0.0 -1 5.0 1 0.0 "
"1 0.0 1 0.0\n"
"[N:1][C:2](=O)!@;-[CX4H2:3][CX4H2:4] 1 4.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"N[C:2](=[O:1])!@;-[CH2:3][N:4] 1 0.0 -1 10.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]([O-])!@;-[CX4H1:3][H:4] 1 0.0 1 0.0 1 0.0 1 2.0 1 0.0 1 0.0\n"
"[CX3H2:1]=[CX3:2]!@;-[CX3:3]=[C:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[CX3:1]=[CX3:2]!@;-[CH2:3][OX2:4] 1 0.0 1 0.0 -1 20.0 1 0.0 1 0.0 1 0.0\n"
"[CX3:1]=[CX3:2]!@;-[CH1:3](C)[C:4] 1 0.0 1 0.0 -1 4.0 1 0.0 1 0.0 1 0.0\n"
"[CX3:1]=[CX3:2]!@;-[CH2:3][C:4] 1 0.0 1 0.0 -1 1.5 1 0.0 1 0.0 1 0.0\n"
"[CX3:1]=[CX3:2]!@;-[CH2:3][c:4] 1 0.0 1 0.0 -1 1.5 1 0.0 1 0.0 1 0.0\n"
"[CX3:1]=[CX3:2]!@;-[CH2:3][!#1:4] 1 0.0 1 0.0 -1 4.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[CX3:2]!@;-[CX3:3]=[O:4] 1 20.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[CX3:1]=[CX3:2]!@;-[CX3:3]=[CX3:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[*^2:1]~[C^2:2]([!H])!@;-[C^2:3]~[*^2:4] 1 0.0 -1 15.0 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
"[*^2:1]~[C^2:2]!@;-[C^2:3]~[*^2:4] 1 0.0 -1 30.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[CX3:2]!@;-[CX4&r3:3]!@[!#1:4] -1 -0.7 -1 0.5 1 -0.3 -1 0.3 -1 -0.2 "
"-1 0.2\n"
"[O:1]=[CX3:2]!@;-[CX4H1&r3:3][H:4] 1 0.0 -1 3.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[OX2:1][CX4H2:2]!@;-[CX4H2:3][N&r:4] 1 0.0 1 0.0 1 5.0 1 0.0 1 0.0 1 0.0\n"
"[OX2:1][CX4H2:2]!@;-[CX4H2:3][N:4] 1 0.0 1 0.0 1 10.0 1 0.0 1 0.0 1 0.0\n"
"[OX2:1][CX4:2]!@;-[CX4:3][N:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[OX2:1][CX4H2:2]!@;-[CX4H2:3][OX2:4] 1 0.0 1 0.0 1 10.0 1 0.0 1 0.0 1 "
"0.0\n"
"[OX2:1][CX4:2]!@;-[CX4:3][OX2:4] 1 0.0 1 0.0 1 3.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4&r:2]!@;-[CX4&r:3][!#1:4] 1 0.0 1 0.0 1 2.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4H2:2]!@;-[CX4H2:3][!#1:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4:2]!@;-[CX4:3][!#1:4] 1 0.0 1 0.0 1 7.0 1 0.0 1 0.0 1 0.0\n"
"[OH1:1][CX4:2]!@;-[CX3:3]=[O:4] 1 0.0 -1 2.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[NH1:1][CX4:2]!@;-[CX3:3]=[O:4] 1 0.0 -1 2.1 -1 -0.1 -1 -1.0 1 -0.4 1 "
"-0.1\n"
"[O:1][CX4:2]!@;-[CX3:3]=[O:4] 1 0.0 -1 3.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[N:1][CX4:2]!@;-[CX3:3]=[O:4] 1 0.0 -1 1.4 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[C:1][CX4H2:2]!@;-[CX3:3]=[O:4] 1 -1.0 1 -0.5 1 -0.2 1 -0.3 -1 0.0 1 "
"-0.3\n"
"[c:1][CX4H2:2]!@;-[CX3:3]=[O:4] -1 0.9 1 -0.3 1 -0.2 1 -0.5 -1 0.1 1 0.2\n"
"[!#1:1][CX4H2:2]!@;-[CX3:3]=[O:4] 1 0.0 1 -0.7 1 0.0 1 -0.5 1 0.0 1 -0.6\n"
"[c:1][CX4:2]!@;-[CX3:3]=[O:4] 1 0.0 1 0.0 -1 1.0 1 0.0 1 0.0 1 0.0\n"
//"[C:1][CX4:2]!@;-[CX3:3]=[O:4]\n"
//"[!#1:1][CX4:2]!@;-[CX3:3]=[O:4]\n"
"[c:1][CX4:2]!@;-[CX3:3][C:4] 1 0.0 1 0.0 1 1.9 1 0.0 1 0.0 1 0.0\n"
"[C:1][CX4:2]!@;-[CX3:3][c:4] 1 0.0 1 0.0 1 2.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][CX4:2]!@;-[CX3:3][c:4] -1 -4.4 1 4.0 -1 -3.9 -1 -1.0 1 0.6 -1 -0.4\n"
"[C:1][CX4:2]!@;-[CX3:3][C:4] 1 0.0 1 0.0 1 1.5 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4:2]!@;-[CX3H0:3][!#1:4] 1 0.0 1 0.0 1 0.6 1 0.0 1 0.0 1 0.0\n"
"[H:1][CX4H1:2]!@;-[CX3:3][!#1:4] -1 0.7 -1 0.5 1 0.3 -1 -0.3 1 0.0 1 "
"-0.1\n"
"[!#1:1][CX4H2:2]!@;-[CX3:3][!#1:4] 1 0.0 1 0.0 1 0.0 -1 0.8 1 0.0 1 0.0\n"
"[!#1:1][CX4:2]!@;-[CX3:3][!#1:4] 1 0.0 1 0.0 1 0.6 1 0.0 1 0.0 1 0.0\n"
"[c:1][c:2]!@;-[c:3][c:4]!@c 1 0.1 1 0.9 1 0.1 -1 -0.4 1 0.0 -1 0.3\n"
"[cH0:1][c:2]([cH0])!@;-[c:3]([cH0:4])[cH0] 1 0.0 1 3.6 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[c:3]([cH0:4])[cH1] 1 0.0 1 10.0 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
"[cH0:1][c:2]([cH1])!@;-[c:3]([cH0:4])[cH1] -1 -0.7 1 3.6 -1 -0.8 1 1.7 -1 "
"-0.1 1 0.2\n"
"[cH0:1][c:2]([cH0])!@;-[c:3]([cH1:4])[cH1] 1 -0.3 -1 -2.1 -1 -0.1 -1 -0.3 "
"1 0.0 -1 0.5\n"
"[cH0:1][c:2]([cH1])!@;-[c:3]([cH1:4])[cH1] 1 0.0 1 0.0 1 0.0 1 0.6 1 0.0 "
"1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[c:3]([cH1:4])[cH1] -1 -0.7 1 -8.0 1 0.0 1 4.4 1 "
"0.0 1 -1.5\n"
"[nX2H0:1][c:2]!@;-[c:3][nX3H1:4] 1 0.0 -1 30.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[nX2H0:1][c:2]([!nX2H0])!@;-[c:3]([!nX2H0])[nX2H0:4] 1 100.0 1 0.0 1 0.0 "
"1 0.0 1 0.0 1 0.0\n"
"[nX2H0:1][c:2](a(a)(a))!@;-[c:3][nX2H0:4] 1 30.0 1 0.0 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
//"[nX2H0:1][c:2](a([CX3H0]))!@;-[c:3](a([CX3H0]))[nX2H0:4] \n"
"[nX2H0:1][c:2]!@;-[c:3][nX2H0:4] 1 0.0 -1 50.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][c:2]!@;-[c:3][s,o,nX3H1:4] 1 0.0 -1 4.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[c:3][nX2H0:4] 1 0.0 1 1.7 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH0:1][c:2]!@;-[c:3]([cH0])[nX2H0:4] -1 0.9 -1 -1.0 1 -0.8 -1 0.2 -1 0.3 "
"1 -0.2\n"
"[c:1][c:2]!@;-[c:3]([cH0])[nX2H0:4] 1 0.0 1 0.0 1 0.0 1 1.1 1 0.0 1 0.0\n"
"[c:1][c:2]([cH0])!@;-[c:3][nX2H0:4] 1 0.0 -1 3.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][c:2]!@;-[c:3][nX2H0:4] 1 0.0 -1 4.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][c&r5:2]!@;-[c&r5:3][c:4] 1 0.0 -1 20.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][c&r6:2]!@;-[c&r5:3][c:4] 1 0.0 -1 5.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][c&r6:2]!@;-[c&r6:3][cH0:4] 1 0.0 1 3.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][c&r6:2]!@;-[c&r6:3][c:4] 1 0.0 1 0.0 1 0.0 -1 0.5 1 0.0 1 0.0\n"
"[c:1][c:2]!@;-[c:3][c:4] 1 0.0 1 0.0 1 0.0 -1 0.5 1 0.0 1 0.0\n"
"[cH0:1][c:2]!@;-[CX4H0:3][a:4] 1 0.0 1 0.0 1 8.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]!@;-[CX4H0:3][N,O,S:4] 1 0.0 1 0.0 1 8.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]!@;-[CX4H0:3][CX3:4] 1 0.0 1 0.0 1 12.5 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]!@;-[CX4H0:3][CX4:4] 1 0.0 1 0.0 1 8.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]!@;-[CX4H0:3][*:4] 1 0.0 1 0.0 1 3.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]!@;-[CX4H2:3][a:4] -1 -1.3 1 1.6 -1 -0.6 -1 0.6 1 -0.1 -1 "
"0.3\n"
"[cH0:1][c:2]!@;-[CX4H2:3][CX3:4] -1 -1.3 1 1.6 -1 -0.6 -1 0.6 1 -0.1 -1 "
"0.3\n"
"[cH1:1][c:2]([cH1])!@;-[CX4H2:3][CX4H1:4]C(=O)(O) 1 0.0 1 4.0 1 0.0 1 0.0 "
"1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[CX4H2:3][CX4:4] 1 0.0 1 3.6 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH0:1][c:2]!@;-[CX4H2:3][CX4:4] -1 -1.3 1 1.6 -1 -0.6 -1 0.6 1 -0.1 -1 "
"0.3\n"
"[cH0:1][c:2]!@;-[CX4H2:3][N,O,S:4] 1 0.3 1 1.1 -1 -1.0 1 -0.6 -1 -0.5 1 "
"0.1\n"
"[cH0:1][c:2]!@;-[CX4H2:3][!#1:4] -1 -1.3 1 1.6 -1 -0.6 -1 0.6 1 -0.1 -1 "
"0.3\n"
"[cH0:1][c:2]!@;-[CX4H1:3][a:4] 1 0.9 1 1.2 1 0.6 1 0.4 1 0.0 1 0.1\n"
"[cH0:1][c:2]!@;-[CX4H1:3][CX4:4] 1 6.1 1 5.2 1 2.4 -1 -1.4 1 0.3 -1 0.1\n"
"[cH0:1][c:2]!@;-[CX4H1:3][CX3:4] 1 0.0 1 0.0 1 0.0 1 1.5 1 0.0 1 0.0\n"
"[cH0:1][c:2]!@;-[CX4H1:3][N,O,S:4] 1 0.0 1 0.0 1 0.0 1 2.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]!@;-[CX4H1:3][H:4] 1 0.0 -1 4.3 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[CX4H0:3][a:4] 1 0.0 -1 -0.3 -1 -0.1 1 0.1 1 -0.0 -1 0.1\n"
"[a:1][c:2]!@;-[CX4H0:3][CX3:4] 1 0.0 1 0.0 1 0.0 1 1.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[CX4H0:3][CX4:4] 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0 -1 3.0\n"
"[a:1][c:2]!@;-[CX4H0:3][N,O:4] 1 0.0 -1 0.8 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[CX4H0:3][*:4] 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0 -1 5.0\n"
"[a:1][c:2]!@;-[CX4H2:3][a:4] 1 0.0 1 1.2 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[CX4H2:3][CX3:4] 1 0.0 1 1.2 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[CX4H2:3][CX4:4] 1 0.0 1 1.0 1 0.0 -1 1.1 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[CX4H2:3][N,O:4] 1 0.0 1 0.0 1 0.0 -1 0.1 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[CX4H2:3][!#1:4] 1 0.0 1 3.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[CX4H1:3][N,O:4] 1 0.0 1 0.0 1 0.0 1 0.5 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[CX4H1:3][a:4] 1 0.0 1 0.6 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[CX4H1:3][H:4] 1 0.0 -1 0.7 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[C:3](=[N:4][CX4H1])(N[CX4H1]) 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0 -1 5.0\n"
"[a:1][c:2]!@;-[C:3](=[N:4][CX4])(N[CX4]) 1 0.0 -1 0.6 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[a:1][c:2]!@;-[C:3](=[NH0:4][CX4]) 1 0.0 -1 15.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[C:3](=[N:4][!#1])(N[!#1]) 1 0.0 -1 0.6 1 0.0 1 0.3 1 0.0 "
"-1 -0.1\n"
"[a:1][c:2]!@;-[C:3](=[N:4][!#1])(N~[!#1]) 1 0.0 1 -0.8 1 0.0 1 0.2 1 0.0 "
"1 0.0\n"
"[nX2H0:1][c:2]!@;-[C:3](=[N:4])(-[NH1,NH2]) 1 0.0 -1 26.9 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[nX2H0:1][c:2]!@;-[C:3](=[NH1,NH2:4]) 1 0.0 -1 100.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH0:1][c:2]([cH0])!@;-[C:3](=[N:4]) 1 0.0 -1 30.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH0:1][c:2]!@;-[C:3](=[N:4]) 1 0.0 -1 10.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[C:3](=[N:4]) 1 0.0 -1 5.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]([O-])!@;-[c:3][a:4]C(=O)(O) 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0 -1 "
"5.0\n"
"[O:1]=[C:2]([O-])!@;-[c:3][a:4][CX3]=O 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0 -1 "
"20.0\n"
"[O:1]=[C:2]([O-])!@;-[c:3][nX3H1:4] 1 0.0 -1 30.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[O:1]=[C:2]([O-])!@;-[c:3][nX2H0:4] 1 0.0 -1 30.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[O:1]=[C:2]([O-])!@;-[c:3]([cH0])[cH0:4] 1 0.3 -1 -0.6 -1 0.1 -1 0.4 1 "
"-0.0 -1 0.5\n"
"[O:1]=[C:2]([O-])!@;-[c:3]([cH1])[cH0:4]([NH1,NH2]) 1 0.0 -1 30.0 1 0.0 1 "
"0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]([O-])!@;-[c:3]([cH1])[cH0:4] 1 0.0 -1 7.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[O:1]=[C:2]([O-])!@;-[c:3]([cH1])[cH1:4] 1 0.0 -1 7.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[O:1]=[C:2]([O-])!@;-[c:3][a:4] 1 0.0 -1 25.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1]([OH1])[a:2]!@;-[CX3:3](=[O:4])([NX3H0,CX4H0,c]) -1 14.8 1 0.0 1 0.0 "
"1 0.0 1 0.0 1 0.0\n"
"[a:1]([NH1,NH2])[a:2]!@;-[CX3:3](=[O:4])([NX3H0,CX4H0,c]) -1 36.2 1 0.0 1 "
"0.0 1 0.0 1 0.0 1 0.0\n"
//"[c:1]([OH1])[c:2]!@;-[CX3:3](=[O:4])([NX3H0])\n"
//"[c:1]([NH1,NH2])[c:2]!@;-[CX3:3](=[O:4])([NX3H0])\n"
"[c:1]([OH1])[c:2]!@;-[CX3:3](=[O:4])([O]) 1 0.0 -1 100.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[c:1]([NH1,NH2])[c:2]!@;-[CX3:3](=[O:4])([O]) 1 0.0 -1 20.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[a:1]([OH1])[a:2]!@;-[CX3:3](=[O:4])([O]) 1 0.0 -1 100.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[a:1]([NH1,NH2])[a:2]!@;-[CX3:3](=[O:4])([O]) 1 0.0 -1 100.0 1 0.0 1 0.0 "
"1 0.0 1 0.0\n"
"[c:1]([OH1])[c:2]!@;-[CX3:3](=[O:4])([!O]) 1 0.0 -1 20.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[c:1]([NH1,NH2])[c:2]!@;-[CX3:3](=[O:4])([!O]) -1 36.5 1 0.0 1 0.0 1 0.0 "
"1 0.0 1 0.0\n"
"[a:1]([OH1])[a:2]!@;-[CX3:3](=[O:4])([!O]) 1 0.0 -1 100.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[a:1]([NH1,NH2])[a:2]!@;-[CX3:3](=[O:4])([!O]) -1 41.7 1 0.0 1 0.0 1 0.0 "
"1 0.0 1 0.0\n"
"[cH0:1]([CX3])[c:2]([cH1])!@;-[CX3:3](c)=[O:4] -1 3.1 -1 -3.3 -1 1.9 1 "
"1.6 1 -0.3 1 0.1\n"
"[cH0:1][c:2]([cH0])!@;-[CX3:3](c)=[O:4] 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0 -1 "
"5.0\n"
"[cH0:1]([OH1])[c:2]([cH1])!@;-[CX3:3](c)=[O:4] -1 16.7 1 0.0 1 0.0 1 0.0 "
"1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH1])!@;-[CX3:3](c)=[O:4] -1 1.0 1 0.0 -1 0.7 1 0.5 -1 -0.0 "
"1 -0.3\n"
"[cH1:1][c:2]([cH1])!@;-[CX3:3](c)=[O:4] -1 -0.1 -1 2.4 1 -0.4 -1 -1.0 1 "
"0.1 -1 -0.5\n"
"[a:1][a:2]!@;-[CX3:3](a)=[O:4] -1 -0.0 1 -0.9 -1 0.1 1 0.2 -1 0.0 -1 "
"-0.3\n"
"[s:1][c:2]!@;-[C:3]([NH1])=[O:4] -1 36.5 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1](Cl)[c:2]([cH1])!@;-[CX3:3]([NX3H1])=[O:4] 1 0.0 1 10.0 1 0.0 1 "
"0.0 1 0.0 1 0.0\n"
"[cH0:1](F)[c:2]([cH1])!@;-[CX3:3]([NX3H1])=[O:4] 1 6.2 1 0.0 1 0.0 1 0.0 "
"1 0.0 1 0.0\n"
"[cH0:1]([OH0])[c:2]([cH1])!@;-[C:3](=O)[NH1:4] -1 60.0 1 0.0 1 0.0 1 0.0 "
"1 0.0 1 0.0\n"
"[cH0:1]([OH1])[c:2]([cH1])!@;-[C:3](=O)[NH1:4] 1 0.0 -1 15.0 1 0.0 1 0.0 "
"1 0.0 1 0.0\n"
//"[cH0:1][c:2]([cH1])!@;-[CX3:3]([NX3H1])=[O:4] 1 -0.2 1 -0.9 -1 -0.4 -1 " // 27.6.16 change in functional form
//"-0.1 1 0.5 1 -0.8\n"
"[cH0:1][c:2]([cH1])!@;-[CX3:3]([NX3H1])=[O:4] 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.1 1 0.0\n"
"[cH0:1][c:2]([cH1])!@;-[CX3:3]([NX3H0])=[O:4] 1 0.0 1 5.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[C:3]([NH1,NH2])=[O:4] 1 0.0 -1 0.5 1 0.0 1 0.0 1 " // 27.6. reduced from 1.6
"0.0 1 0.0\n"
//"[a:1][c:2]!@;-[C:3]([NH0])=[O:4]\n"
"[a:1][c:2]!@;-[C:3]([NH1,NH2])=[O:4] 1 0.0 -1 2.4 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH0:1](F)[c:2]([cH1])!@;-[CX3:3]=[O:4] 1 0.0 -1 1.8 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH0:1](Cl)[c:2]([cH1])!@;-[CX3:3]=[O:4] 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0 -1 " // 26.6.16 reduced from 10.0
"2.0\n"
"[nX3H1:1][a:2]!@;-[CX3:3]=[O:4] 1 0.0 -1 10.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[nX2H0:1][c:2](c)!@;-[CX3:3]([!O])=[O:4] 1 66.5 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[nX2H0:1][a:2]([nX2H0])!@;-[CX3:3]=[O:4] 1 0.0 -1 36.8 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
"[*^2]!@;-[cH0:1][c:2]([cH1])!@;-[CX3:3]=[O:4] 1 0.0 -1 8.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[cH0:1][c:2]([cH1])!@;-[CX3:3]=[O:4] 1 0.0 -1 2.0 1 0.0 1 0.0 1 0.0 1 " // 25.6.16 reduced from 10.0
"0.0\n"
"[cH0:1][c:2]([cH0])!@;-[CX3:3]=[O:4] 1 0.0 1 0.0 1 0.0 -1 3.0 1 0.0 1 "
"0.0\n"
"[cH1:1][c:2]([cH1])!@;-[CX3:3]([CX3H0])=[O:4] 1 0.0 -1 5.9 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[CX3:3]=[O:4] 1 0.0 -1 5.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[a:1][a:2]!@;-[CX3:3]=[O:4] 1 0.0 -1 8.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([nX2])!@;-[CX3:3]=[NX3:4] 1 0.0 -1 8.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH1:1][c:2]([nX3H1])!@;-[CX3:3]=[NX2:4] 1 97.4 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH1:1][c:2]([nX2])!@;-[CX3:3]=[NX2:4] 1 0.0 -1 8.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH1:1][c:2]([cH0]([OH1]))!@;-[CX3:3]=[NX2:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[cH1:1][c:2]([cH0])!@;-[CX3:3]=[NX2:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH1:1][c:2]([cH1])!@;-[CX3:3]=[NX2:4] 1 0.0 -1 9.5 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH0:1][c:2]([cH0])!@;-[CX3:3]=[NX2:4] 1 0.0 1 -0.7 1 0.0 1 -0.5 1 0.0 1 "
"-0.6\n"
"[a:1][c:2]!@;-[CX3:3]=[CX3H0:4] 1 0.0 -1 0.7 1 0.0 1 0.6 1 0.0 1 -0.5\n"
"[a:1][a:2]!@;-[CX3:3]=[CX3H2:4] 1 0.0 -1 1.3 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][a:2]!@;-[CX3:3]=[CX3H1:4] 1 0.0 -1 5.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[*:1][SX2:2]!@;-[SX2:3][*:4] 1 0.0 1 12.9 1 0.0 1 0.0 1 0.0 1 0.0\n"
// ------
// these patterns were added as part of the ET-DG work
// non-aromatic double bonds
//"[*:1][CX3:2]=[CX3:3][*:4] 1 0.0 -1 7.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[*:1][X3,X2:2]=[X3,X2:3][*:4] 1 0.0 -1 100.0 1 0.0 1 0.0 1 0.0 1 0.0\n";
#include "torsionPreferences_v1.in"
#include "torsionPreferences_v2.in"
//! A structure used to the experimental torsion patterns
struct ExpTorsionAngle {
@@ -638,7 +58,7 @@ class ExpTorsionAngleCollection {
public:
typedef std::vector<ExpTorsionAngle> ParamsVect;
static const ExpTorsionAngleCollection *getParams(
const std::string &paramData = "");
unsigned int version, const std::string &paramData = "");
ParamsVect::const_iterator begin() const { return d_params.begin(); };
ParamsVect::const_iterator end() const { return d_params.end(); };
ExpTorsionAngleCollection(const std::string &paramData);
@@ -653,21 +73,30 @@ typedef boost::flyweight<
param_flyweight;
const ExpTorsionAngleCollection *ExpTorsionAngleCollection::getParams(
const std::string &paramData) {
const ExpTorsionAngleCollection *res = &(param_flyweight(paramData).get());
unsigned int version, const std::string &paramData) {
std::string params;
if (paramData == "") {
switch (version) {
case 1:
params = torsionPreferencesV1;
break;
case 2:
params = torsionPreferencesV2;
break;
default:
throw ValueErrorException("ETversion must be 1 or 2.");
}
} else {
params = paramData;
}
const ExpTorsionAngleCollection *res = &(param_flyweight(params).get());
return res;
}
ExpTorsionAngleCollection::ExpTorsionAngleCollection(
const std::string &paramData) {
boost::char_separator<char> tabSep(" ", "", boost::drop_empty_tokens);
std::string params;
if (paramData == "") {
params = torsionPreferences;
} else {
params = paramData;
}
std::istringstream inStream(params);
std::istringstream inStream(paramData);
std::string inLine = RDKit::getLine(inStream);
while (!inStream.eof()) {
@@ -709,7 +138,7 @@ void getExperimentalTorsions(
std::vector<std::pair<std::vector<int>, std::vector<double> > >
&expTorsionAngles,
std::vector<std::vector<int> > &improperAtoms, bool useExpTorsions,
bool useBasicKnowledge, bool verbose) {
bool useBasicKnowledge, unsigned int version, bool verbose) {
unsigned int nb = mol.getNumBonds();
unsigned int na = mol.getNumAtoms();
if (!na) {
@@ -729,7 +158,7 @@ void getExperimentalTorsions(
if (useExpTorsions) {
// we set the torsion angles with experimental data
const ExpTorsionAngleCollection *params =
ExpTorsionAngleCollection::getParams();
ExpTorsionAngleCollection::getParams(version);
// loop over patterns
for (const auto &param : *params) {

View File

@@ -1,5 +1,5 @@
//
// Copyright (C) 2015 Sereina Riniker
// Copyright (C) 2017 Sereina Riniker
//
// @@ All Rights Reserved @@
// This file is part of the RDKit.
@@ -22,7 +22,7 @@ void getExperimentalTorsions(
std::vector<std::pair<std::vector<int>, std::vector<double> > > &
expTorsionAngles,
std::vector<std::vector<int> > &improperAtoms, bool useExpTorsions = false,
bool useBasicKnowledge = false, bool verbose = false);
bool useBasicKnowledge = false, unsigned int version = 1, bool verbose = false);
}
}

View File

@@ -129,7 +129,7 @@ void testTorsionPrefs() {
ForceFields::CrystalFF::getExperimentalTorsions(
*mol, expTorsionAtoms, expTorsionAngles, improperAtoms, true, false,
false);
1, false);
TEST_ASSERT(expTorsionAtoms.size() == 1);
TEST_ASSERT(expTorsionAngles.size() == 1);
TEST_ASSERT(expTorsionAtoms[0][0] == 0);
@@ -143,7 +143,7 @@ void testTorsionPrefs() {
ForceFields::CrystalFF::getExperimentalTorsions(
*mol, expTorsionAtoms, expTorsionAngles, improperAtoms, true, false,
false);
1, false);
TEST_ASSERT(expTorsionAtoms.size() == 2);
TEST_ASSERT(expTorsionAngles.size() == 2);
}

View File

@@ -0,0 +1,592 @@
/* SMARTS patterns for experimental torsion angle preferences
* taken from J. Med. Chem. 56, 1026-2028 (2013)
*
* torsion-angle potential form:
* V = V1*(1 + s1*cos(1x)) + V2*(1 + s2*cos(2x)) + V3*(1 + s3*cos(1x))
* + V4*(1 + s4*cos(1x)) + V5*(1 + s5*cos(1x)) + V6*(1 + s6*cos(1x))
*
* format: [SMARTS, s1, V1, s2, V2, s3, V3, s4, V4, s5, V5, s6, V6]
*/
const std::string torsionPreferencesV1 =
"[O:1]=[C:2]!@;-[O:3]~[CH0:4] -1 78.2 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]!@;-[O:3]~[CH0:4] -1 78.2 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]([N])!@;-[O:3]~[C:4] -1 79.1 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]!@;-[O:3]~[C:4] -1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]!@;-[O:3]~[!#1:4] -1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][O:2]!@;-[c:3]~[*:4] 1 0.0 1 0.8 1 0.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][O:2]!@;-[CX3:3]~[*:4] 1 0.0 1 0.0 1 0.0 -1 1.0 1 0.0 1 0.0\n"
"O=[C:1][O:2]!@;-[CH1:3][H:4] -1 20.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][O:2]!@;-[CH2:3]~[C:4] 1 0.0 1 0.0 1 2.5 1 0.0 1 0.0 1 0.0\n"
"[H:1][CX4H1:2]!@;-[O:3][CX4:4] -1 20.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[C:1][CH2:2]!@;-[O:3][CX4:4] 1 0.0 1 0.0 1 2.5 1 0.0 1 0.0 1 0.0\n"
"[*:1][CX4:2]!@;-[O:3][CX3:4](=[!O]) 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[O:1][CX4:2]!@;-[O:3][CX4:4] 1 0.0 1 0.0 1 8.8 1 0.0 1 0.0 1 0.0\n"
"[*:1][CX4:2]!@;-[O:3][CX4:4] 1 0.0 1 0.0 1 2.5 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[O:3][S:4] 1 0.0 1 3.2 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH0])!@;-[O:3][S:4] 1 0.0 1 8.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[O:3][S:4] 1 0.0 1 11.5 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[O:3][c:4] 1 0.0 1 0.0 1 0.0 -1 0.5 1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH0])!@;-[O:3][c:4] 1 0.0 1 0.0 -1 3.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[O:3][c:4] 1 0.0 1 2.7 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[O:3][!C;!H:4] 1 0.0 -1 5.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH0:1][c:2]([cH1])!@;-[O:3][!C;!H:4] 1 0.0 -1 5.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH1:1][c:2]([cH1])!@;-[O:3][!C;!H:4] 1 0.0 1 0.0 1 0.0 -1 2.0 1 0.0 1 "
"0.0\n"
"[cH:1][c:2]([cH])!@;-[O:3][C:4](F)(F)[F] 1 0.0 1 30.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
//"[cH0:1][c:2]([cH0])!@;-[O:3][CX4:4]([!#1])([!#1])([!#1])\n"
"[a:1][c:2]([a])!@;-[O:3][CX4H0:4] 1 0.0 1 0.0 1 0.0 -1 2.0 1 0.0 1 0.0\n"
"[cH1,n:1][c:2]!@;-[O:3][CRH1:4] 1 0.0 -1 5.4 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1,n:1][c:2]!@;-[O:3][CH1:4] 1 0.0 -1 7.2 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[nX2H0:1][c:2]([cH0])!@;-[O:3][CX4H0:4] -1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
//"[cH0:1][c:2]([cH0])!@;-[O:3][CX4H0:4]\n"
"[cH0:1][c:2]([nX2])!@;-[O:3][C:4] 1 110.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[nX2:1][c:2]([nX2])!@;-[O:3][C:4] 1 0.0 -1 44.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[nX2:1][c:2]([nX3])!@;-[O:3][C:4] -1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([nX3])!@;-[O:3][C:4] -1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([nX2])!@;-[O:3][C:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1]([CX3])[c:2]([cH1])!@;-[O:3][C:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
"[cH1:1][c:2](cO)!@;-[O:3][C:4] -1 61.9 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"O[c:1][c:2](cO)!@;-[O:3][C:4] 1 0.0 1 3.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[O:3][C:4] 1 0.0 1 6.6 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH1])!@;-[O:3][C:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[O:3][C:4] 1 0.0 -1 19.5 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[O:3][CX3H0:4] 1 0.0 1 1.9 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[O:3][!#1:4] 1 0.0 1 6.6 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[aH0:1][c:2]!@;-[OX2:3][!#1:4] 1 0.8 1 0.7 -1 -0.3 -1 2.5 -1 -0.1 1 -0.8\n"
//"[cH1,nX3H1:1][c:2]([cH0])!@;-[O:3][CX4H0:4]\n"
"[!#1:1][CX4H0:2]!@;-[OX2:3][!#1:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[H:1][CX4H1:2]!@;-[OX2:3][!#1:4] -1 5.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[C:1][CX4H2:2]!@;-[OX2:3][c:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][CX4H2:2]!@;-[OX2:3][C:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[C:1][CX4H2:2]!@;-[OX2:3][C:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][CX4H2:2]!@;-[OX2:3][c:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4H2:2]!@;-[OX2:3][c:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4H2:2]!@;-[OX2:3][C:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][CX4H2:2]!@;-[OX2:3][!#1:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[C:1][CX4H2:2]!@;-[OX2:3][!#1:4] -1 -3.5 1 2.5 -1 -2.3 1 0.6 -1 -0.4 -1 "
"0.4\n"
"[!#1:1][CX4H2:2]!@;-[OX2:3][!#1:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4:2]!@;-[OX2:3][!#1:4] -1 -3.5 1 2.5 -1 -2.3 1 0.6 -1 -0.4 -1 "
"0.4\n"
"O=[CX3:1][NX3H0:2](C)!@;-[CX4H2:3][C:4] 1 0.0 1 8.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[CX3:1][NX3H1:2]!@;-[CX4H2:3][C:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"O=[S:1](=O)[NX3H0:2]!@;-[CX4H2:3][!#1:4] 1 0.0 1 1.9 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[S:1](=O)[NX3H1:2]!@;-[CX4H2:3][!#1:4] 1 17.9 -1 -13.3 1 9.2 1 4.7 -1 "
"-2.3 -1 -0.9\n"
"O=[S:1](=O)[NX3H0:2]!@;-[CX4H1:3][H:4] 1 0.0 -1 15.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[S:1](=O)[NX3H1:2]!@;-[CX4H1:3][H:4] -1 20.0 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[S:1](=O)[NH1:2]!@;-[c:3][nX2:4] 1 0.0 -1 15.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"O=[S:1](=O)[NH0:2]!@;-[c:3]([cH1])[cH1:4] 1 0.0 1 13.3 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
"O=[S:1](=O)[NH1:2]!@;-[c:3]([cH1])[cH1:4] 1 0.0 1 0.0 1 0.0 1 0.9 1 0.0 1 "
"0.0\n"
"O=[S:1](=O)[NH0:2]!@;-[c:3]([cH1])[cH0:4] 1 0.0 1 50.0 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
"O=[S:1](=O)[NH1:2]!@;-[c:3]([cH1])[cH0:4] 1 1.9 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[S:1](=O)[NH0:2]!@;-[c:3]([cH0])[cH0:4] 1 0.0 1 17.8 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
"O=[S:1](=O)[NH1:2]!@;-[c:3]([cH0])[cH0:4] 1 0.0 1 10.6 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
"O=[S:1](=O)[N:2]!@;-[c:3][a:4] 1 0.0 1 0.0 1 0.0 -1 2.0 1 0.0 1 0.0\n"
"[O-:1][N+:2](=O)!@;-[c:3]([cH,nX2H0])[cH,nX2H0:4] 1 0.0 -1 5.0 1 0.0 1 "
"0.0 1 0.0 1 0.0\n"
"[O-:1][N+:2](=O)!@;-[c:3]([cH0])[cH,nX2H0:4] -1 -0.2 1 -5.7 1 -0.2 -1 "
"-3.2 1 0.1 1 -1.3\n"
"[O-:1][N+:2](=O)!@;-[c:3]([cH0])[cH0:4] -1 -0.4 1 0.3 1 -0.1 -1 0.6 1 "
"-0.1 -1 0.2\n"
"[O-:1][N+:2](=O)!@;-[c:3][a:4] 1 0.0 -1 11.8 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[NX3H1:3][C,c:4] 1 0.0 1 0.0 1 0.0 -1 0.8 1 0.0 1 "
"0.0\n"
"[cH0:1][c:2]([cH1])!@;-[NX3H1:3][C,c:4] 1 15.0 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH0:1][c:2]([nX2H0])!@;-[NX3H1:3][C,c:4] 1 40.0 1 0.0 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
"[cH0:1][c:2]([nX3H1])!@;-[NX3H1:3][C,c:4] 1 50.0 1 0.0 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[NX3H1:3][C,c:4] 1 0.0 -1 1.4 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH1:1][c:2]([nX3H1])!@;-[NX3H1:3][C,c:4] 1 0.0 -1 100.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[nX2H0:1][c:2]([nX2H0])!@;-[NX3H1:3][C,c:4] 1 0.0 -1 15.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[nX2H0:1][c:2]([nX3H1])!@;-[NX3H1:3][C,c:4] 1 0.0 -1 27.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[a:1][a:2]!@;-[NH1:3][C,c:4] 1 0.0 -1 6.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[C:1][NH:2]!@;-[C:3](=[NH2:4])[NH2] 1 0.0 -1 100.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[NH2][C:1](=[NH2])[NH:2]!@;-[CH2:3][C:4] 1 0.0 1 0.0 1 2.5 1 0.0 1 0.0 1 "
"0.0\n"
"[a:1][c:2]!@;-[NX2:3]=[C:4]([NX3])n -1 -0.1 1 1.9 -1 -0.1 -1 -1.9 -1 0.1 "
"1 0.0\n"
"[nX2:1][c:2]!@;-[NX2:3]=[C:4]([NX3])N 1 0.0 -1 6.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH0:1][c:2]!@;-[NX2:3]=[C:4]([NX3])N -1 -0.1 1 1.9 -1 -0.1 -1 -1.9 -1 "
"0.1 1 0.0\n"
"[cH1:1][c:2]!@;-[NX2:3]=[C:4]([NX3])N 1 -0.4 -1 -0.9 1 -0.4 1 1.1 1 -0.2 "
"1 -0.1\n"
"[O:1]=[C:2]([NH1])!@;-[NX3H1:3](C=O)[H:4] -1 144.7 1 0.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[O:1]=[C:2]!@;-[NX3H1:3](C=O)[H:4] 1 0.0 -1 10.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]!@;-[NX3:3](C=O)[*:4] 1 0.0 -1 10.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][NX3H1:2]!@;-[CX3:3]=[NX2:4] 1 63.8 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][NX3H0:2]!@;-[CX3:3]=[*H0:4] 1 0.0 -1 8.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][NX3H0:2]!@;-[CX3:3]=[*H1:4] 1 0.0 1 0.0 1 2.5 1 0.0 1 0.0 1 0.0\n"
//"O=[C:1][NX3H0:2]!@;-[CX3:3]=[*H2:4] \n"
"O=[C:1][NX3H1:2]!@;-[CX3:3]=[*H2:4] 1 0.0 -1 68.5 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[C:1][NX3H1:2]!@;-[CX3:3]=[*H1:4] 1 0.0 1 0.0 -1 2.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][NX3H1:2]!@;-[CX3:3]=[*H0:4] 1 0.0 -1 39.4 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[C:1][NX3H0:2]!@;-[CX3H1:3]=[*:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[C:1][NX3H1:2]!@;-[CX3H1:3]=[*:4] 1 84.1 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][NX3H1:2]!@;-[CX3:3]=[*:4] 1 0.0 -1 33.2 1 0.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][NX3H0:2]!@;-[CX4H2:3][c:4]([cH,nX2H0])[cH,nX2H0] 1 0.0 1 3.0 1 "
"0.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][NX3H1:2]!@;-[CX4H2:3][c:4]([cH,nX2H0])[cH,nX2H0] -1 -1.3 1 1.6 -1 "
"-0.6 -1 0.6 1 -0.1 -1 0.3\n"
"O=[C:1][NX3H0:2]!@;-[CX4H2:3][!#1:4] 1 0.0 1 15.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[C:1][NX3H1:2]!@;-[CX4H2:3][!#1:4] 1 0.0 1 0.0 1 2.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][NX3H0:2]!@;-[CX4H1:3][H:4] 1 0.0 -1 8.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][NX3H1:2]!@;-[CX4H1:3][H:4] -1 5.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][NX3H0:2]!@;-[CX4H0:3][C:4] 1 0.0 1 0.0 1 2.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][NX3H1:2]!@;-[CX4H0:3][C:4] 1 0.0 1 0.0 1 2.5 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][NX3:2]!@;-[!#1:3][!#1:4] 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0 -1 0.7\n"
"O=[C:1][NX3H0:2]!@;-[c:3]([s,o])[n:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[C:1][NX3H1:2]!@;-[c:3]([s,o])[n:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[C:1][NX3:2]!@;-[a:3]([s,o])[a:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[C:1][NX3H1:2]!@;-[c:3]([cH,nX2H0])[cH,nX2H0:4] 1 0.0 -1 2.8 1 0.0 1 "
"0.0 1 0.0 1 0.0\n"
//"O=[C:1][NX3:2]!@;-[a:3]([nX2H0])[cH0:4]\n"
"O=[C:1][NX3H1:2]!@;-[a:3]([nX2H0])[cH1:4] -1 22.9 1 0.0 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
"O=[C:1][NX3:2]!@;-[a:3]([nX2H0])[cH1:4] -1 21.4 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[C:1][NX3:2]!@;-[a:3][nH:4] -1 53.3 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"O=[C:1][NX3H1:2]!@;-[c:3]([cH0]Cl)[cH:4] -1 20.0 1 0.0 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
"O=[C:1][NX3H1:2]!@;-[c:3]([cH0]F)[cH:4] -1 11.4 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[C:1][NX3:2]!@;-[a:3]([cH1])[aH0:4]!@;-O 1 38.2 1 0.0 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
"O=[C:1][NX3:2]!@;-[a:3][aH0:4] 1 0.0 1 0.0 1 0.0 -1 0.7 1 0.0 1 0.0\n"
"O=[C:1][NX3H1:2]!@;-[c:3]([cH1])[cH1:4] 1 0.0 -1 2.1 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[C:1][NX3H0:2]!@;-[c:3]([cH1])[cH1:4] 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0 -1 "
"0.8\n"
"O=[C:1][NX3H0:2]!@;-[c:3]([cH0])[cH:4] 1 0.0 1 2.4 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[C:1][NX3H1:2]!@;-[c:3]([cH0])[cH:4] -1 9.7 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[C:1][NX3H0:2]!@;-[c:3]([cH0])[cH0:4] 1 0.0 1 2.9 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[C:1][NX3H1:2]!@;-[c:3]([cH0])[cH0:4] 1 0.0 1 2.9 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"O=[C:1][NX3H0:2]!@;-[a:3][a:4] 1 0.0 1 0.7 1 0.0 1 0.0 1 0.0 -1 0.3\n"
"O=[C:1][NX3H1:2]!@;-[a:3][a:4] 1 0.0 -1 3.1 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[CX3:2]([NX3H1]C)!@;-[NX3H1:3][!#1:4] -1 51.7 1 0.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[O:1]=[C:2]([!NH1])!@;-[NX3H1:3]([H:4])(c([nX2H0])([nX2H0])) 1 100.0 1 "
"0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]([NH1])!@;-[NX3H1:3]([H:4])(c([nX2H0])([nX2H0])) -1 100.0 1 "
"0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]!@;-[NX3H1:3]([H:4])(c([nX2H0])([nX2H0])) 1 0.0 -1 100.0 1 0.0 "
"1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]!@;-[NX3H1:3]([H:4])(cn) 1 0.0 -1 50.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[O:1]=[C:2]!@;-[NX3H0:3]([a:4])[A] 1 0.0 -1 4.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[CX3:2](a)!@;-[NX3H0:3][!#1:4] 1 0.0 -1 13.9 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[O:1]=[CX3:2]!@;-[NX3H0:3][!#1:4] 1 0.0 -1 8.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[CX3:2]!@;-[NX3H1:3][!#1:4] -1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[CH0:1][NX3:2]([CH0])!@;-[c:3][a:4] 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[CH0:1][NX3:2]([CH1])!@;-[c:3][a:4] 1 0.0 1 0.0 1 0.0 -1 0.7 1 0.0 1 0.0\n"
"[cH1,nX2H0:1][c:2]([cH1,nX2H0])!@;-[NX3&r:3][*:4] 1 0.0 -1 0.9 1 0.0 1 "
"0.0 1 0.0 1 0.0\n"
"[cH1,nX2H0:1][c:2]([cH1,nX2H0])!@;-[NX3&r:3][CX4&r:4] 1 0.0 -1 3.7 1 0.0 "
"1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[NX3H1:3][CX4&r:4]([C&r])([C&r]) 1 0.0 -1 6.8 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[NX3:3][CX4:4] 1 0.0 1 -0.7 1 0.0 1 -0.5 1 0.0 1 "
"-0.6\n"
"[cH0:1][c:2]([cH,nX2H0])!@;-[NX3H1:3][CX4:4] 1 73.1 1 0.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[cH0:1][c:2]([cH,nX2H0])!@;-[NX3H0:3][CX4:4] 1 0.0 1 0.0 1 0.8 1 0.0 1 "
"0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[NX3:3][CX4:4] 1 0.0 1 0.0 1 0.0 -1 2.0 1 0.0 1 "
"0.0\n"
"[c:1][c:2](c)!@;-[NX3:3][CX4:4] 1 0.0 -1 0.5 1 0.0 -1 0.8 1 0.0 1 -0.6\n"
"[cH1:1][c:2]([cH1])!@;-[NX3:3][a:4] 1 0.0 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH0])!@;-[NX3:3][a:4] 1 0.0 1 0.0 -1 3.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[NX3:3][a:4] 1 0.0 1 1.3 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][a:2]!@;-[NX3H0:3][CX3:4]=O 1 0.0 1 2.3 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][a:2]!@;-[NX3H1:3][CX3:4]=O -1 -1.6 -1 -0.6 1 0.6 -1 0.0 -1 0.1 1 "
"-0.5\n"
//"[nX2H0:1][a:2]([nX2H0])!@;-[NX3H0:3][CX3:4]=O\n"
"[nX2H0:1][a:2]([!nX2H0])!@;-[NX3H1:3][CX3:4](A)=O 1 72.8 1 0.0 1 0.0 1 "
"0.0 1 0.0 1 0.0\n"
"[nX2H0:1][a:2]([!nX2H0])!@;-[NX3H1:3][CX3:4](a)=O 1 72.8 1 0.0 1 0.0 1 "
"0.0 1 0.0 1 0.0\n"
"[nX2H0:1][a:2]([!nX2H0])!@;-[NX3H1:3][CX3:4](C)=O 1 72.8 1 0.0 1 0.0 1 "
"0.0 1 0.0 1 0.0\n"
"[nX2H0:1][a:2]([!nX2H0])!@;-[NX3H1:3][CX3:4]([NX3H1])=O 1 72.8 1 0.0 1 "
"0.0 1 0.0 1 0.0 1 0.0\n"
"[nX2H0:1][a:2]([!nX2H0])!@;-[NX3H1:3][CX3:4]([OX2])=O 1 72.8 1 0.0 1 0.0 "
"1 0.0 1 0.0 1 0.0\n"
"[nX2H0:1][a:2]([!nX2H0])!@;-[NX3H1:3][CX3:4]=O 1 72.8 1 0.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[nX2H0:1][a:2]!@;-[NX3H1:3][CX3:4]=O 1 0.0 -1 34.4 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[a:1][a:2]!@;-[NX3H0:3][CX3:4]=O 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0 -1 0.6\n"
"[a:1][a:2]!@;-[NX3H1:3][CX3:4]=O 1 0.0 -1 3.1 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][a:2]!@;-[NX3:3][CX4H0:4] 1 0.0 1 0.0 1 0.0 -1 4.0 1 0.0 1 0.0\n"
"[a:1][a:2]!@;-[NX3:3][!#1:4] 1 0.0 1 -0.7 1 0.0 1 -0.5 1 0.0 1 -0.6\n"
"[O:1]=[CX3:2]!@;-[nX3:3]([aH0:4])([aH0]) 1 0.0 -1 8.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[O:1]=[CX3:2]!@;-[nX3:3][aH1:4] 1 0.0 -1 18.7 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[CX3:2]!@;-[nX3:3][aH0:4] 1 0.0 -1 6.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][CX3:2](=S)!@;-[NX3:3][a:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX3:2](=S)!@;-[NX3H0:3][!#1:4] 1 0.0 -1 22.5 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[!#1:1][CX3:2](=S)!@;-[NX3H1:3][!#1:4] 1 0.0 -1 20.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[!#1:1][CH2:2]!@;-[n:3][cH0:4] 1 0.0 1 6.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CH2:2]!@;-[n:3][a:4] 1 0.0 1 8.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[CX4:1][CX4H2:2]!@;-[NX3;N^3:3][CX4:4] 1 4.0 1 3.1 1 3.9 -1 -0.8 1 0.0 1 "
"0.7\n"
"[CX4:1][CX4H2:2]!@;-[NX3:3][CX4:4] 1 4.0 1 3.1 1 3.9 -1 -0.8 1 0.0 1 0.7\n"
"[C:1][CX4H2:2]!@;-[NX3;N^3:3][C:4] 1 4.0 1 3.1 1 3.9 -1 -0.8 1 0.0 1 0.7\n"
"[C:1][CX4H2:2]!@;-[NX3:3][C:4] 1 4.0 1 3.1 1 3.9 -1 -0.8 1 0.0 1 0.7\n"
"[C:1][CX4:2]!@;-[NX3;N^3:3][C:4] 1 1.9 1 1.6 1 2.3 -1 -0.5 1 -0.1 1 0.2\n"
"[C:1][CX4:2]!@;-[NX3:3][C:4] 1 0.0 1 0.0 1 1.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4H2:2]!@;-[NX3H1;N^3:3][!#1:4] -1 -3.1 1 1.5 -1 -1.6 1 0.2 -1 "
"-0.2 1 -0.2\n"
"[!#1:1][CX4H2:2]!@;-[NX3H1:3][!#1:4] 1 0.0 1 0.0 1 1.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4H2:2]!@;-[NX3;N^3:3][!#1:4] 1 0.0 1 0.0 1 1.7 1 0.0 1 0.0 1 "
"0.0\n"
"[!#1:1][CX4H2:2]!@;-[NX3:3][!#1:4] 1 0.0 1 0.0 1 1.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4:2]!@;-[NX3;N^3:3][!#1:4] 1 0.0 1 0.0 1 1.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4:2]!@;-[NX3:3][!#1:4] 1 0.0 1 0.0 1 1.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][S:2](=O)(=O)!@;-[nX3:3]([aH1])[aH1:4] 1 0.0 1 20.5 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[!#1:1][S:2](=O)(=O)!@;-[nX3:3][aH0:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 "
"0.0\n"
"[!#1:1][S:2](=O)(=O)!@;-[nX3:3][a:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 "
"0.0\n"
"[c:1][S:2](=O)(=O)!@;-[NX2H0:3]-[*:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 "
"0.0\n"
"[*:1][S:2](=O)(=O)!@;-[NX3H0&r:3][*:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 "
"0.0\n"
"[C:1][S:2](=O)(=O)!@;-[NX3H1:3][c:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 "
"0.0\n"
"[C:1][S:2](=O)(=O)!@;-[NX3H0:3][c:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 "
"0.0\n"
"[c:1][S:2](=O)(=O)!@;-[NX3H1:3][C:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 "
"0.0\n"
"[c:1][S:2](=O)(=O)!@;-[NX3H0:3][C:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 "
"0.0\n"
"[c:1][S:2](=O)(=O)!@;-[NX3H1:3][c:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 "
"0.0\n"
"[c:1][S:2](=O)(=O)!@;-[NX3H0:3][c:4] 1 0.0 1 4.1 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[C:1][S:2](=O)(=O)!@;-[NX3H1:3][C:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 "
"0.0\n"
"[C:1][S:2](=O)(=O)!@;-[NX3H0:3][C:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 "
"0.0\n"
"[*:1][S:2](=O)(=O)!@;-[NX3H1:3][*:4] 1 0.0 1 1.2 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[*:1][S:2](=O)(=O)!@;-[NX3H0:3][*:4] 1 0.0 1 3.7 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX3:2]!@;-[SX2:3][!#1:4] 1 0.0 -1 2.5 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4:2]!@;-[SX2:3][!#1:4] -1 -0.8 -1 -0.8 -1 -1.5 -1 0.4 1 -0.1 -1 "
"0.3\n"
"[!#1:1][CX3:2]!@;-[SX3:3][!#1:4] -1 5.5 1 8.7 -1 3.1 1 5.0 1 -1.7 1 1.0\n"
"[!#1:1][CX4:2]!@;-[SX3:3][!#1:4] 1 0.0 1 0.0 1 10.4 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX3:2]!@;-[SX4:3][!#1:4] 1 0.0 1 3.8 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[H:1][CX4H1:2]!@;-[SX4:3][!#1:4] 1 0.0 1 0.0 1 2.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4:2]!@;-[SX4:3][!#1:4] 1 0.0 1 0.0 1 5.0 1 0.0 1 0.0 1 0.0\n"
"[aH1:1][c:2]([aH1])!@;-[SX2:3][!#1:4] 1 0.0 1 0.0 1 0.0 -1 0.9 1 0.0 1 "
"0.0\n"
"[aH1:1][c:2]([aH0])!@;-[SX2:3][!#1:4] 1 0.0 1 0.0 1 0.0 -1 0.9 1 0.0 1 "
"0.0\n"
"[aH0:1][c:2]([aH0])!@;-[SX2:3][!#1:4] 1 -0.2 1 0.4 -1 -0.0 -1 1.9 -1 -0.0 "
"1 -1.1\n"
"[!#1:1][c:2]!@;-[SX2:3][!#1:4] 1 0.0 1 0.0 1 0.0 -1 4.4 1 0.0 1 0.0\n"
"[!#1:1][c:2]!@;-[SX3:3][!#1:4] 1 0.0 1 1.3 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[aH1:1][c:2]([aH1])!@;-[SX4:3][!#1:4] 1 0.0 1 1.5 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[aH0:1][c:2]([aH1])!@;-[SX4:3][!#1:4] 1 0.0 1 0.0 1 2.0 1 0.0 1 0.0 1 "
"0.0\n"
"[aH0:1][c:2]([aH0])!@;-[SX4:3][!#1:4] 1 0.0 1 3.3 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[!#1:1][c:2]!@;-[SX4:3][!#1:4] 1 0.0 1 1.5 1 0.0 1 0.0 1 0.0 1 0.0\n"
//"[O:1]=[CX3:2]([NH1])!@;-[CH2:3][CX3:4]=O\n"
"[O:1]=[CX3:2]([NH1])!@;-[CH2:3][C:4] -1 8.0 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[C]\\[CX3:1]([H])=[CX3:2]([C])!@;-\\[CH2:3][C:4] 1 0.0 1 0.0 -1 5.0 1 0.0 "
"1 0.0 1 0.0\n"
"[C]\\[CX3:1]([H])=[CX3:2]([H])!@;-\\[CH1:3](C)[C:4] 1 0.0 1 0.0 -1 5.0 1 "
"0.0 1 0.0 1 0.0\n"
"[C]\\[CX3:1]([H])=[CX3:2]([H])!@;-\\[CH2:3][C:4] 1 0.0 1 0.0 -1 5.0 1 0.0 "
"1 0.0 1 0.0\n"
"[C]\\[CX3:1]([H])=[CX3:2]([H])!@;-/[CH2:3][C:4] 1 0.0 1 0.0 -1 5.0 1 0.0 "
"1 0.0 1 0.0\n"
"[N:1][C:2](=O)!@;-[CX4H2:3][CX4H2:4] 1 4.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"N[C:2](=[O:1])!@;-[CH2:3][N:4] 1 0.0 -1 10.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]([O-])!@;-[CX4H1:3][H:4] 1 0.0 1 0.0 1 0.0 1 2.0 1 0.0 1 0.0\n"
"[CX3H2:1]=[CX3:2]!@;-[CX3:3]=[C:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[CX3:1]=[CX3:2]!@;-[CH2:3][OX2:4] 1 0.0 1 0.0 -1 20.0 1 0.0 1 0.0 1 0.0\n"
"[CX3:1]=[CX3:2]!@;-[CH1:3](C)[C:4] 1 0.0 1 0.0 -1 4.0 1 0.0 1 0.0 1 0.0\n"
"[CX3:1]=[CX3:2]!@;-[CH2:3][C:4] 1 0.0 1 0.0 -1 1.5 1 0.0 1 0.0 1 0.0\n"
"[CX3:1]=[CX3:2]!@;-[CH2:3][c:4] 1 0.0 1 0.0 -1 1.5 1 0.0 1 0.0 1 0.0\n"
"[CX3:1]=[CX3:2]!@;-[CH2:3][!#1:4] 1 0.0 1 0.0 -1 4.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[CX3:2]!@;-[CX3:3]=[O:4] 1 20.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[CX3:1]=[CX3:2]!@;-[CX3:3]=[CX3:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[*^2:1]~[C^2:2]([!H])!@;-[C^2:3]~[*^2:4] 1 0.0 -1 15.0 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
"[*^2:1]~[C^2:2]!@;-[C^2:3]~[*^2:4] 1 0.0 -1 30.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[CX3:2]!@;-[CX4&r3:3]!@[!#1:4] -1 -0.7 -1 0.5 1 -0.3 -1 0.3 -1 -0.2 "
"-1 0.2\n"
"[O:1]=[CX3:2]!@;-[CX4H1&r3:3][H:4] 1 0.0 -1 3.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[OX2:1][CX4H2:2]!@;-[CX4H2:3][N&r:4] 1 0.0 1 0.0 1 5.0 1 0.0 1 0.0 1 0.0\n"
"[OX2:1][CX4H2:2]!@;-[CX4H2:3][N:4] 1 0.0 1 0.0 1 10.0 1 0.0 1 0.0 1 0.0\n"
"[OX2:1][CX4:2]!@;-[CX4:3][N:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[OX2:1][CX4H2:2]!@;-[CX4H2:3][OX2:4] 1 0.0 1 0.0 1 10.0 1 0.0 1 0.0 1 "
"0.0\n"
"[OX2:1][CX4:2]!@;-[CX4:3][OX2:4] 1 0.0 1 0.0 1 3.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4&r:2]!@;-[CX4&r:3][!#1:4] 1 0.0 1 0.0 1 2.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4H2:2]!@;-[CX4H2:3][!#1:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4:2]!@;-[CX4:3][!#1:4] 1 0.0 1 0.0 1 7.0 1 0.0 1 0.0 1 0.0\n"
"[OH1:1][CX4:2]!@;-[CX3:3]=[O:4] 1 0.0 -1 2.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[NH1:1][CX4:2]!@;-[CX3:3]=[O:4] 1 0.0 -1 2.1 -1 -0.1 -1 -1.0 1 -0.4 1 "
"-0.1\n"
"[O:1][CX4:2]!@;-[CX3:3]=[O:4] 1 0.0 -1 3.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[N:1][CX4:2]!@;-[CX3:3]=[O:4] 1 0.0 -1 1.4 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[C:1][CX4H2:2]!@;-[CX3:3]=[O:4] 1 -1.0 1 -0.5 1 -0.2 1 -0.3 -1 0.0 1 "
"-0.3\n"
"[c:1][CX4H2:2]!@;-[CX3:3]=[O:4] -1 0.9 1 -0.3 1 -0.2 1 -0.5 -1 0.1 1 0.2\n"
"[!#1:1][CX4H2:2]!@;-[CX3:3]=[O:4] 1 0.0 1 -0.7 1 0.0 1 -0.5 1 0.0 1 -0.6\n"
"[c:1][CX4:2]!@;-[CX3:3]=[O:4] 1 0.0 1 0.0 -1 1.0 1 0.0 1 0.0 1 0.0\n"
//"[C:1][CX4:2]!@;-[CX3:3]=[O:4]\n"
//"[!#1:1][CX4:2]!@;-[CX3:3]=[O:4]\n"
"[c:1][CX4:2]!@;-[CX3:3][C:4] 1 0.0 1 0.0 1 1.9 1 0.0 1 0.0 1 0.0\n"
"[C:1][CX4:2]!@;-[CX3:3][c:4] 1 0.0 1 0.0 1 2.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][CX4:2]!@;-[CX3:3][c:4] -1 -4.4 1 4.0 -1 -3.9 -1 -1.0 1 0.6 -1 -0.4\n"
"[C:1][CX4:2]!@;-[CX3:3][C:4] 1 0.0 1 0.0 1 1.5 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4:2]!@;-[CX3H0:3][!#1:4] 1 0.0 1 0.0 1 0.6 1 0.0 1 0.0 1 0.0\n"
"[H:1][CX4H1:2]!@;-[CX3:3][!#1:4] -1 0.7 -1 0.5 1 0.3 -1 -0.3 1 0.0 1 "
"-0.1\n"
"[!#1:1][CX4H2:2]!@;-[CX3:3][!#1:4] 1 0.0 1 0.0 1 0.0 -1 0.8 1 0.0 1 0.0\n"
"[!#1:1][CX4:2]!@;-[CX3:3][!#1:4] 1 0.0 1 0.0 1 0.6 1 0.0 1 0.0 1 0.0\n"
"[c:1][c:2]!@;-[c:3][c:4]!@c 1 0.1 1 0.9 1 0.1 -1 -0.4 1 0.0 -1 0.3\n"
"[cH0:1][c:2]([cH0])!@;-[c:3]([cH0:4])[cH0] 1 0.0 1 3.6 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[c:3]([cH0:4])[cH1] 1 0.0 1 10.0 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
"[cH0:1][c:2]([cH1])!@;-[c:3]([cH0:4])[cH1] -1 -0.7 1 3.6 -1 -0.8 1 1.7 -1 "
"-0.1 1 0.2\n"
"[cH0:1][c:2]([cH0])!@;-[c:3]([cH1:4])[cH1] 1 -0.3 -1 -2.1 -1 -0.1 -1 -0.3 "
"1 0.0 -1 0.5\n"
"[cH0:1][c:2]([cH1])!@;-[c:3]([cH1:4])[cH1] 1 0.0 1 0.0 1 0.0 1 0.6 1 0.0 "
"1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[c:3]([cH1:4])[cH1] -1 -0.7 1 -8.0 1 0.0 1 4.4 1 "
"0.0 1 -1.5\n"
"[nX2H0:1][c:2]!@;-[c:3][nX3H1:4] 1 0.0 -1 30.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[nX2H0:1][c:2]([!nX2H0])!@;-[c:3]([!nX2H0])[nX2H0:4] 1 100.0 1 0.0 1 0.0 "
"1 0.0 1 0.0 1 0.0\n"
"[nX2H0:1][c:2](a(a)(a))!@;-[c:3][nX2H0:4] 1 30.0 1 0.0 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
//"[nX2H0:1][c:2](a([CX3H0]))!@;-[c:3](a([CX3H0]))[nX2H0:4] \n"
"[nX2H0:1][c:2]!@;-[c:3][nX2H0:4] 1 0.0 -1 50.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][c:2]!@;-[c:3][s,o,nX3H1:4] 1 0.0 -1 4.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[c:3][nX2H0:4] 1 0.0 1 1.7 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH0:1][c:2]!@;-[c:3]([cH0])[nX2H0:4] -1 0.9 -1 -1.0 1 -0.8 -1 0.2 -1 0.3 "
"1 -0.2\n"
"[c:1][c:2]!@;-[c:3]([cH0])[nX2H0:4] 1 0.0 1 0.0 1 0.0 1 1.1 1 0.0 1 0.0\n"
"[c:1][c:2]([cH0])!@;-[c:3][nX2H0:4] 1 0.0 -1 3.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][c:2]!@;-[c:3][nX2H0:4] 1 0.0 -1 4.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][c&r5:2]!@;-[c&r5:3][c:4] 1 0.0 -1 20.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][c&r6:2]!@;-[c&r5:3][c:4] 1 0.0 -1 5.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][c&r6:2]!@;-[c&r6:3][cH0:4] 1 0.0 1 3.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][c&r6:2]!@;-[c&r6:3][c:4] 1 0.0 1 0.0 1 0.0 -1 0.5 1 0.0 1 0.0\n"
"[c:1][c:2]!@;-[c:3][c:4] 1 0.0 1 0.0 1 0.0 -1 0.5 1 0.0 1 0.0\n"
"[cH0:1][c:2]!@;-[CX4H0:3][a:4] 1 0.0 1 0.0 1 8.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]!@;-[CX4H0:3][N,O,S:4] 1 0.0 1 0.0 1 8.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]!@;-[CX4H0:3][CX3:4] 1 0.0 1 0.0 1 12.5 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]!@;-[CX4H0:3][CX4:4] 1 0.0 1 0.0 1 8.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]!@;-[CX4H0:3][*:4] 1 0.0 1 0.0 1 3.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]!@;-[CX4H2:3][a:4] -1 -1.3 1 1.6 -1 -0.6 -1 0.6 1 -0.1 -1 "
"0.3\n"
"[cH0:1][c:2]!@;-[CX4H2:3][CX3:4] -1 -1.3 1 1.6 -1 -0.6 -1 0.6 1 -0.1 -1 "
"0.3\n"
"[cH1:1][c:2]([cH1])!@;-[CX4H2:3][CX4H1:4]C(=O)(O) 1 0.0 1 4.0 1 0.0 1 0.0 "
"1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[CX4H2:3][CX4:4] 1 0.0 1 3.6 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH0:1][c:2]!@;-[CX4H2:3][CX4:4] -1 -1.3 1 1.6 -1 -0.6 -1 0.6 1 -0.1 -1 "
"0.3\n"
"[cH0:1][c:2]!@;-[CX4H2:3][N,O,S:4] 1 0.3 1 1.1 -1 -1.0 1 -0.6 -1 -0.5 1 "
"0.1\n"
"[cH0:1][c:2]!@;-[CX4H2:3][!#1:4] -1 -1.3 1 1.6 -1 -0.6 -1 0.6 1 -0.1 -1 "
"0.3\n"
"[cH0:1][c:2]!@;-[CX4H1:3][a:4] 1 0.9 1 1.2 1 0.6 1 0.4 1 0.0 1 0.1\n"
"[cH0:1][c:2]!@;-[CX4H1:3][CX4:4] 1 6.1 1 5.2 1 2.4 -1 -1.4 1 0.3 -1 0.1\n"
"[cH0:1][c:2]!@;-[CX4H1:3][CX3:4] 1 0.0 1 0.0 1 0.0 1 1.5 1 0.0 1 0.0\n"
"[cH0:1][c:2]!@;-[CX4H1:3][N,O,S:4] 1 0.0 1 0.0 1 0.0 1 2.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]!@;-[CX4H1:3][H:4] 1 0.0 -1 4.3 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[CX4H0:3][a:4] 1 0.0 -1 -0.3 -1 -0.1 1 0.1 1 -0.0 -1 0.1\n"
"[a:1][c:2]!@;-[CX4H0:3][CX3:4] 1 0.0 1 0.0 1 0.0 1 1.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[CX4H0:3][CX4:4] 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0 -1 3.0\n"
"[a:1][c:2]!@;-[CX4H0:3][N,O:4] 1 0.0 -1 0.8 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[CX4H0:3][*:4] 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0 -1 5.0\n"
"[a:1][c:2]!@;-[CX4H2:3][a:4] 1 0.0 1 1.2 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[CX4H2:3][CX3:4] 1 0.0 1 1.2 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[CX4H2:3][CX4:4] 1 0.0 1 1.0 1 0.0 -1 1.1 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[CX4H2:3][N,O:4] 1 0.0 1 0.0 1 0.0 -1 0.1 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[CX4H2:3][!#1:4] 1 0.0 1 3.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[CX4H1:3][N,O:4] 1 0.0 1 0.0 1 0.0 1 0.5 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[CX4H1:3][a:4] 1 0.0 1 0.6 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[CX4H1:3][H:4] 1 0.0 -1 0.7 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[C:3](=[N:4][CX4H1])(N[CX4H1]) 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0 -1 5.0\n"
"[a:1][c:2]!@;-[C:3](=[N:4][CX4])(N[CX4]) 1 0.0 -1 0.6 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[a:1][c:2]!@;-[C:3](=[NH0:4][CX4]) 1 0.0 -1 15.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[C:3](=[N:4][!#1])(N[!#1]) 1 0.0 -1 0.6 1 0.0 1 0.3 1 0.0 "
"-1 -0.1\n"
"[a:1][c:2]!@;-[C:3](=[N:4][!#1])(N~[!#1]) 1 0.0 1 -0.8 1 0.0 1 0.2 1 0.0 "
"1 0.0\n"
"[nX2H0:1][c:2]!@;-[C:3](=[N:4])(-[NH1,NH2]) 1 0.0 -1 26.9 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[nX2H0:1][c:2]!@;-[C:3](=[NH1,NH2:4]) 1 0.0 -1 100.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH0:1][c:2]([cH0])!@;-[C:3](=[N:4]) 1 0.0 -1 30.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH0:1][c:2]!@;-[C:3](=[N:4]) 1 0.0 -1 10.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[C:3](=[N:4]) 1 0.0 -1 5.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]([O-])!@;-[c:3][a:4]C(=O)(O) 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0 -1 "
"5.0\n"
"[O:1]=[C:2]([O-])!@;-[c:3][a:4][CX3]=O 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0 -1 "
"20.0\n"
"[O:1]=[C:2]([O-])!@;-[c:3][nX3H1:4] 1 0.0 -1 30.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[O:1]=[C:2]([O-])!@;-[c:3][nX2H0:4] 1 0.0 -1 30.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[O:1]=[C:2]([O-])!@;-[c:3]([cH0])[cH0:4] 1 0.3 -1 -0.6 -1 0.1 -1 0.4 1 "
"-0.0 -1 0.5\n"
"[O:1]=[C:2]([O-])!@;-[c:3]([cH1])[cH0:4]([NH1,NH2]) 1 0.0 -1 30.0 1 0.0 1 "
"0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]([O-])!@;-[c:3]([cH1])[cH0:4] 1 0.0 -1 7.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[O:1]=[C:2]([O-])!@;-[c:3]([cH1])[cH1:4] 1 0.0 -1 7.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[O:1]=[C:2]([O-])!@;-[c:3][a:4] 1 0.0 -1 25.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1]([OH1])[a:2]!@;-[CX3:3](=[O:4])([NX3H0,CX4H0,c]) -1 14.8 1 0.0 1 0.0 "
"1 0.0 1 0.0 1 0.0\n"
"[a:1]([NH1,NH2])[a:2]!@;-[CX3:3](=[O:4])([NX3H0,CX4H0,c]) -1 36.2 1 0.0 1 "
"0.0 1 0.0 1 0.0 1 0.0\n"
//"[c:1]([OH1])[c:2]!@;-[CX3:3](=[O:4])([NX3H0])\n"
//"[c:1]([NH1,NH2])[c:2]!@;-[CX3:3](=[O:4])([NX3H0])\n"
"[c:1]([OH1])[c:2]!@;-[CX3:3](=[O:4])([O]) 1 0.0 -1 100.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[c:1]([NH1,NH2])[c:2]!@;-[CX3:3](=[O:4])([O]) 1 0.0 -1 20.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[a:1]([OH1])[a:2]!@;-[CX3:3](=[O:4])([O]) 1 0.0 -1 100.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[a:1]([NH1,NH2])[a:2]!@;-[CX3:3](=[O:4])([O]) 1 0.0 -1 100.0 1 0.0 1 0.0 "
"1 0.0 1 0.0\n"
"[c:1]([OH1])[c:2]!@;-[CX3:3](=[O:4])([!O]) 1 0.0 -1 20.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[c:1]([NH1,NH2])[c:2]!@;-[CX3:3](=[O:4])([!O]) -1 36.5 1 0.0 1 0.0 1 0.0 "
"1 0.0 1 0.0\n"
"[a:1]([OH1])[a:2]!@;-[CX3:3](=[O:4])([!O]) 1 0.0 -1 100.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[a:1]([NH1,NH2])[a:2]!@;-[CX3:3](=[O:4])([!O]) -1 41.7 1 0.0 1 0.0 1 0.0 "
"1 0.0 1 0.0\n"
"[cH0:1]([CX3])[c:2]([cH1])!@;-[CX3:3](c)=[O:4] -1 3.1 -1 -3.3 -1 1.9 1 "
"1.6 1 -0.3 1 0.1\n"
"[cH0:1][c:2]([cH0])!@;-[CX3:3](c)=[O:4] 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0 -1 "
"5.0\n"
"[cH0:1]([OH1])[c:2]([cH1])!@;-[CX3:3](c)=[O:4] -1 16.7 1 0.0 1 0.0 1 0.0 "
"1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH1])!@;-[CX3:3](c)=[O:4] -1 1.0 1 0.0 -1 0.7 1 0.5 -1 -0.0 "
"1 -0.3\n"
"[cH1:1][c:2]([cH1])!@;-[CX3:3](c)=[O:4] -1 -0.1 -1 2.4 1 -0.4 -1 -1.0 1 "
"0.1 -1 -0.5\n"
"[a:1][a:2]!@;-[CX3:3](a)=[O:4] -1 -0.0 1 -0.9 -1 0.1 1 0.2 -1 0.0 -1 "
"-0.3\n"
"[s:1][c:2]!@;-[C:3]([NH1])=[O:4] -1 36.5 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1](Cl)[c:2]([cH1])!@;-[CX3:3]([NX3H1])=[O:4] 1 0.0 1 10.0 1 0.0 1 "
"0.0 1 0.0 1 0.0\n"
"[cH0:1](F)[c:2]([cH1])!@;-[CX3:3]([NX3H1])=[O:4] 1 6.2 1 0.0 1 0.0 1 0.0 "
"1 0.0 1 0.0\n"
"[cH0:1]([OH0])[c:2]([cH1])!@;-[C:3](=O)[NH1:4] -1 60.0 1 0.0 1 0.0 1 0.0 "
"1 0.0 1 0.0\n"
"[cH0:1]([OH1])[c:2]([cH1])!@;-[C:3](=O)[NH1:4] 1 0.0 -1 15.0 1 0.0 1 0.0 "
"1 0.0 1 0.0\n"
//"[cH0:1][c:2]([cH1])!@;-[CX3:3]([NX3H1])=[O:4] 1 -0.2 1 -0.9 -1 -0.4 -1 " // 27.6.16 change in functional form
//"-0.1 1 0.5 1 -0.8\n"
"[cH0:1][c:2]([cH1])!@;-[CX3:3]([NX3H1])=[O:4] 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.1 1 0.0\n"
"[cH0:1][c:2]([cH1])!@;-[CX3:3]([NX3H0])=[O:4] 1 0.0 1 5.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[C:3]([NH1,NH2])=[O:4] 1 0.0 -1 0.5 1 0.0 1 0.0 1 " // 27.6. reduced from 1.6
"0.0 1 0.0\n"
//"[a:1][c:2]!@;-[C:3]([NH0])=[O:4]\n"
"[a:1][c:2]!@;-[C:3]([NH1,NH2])=[O:4] 1 0.0 -1 2.4 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH0:1](F)[c:2]([cH1])!@;-[CX3:3]=[O:4] 1 0.0 -1 1.8 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH0:1](Cl)[c:2]([cH1])!@;-[CX3:3]=[O:4] 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0 -1 " // 26.6.16 reduced from 10.0
"2.0\n"
"[nX3H1:1][a:2]!@;-[CX3:3]=[O:4] 1 0.0 -1 10.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[nX2H0:1][c:2](c)!@;-[CX3:3]([!O])=[O:4] 1 66.5 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[nX2H0:1][a:2]([nX2H0])!@;-[CX3:3]=[O:4] 1 0.0 -1 36.8 1 0.0 1 0.0 1 0.0 "
"1 0.0\n"
"[*^2]!@;-[cH0:1][c:2]([cH1])!@;-[CX3:3]=[O:4] 1 0.0 -1 8.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[cH0:1][c:2]([cH1])!@;-[CX3:3]=[O:4] 1 0.0 -1 2.0 1 0.0 1 0.0 1 0.0 1 " // 25.6.16 reduced from 10.0
"0.0\n"
"[cH0:1][c:2]([cH0])!@;-[CX3:3]=[O:4] 1 0.0 1 0.0 1 0.0 -1 3.0 1 0.0 1 "
"0.0\n"
"[cH1:1][c:2]([cH1])!@;-[CX3:3]([CX3H0])=[O:4] 1 0.0 -1 5.9 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[CX3:3]=[O:4] 1 0.0 -1 5.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[a:1][a:2]!@;-[CX3:3]=[O:4] 1 0.0 -1 8.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([nX2])!@;-[CX3:3]=[NX3:4] 1 0.0 -1 8.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH1:1][c:2]([nX3H1])!@;-[CX3:3]=[NX2:4] 1 97.4 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH1:1][c:2]([nX2])!@;-[CX3:3]=[NX2:4] 1 0.0 -1 8.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH1:1][c:2]([cH0]([OH1]))!@;-[CX3:3]=[NX2:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 "
"0.0 1 0.0\n"
"[cH1:1][c:2]([cH0])!@;-[CX3:3]=[NX2:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH1:1][c:2]([cH1])!@;-[CX3:3]=[NX2:4] 1 0.0 -1 9.5 1 0.0 1 0.0 1 0.0 1 "
"0.0\n"
"[cH0:1][c:2]([cH0])!@;-[CX3:3]=[NX2:4] 1 0.0 1 -0.7 1 0.0 1 -0.5 1 0.0 1 "
"-0.6\n"
"[a:1][c:2]!@;-[CX3:3]=[CX3H0:4] 1 0.0 -1 0.7 1 0.0 1 0.6 1 0.0 1 -0.5\n"
"[a:1][a:2]!@;-[CX3:3]=[CX3H2:4] 1 0.0 -1 1.3 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][a:2]!@;-[CX3:3]=[CX3H1:4] 1 0.0 -1 5.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[*:1][SX2:2]!@;-[SX2:3][*:4] 1 0.0 1 12.9 1 0.0 1 0.0 1 0.0 1 0.0\n"
// ------
// these patterns were added as part of the ET-DG work
// non-aromatic double bonds
//"[*:1][CX3:2]=[CX3:3][*:4] 1 0.0 -1 7.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[*:1][X3,X2:2]=[X3,X2:3][*:4] 1 0.0 -1 100.0 1 0.0 1 0.0 1 0.0 1 0.0\n";

View File

@@ -0,0 +1,378 @@
/* SMARTS patterns for experimental torsion angle preferences
* taken from J. Chem. Inf. Model. 56, 1, (2016)
*
* torsion-angle potential form:
* V = V1*(1 + s1*cos(1x)) + V2*(1 + s2*cos(2x)) + V3*(1 + s3*cos(1x))
* + V4*(1 + s4*cos(1x)) + V5*(1 + s5*cos(1x)) + V6*(1 + s6*cos(1x))
*
* format: [SMARTS, s1, V1, s2, V2, s3, V3, s4, V4, s5, V5, s6, V6]
*/
const std::string torsionPreferencesV2 =
"[O:1]=[C:2]!@;-[O:3]~[CH0:4] -1 78.2 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]([N])!@;-[O:3]~[C:4] -1 79.1 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]!@;-[O:3]~[C:4] -1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]!@;-[O:3]~[!#1:4] -1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][O:2]!@;-[c:3]~[*:4] 1 0.0 1 0.8 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][O:2]!@;-[CX3:3]~[*:4] 1 0.0 1 0.0 1 2.5 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][O:2]!@;-[CH1:3][H:4] -1 20.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][O:2]!@;-[CH2:3]~[C:4] 1 0.0 1 0.0 1 2.5 1 0.0 1 0.0 1 0.0\n"
"[H:1][CX4H1:2]!@;-[O:3][CX4:4] -1 20.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[C:1][CH2:2]!@;-[O:3][CX4:4] 1 0.0 1 0.0 1 2.5 1 0.0 1 0.0 1 0.0\n"
"[*:1][CX4:2]!@;-[O:3][$([CX3](=[!O])):4] 1 2.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1][CX4:2]!@;-[O:3][CX4:4] 1 0.0 1 0.0 1 8.8 1 0.0 1 0.0 1 0.0\n"
"[*:1][CX4:2]!@;-[O:3][CX4:4] 1 0.0 1 0.0 1 2.5 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[O:3][S:4] 1 0.0 1 3.2 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH0])!@;-[O:3][S:4] 1 0.0 1 8.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[O:3][S:4] 1 0.0 1 11.5 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[O:3][c:4] 1 0.0 1 0.0 1 0.0 -1 0.5 1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH0])!@;-[O:3][c:4] 1 0.0 1 0.0 -1 3.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[O:3][c:4] 1 0.0 1 2.7 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[O:3][P:4] 1 0.0 1 2.7 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[O:3][p:4] 1 0.0 1 11.5 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH:1][c:2]([cH])!@;-[O:3][$(C([F])([F])[F]):4] 1 0.0 1 30.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[O:3][CX4H0:4] 1 0.0 1 30.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]([a])!@;-[O:3][CX4H0:4] 1 0.0 1 0.0 1 0.0 -1 2.0 1 0.0 1 0.0\n"
"[cH1,n:1][c:2]!@;-[O:3][CRH1:4] 1 0.0 -1 5.4 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1,n:1][c:2]!@;-[O:3][CH1:4] 1 0.0 -1 7.2 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[nX2H0:1][c:2]([cH0])!@;-[O:3][CX4H0:4] -1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([nX2])!@;-[O:3][C:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[nX2:1][c:2]([nX2])!@;-[O:3][C:4] 1 0.0 -1 44.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[nX2:1][c:2]([nX3])!@;-[O:3][C:4] -1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([nX3])!@;-[O:3][C:4] -1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([nX2])!@;-[O:3][C:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$([cH0]([CX3])):1][c:2]([cH1])!@;-[O:3][C:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2](cO)!@;-[O:3][C:4] -1 61.9 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(cO):1][c:2](cO)!@;-[O:3][C:4] 1 0.0 1 3.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[O:3][C:4] 1 0.0 1 6.6 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH1])!@;-[O:3][C:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[O:3][C:4] 1 0.0 -1 19.5 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[O:3][CX3H0:4] 1 0.0 1 1.9 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[aH0:1][c:2]!@;-[OX2:3][!#1:4] 1 0.0 -1 7.2 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4H0:2]!@;-[OX2:3][!#1:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[H:1][CX4H1:2]!@;-[OX2:3][!#1:4] -1 5.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[C:1][CX4H2:2]!@;-[OX2:3][c:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][CX4H2:2]!@;-[OX2:3][C:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[C:1][CX4H2:2]!@;-[OX2:3][C:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][CX4H2:2]!@;-[OX2:3][c:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4H2:2]!@;-[OX2:3][c:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4H2:2]!@;-[OX2:3][C:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][CX4H2:2]!@;-[OX2:3][!#1:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[C:1][CX4H2:2]!@;-[OX2:3][!#1:4] 1 2.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4H2:2]!@;-[OX2:3][!#1:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4:2]!@;-[OX2:3][!#1:4] 1 0.0 1 8.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$([CX3]=O):1][NX3H0:2](C)!@;-[CX4H2:3][C:4] 1 0.0 1 8.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$([CX3]=O):1][NX3H1:2]!@;-[CX4H2:3][C:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[$(S(=O)(=O)):1][NX3H0:2]!@;-[CX4H2:3][!#1:4] 1 0.0 1 1.9 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(S(=O)(=O)):1][NX3H1:2]!@;-[CX4H2:3][!#1:4] 1 17.9 -1 -13.3 1 9.2 1 4.7 -1 -2.3 -1 -0.9\n"
"[$(S(=O)(=O)):1][NX3H0:2]!@;-[CX4H1:3][H:4] 1 0.0 -1 15.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(S(=O)(=O)):1][NX3H1:2]!@;-[CX4H1:3][H:4] -1 20.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(S(=O)(=O)):1][NH1:2]!@;-[c:3][nX2:4] 1 0.0 -1 15.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(S(=O)(=O)):1][NH0:2]!@;-[c:3]([cH1])[cH1:4] 1 0.0 1 13.3 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(S(=O)(=O)):1][NH1:2]!@;-[c:3]([cH1])[cH1:4] 1 0.0 1 0.0 1 0.0 1 0.9 1 0.0 1 0.0\n"
"[$(S(=O)(=O)):1][NH0:2]!@;-[c:3]([cH1])[cH0:4] 1 0.0 1 50.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(S(=O)(=O)):1][NH1:2]!@;-[c:3]([cH1])[cH0:4] 1 1.9 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(S(=O)(=O)):1][NH0:2]!@;-[c:3]([cH0])[cH0:4] 1 0.0 1 17.8 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(S(=O)(=O)):1][NH1:2]!@;-[c:3]([cH0])[cH0:4] 1 0.0 1 10.6 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(S(=O)(=O)):1][N:2]!@;-[c:3][a:4] 1 0.0 1 0.0 1 0.0 -1 2.0 1 0.0 1 0.0\n"
"[O-:1][N+:2](=O)!@;-[c:3]([cH,nX2H0])[cH,nX2H0:4] 1 0.0 -1 5.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O-:1][N+:2](=O)!@;-[c:3]([cH0])[cH,nX2H0:4] -1 -0.2 1 -5.7 1 -0.2 -1 -3.2 1 0.1 1 -1.3\n"
"[O-:1][N+:2](=O)!@;-[c:3]([cH0])[cH0:4] -1 -0.4 1 0.3 1 -0.1 -1 0.6 1 -0.1 -1 0.2\n"
"[O-:1][N+:2](=O)!@;-[c:3][a:4] 1 0.0 -1 11.8 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[NX3H1:3][C,c:4](~[N,n])(~[N,n]) 1 0.0 1 2.7 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH1])!@;-[NX3H1:3][C,c:4](~[N,n])(~[N,n]) 1 15.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([nX2H0])!@;-[NX3H1:3][C,c:4](~[N,n])(~[N,n]) 1 40.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[NX3H1:3][C,c:4](~[N,n])(~[N,n]) 1 0.0 -1 1.4 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[nX2H0:1][c:2]([nX2H0])!@;-[NX3H1:3][C,c:4](~[N,n])(~[N,n]) 1 0.0 -1 15.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[nX2H0:1][c:2]([nX3H1])!@;-[NX3H1:3][C,c:4](~[N,n])(~[N,n]) 1 0.0 -1 27.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][a:2]!@;-[NH1:3][C,c:4](~[N,n])(~[N,n]) 1 0.0 -1 6.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[C:1][NH:2]!@;-[C:3](=[NH2:4])[NH2] 1 0.0 -1 100.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[NH2][C:1](=[NH2])[NH:2]!@;-[CH2:3][C:4] 1 0.0 1 0.0 1 2.5 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[NX2:3]=[$(C([NX3])n):4] -1 -0.1 1 1.9 -1 -0.1 -1 -1.9 -1 0.1 1 0.0\n"
"[nX2:1][c:2]!@;-[NX2:3]=[$(C([NX3])N):4] 1 0.0 -1 6.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]!@;-[NX2:3]=[$(C([NX3])N):4] -1 -0.1 1 1.9 -1 -0.1 -1 -1.9 -1 0.1 1 0.0\n"
"[cH1:1][c:2]!@;-[NX2:3]=[$(C([NX3])N):4] 1 -0.4 -1 -0.9 1 -0.4 1 1.1 1 -0.2 1 -0.1\n"
"[O:1]=[C:2]([NH1])!@;-[NX3H1:3](C=O)[H:4] -1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]!@;-[NX3H1:3](C=O)[H:4] 1 0.0 -1 10.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]!@;-[NX3:3](C=O)[*:4] 1 0.0 -1 10.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][NX3H1:2]!@;-[CX3:3]=[NX2:4] 1 0.0 -1 8.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][NX3H0:2]!@;-[CX3:3]=[*H0:4] 1 0.0 -1 8.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][NX3H0:2]!@;-[CX3:3]=[*H1:4] 1 0.0 1 0.0 1 2.5 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][NX3H1:2]!@;-[CX3:3]=[*H2:4] 1 0.0 -1 68.5 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][NX3H1:2]!@;-[CX3:3]=[*H1:4] 1 0.0 1 0.0 -1 2.0 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][NX3H1:2]!@;-[CX3:3]=[*H0:4] 1 0.0 -1 39.4 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][NX3H0:2]!@;-[CX3H1:3]=[*:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][NX3H1:2]!@;-[CX3H1:3]=[*:4] 1 84.1 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$([C](=O)):1][NX3H0:2]!@;-[CX4H2:3][$([c]([cH,nX2H0])[cH,nX2H0]):4] 1 0.0 1 3.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][NX3H1:2]!@;-[CX4H2:3][$([c]([cH,nX2H0])[cH,nX2H0]):4] -1 -1.3 1 1.6 -1 -0.6 -1 0.6 1 -0.1 -1 0.3\n"
"[$(C=O):1][NX3H0:2]!@;-[CX4H2:3][!#1:4] 1 0.0 1 15.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][NX3H1:2]!@;-[CX4H2:3][!#1:4] 1 0.0 1 0.0 1 2.0 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][NX3H0:2]!@;-[CX4H1:3][H:4] 1 0.0 -1 8.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][NX3H1:2]!@;-[CX4H1:3][H:4] -1 5.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][NX3H0:2]!@;-[CX4H0:3][C:4] 1 0.0 1 0.0 1 2.0 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][NX3H1:2]!@;-[CX4H0:3][C:4] 1 0.0 1 0.0 1 2.5 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][NX3:2]!@;-[!#1:3][!#1:4] 1 0.0 1 0.0 1 0.0 -1 0.8 1 0.0 1 0.0\n"
"[$([C](=O)([$([NX3H1]),$([NX3H2])])[NX3H1]):1][NX3H1:2]!@;-[c:3]([nH1])[nH0:4] 1 84.1 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$([C](=O)([$([NX3H1]),$([NX3H2])])[NX3H1]):1][NX3H1:2]!@;-[c:3]([nH0])[cH1:4] 1 84.1 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$([C](=O)):1][NX3H1:2]!@;-[$([a]([nH0,o])):3][cH1:4] -1 53.3 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$([C](=O)([$([NX3H1]),$([NX3H2])])[NX3H1]):1][NX3H1:2]!@;-[c&r6:3][nH0&r6:4] 1 0.0 -1 39.4 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$([C](=O)):1][NX3H1:2]!@;-[c:3]([cH])[nX2H0:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][NX3H0:2]!@;-[c:3]([s,o])[n:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][NX3H1:2]!@;-[c:3]([s,o])[n:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$([C](=O)):1][NX3:2]!@;-[a:3](s)[a:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][NX3:2]!@;-[a:3][nH:4] -1 53.3 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][NX3H1:2]!@;-[c:3]([cH0]Cl)[cH:4] -1 20.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][NX3H1:2]!@;-[c:3]([cH0]F)[cH:4] -1 11.4 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][NX3:2]!@;-[$([a]([cH1])):3][$([aH0](!@O)):4] 1 38.2 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][NX3:2]!@;-[a:3][aH0:4] 1 0.0 1 0.0 1 0.8 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][NX3H1:2]!@;-[c:3]([cH1])[cH1:4] 1 0.0 -1 2.1 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][NX3H0:2]!@;-[c:3]([cH1])[cH1:4] 1 0.0 1 2.9 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][NX3H0:2]!@;-[c:3]([cH0])[cH:4] 1 0.0 1 2.4 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][NX3H1:2]!@;-[c:3]([cH0])[cH:4] -1 9.7 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][NX3H0:2]!@;-[c:3]([cH0])[cH0:4] 1 0.0 1 2.9 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(C=O):1][NX3H1:2]!@;-[c:3]([cH0])[cH0:4] 1 0.0 1 2.9 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O,S:1]=[C:2]([$([NX3H1]),$([NX3H2])])!@;-[$([NX3]c[nH0]):3][H:4] 1 0.0 -1 39.4 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]!@;-[$([NX3](c([nH1])n)):3][H:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2](c)!@;-[$([NX3](c([nX2H0])([nX2H0]))):3][H:4] 1 0.0 -1 39.4 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[CX3:2]([$([NX3H1]C)])!@;-[NX3H1:3][!#1:4] -1 51.7 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]([!$([NH1])])!@;-[NX3H1:3]([H:4])[$(c([nX2H0])([nX2H0]))] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O,S:1]=[C:2]([$([NX3H1]),$([NX3H2])])!@;-[$([NX3](cn)):3][H:4] 1 0.0 -1 50.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]!@;-[NX3H0:3]([a:4])[A] 1 0.0 -1 4.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[CX3:2](a)!@;-[NX3H0:3][!#1:4] 1 0.0 -1 13.9 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[CX3:2]!@;-[NX3H0:3][!#1:4] 1 0.0 -1 8.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[CX3:2]!@;-[NX3H1:3][!#1:4] -1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[CH0:1][NX3:2]([CH0])!@;-[c:3][a:4] 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[CH0:1][NX3:2]([CH1])!@;-[c:3][a:4] 1 0.0 1 1.3 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1,nX2H0:1][c:2]([cH1,nX2H0])!@;-[NX3&r:3][*:4] 1 0.0 -1 0.9 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[NX3H1:3][$([CX4&r]([C;r])([C;r])):4] 1 0.0 -1 6.8 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[NX3:3][CX4:4] 1 0.0 -1 6.8 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH,nX2H0])!@;-[NX3H1:3][CX4:4] 1 73.1 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH,nX2H0])!@;-[NX3H0:3][CX4:4] 1 0.0 1 0.0 1 0.8 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[NX3:3][CX4:4] 1 0.0 1 0.0 1 0.0 -1 2.0 1 0.0 1 0.0\n"
"[c:1][c:2](c)!@;-[NX3:3][CX4:4] 1 0.0 -1 0.5 1 0.0 -1 0.8 1 0.0 1 -0.6\n"
"[cH1:1][c:2]([cH1])!@;-[NX3:3][a:4] 1 0.0 -1 0.9 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH0])!@;-[NX3:3][a:4] 1 0.0 1 0.0 -1 3.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[NX3:3][a:4] 1 0.0 1 1.3 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][a:2]!@;-[NX3H0:3][$([CX3]=O):4] 1 0.0 1 2.3 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][a:2]!@;-[NX3H1:3][$([CX3]=O):4] -1 -1.6 -1 -0.6 1 0.6 1 0.0 -1 0.1 1 -0.5\n"
"[nX2H0:1][a:2]([nX2H0])!@;-[NX3H0:3][$([CX3]=O):4] 1 72.8 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[nX2H0:1][$(a([!nX2H0])([nX2H0])!@;-[NX3H1]):2]!@[NX3H1:3][$([CX3](a)=O):4] 1 72.8 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[nX2H0:1][a:2]!@;-[NX3H1:3][$([CX3]=O):4] 1 0.0 -1 34.4 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][a:2]!@;-[NX3H1:3][$([CX3]=O):4] 1 0.0 -1 3.1 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][a:2]!@;-[NX3:3][CX4H0:4] 1 0.0 1 0.0 1 0.0 -1 4.0 1 0.0 1 0.0\n"
"[a:1][a:2]!@;-[NX3:3][!#1:4] 1 0.0 1 -0.7 1 0.0 1 -0.5 1 0.0 1 -0.6\n"
"[O:1]=[CX3:2]!@;-[nX3:3]([aH0:4])([aH0]) 1 0.0 -1 8.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[CX3:2]!@;-[nX3:3][aH1:4] 1 0.0 -1 18.7 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][CX3:2](=S)!@;-[NX3:3][a:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX3:2](=S)!@;-[NX3H0:3][!#1:4] 1 0.0 -1 22.5 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX3:2](=S)!@;-[NX3H1:3][!#1:4] 1 0.0 -1 20.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CH2:2]!@;-[n:3][cH0:4] 1 0.0 1 6.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CH2:2]!@;-[n:3][a:4] 1 0.0 1 8.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][n:2]!@;-[CX3H0:3]~[$([n,N](-a)):4] 1 0.0 1 0.0 1 0.0 -1 4.0 1 0.0 1 0.0\n"
"[CX4:1][CX4H2:2]!@;-[NX3:3][CX4:4] 1 4.0 1 3.1 1 3.9 -1 -0.8 1 0.0 1 0.7\n"
"[C:1][CX4H2:2]!@;-[NX3:3][C:4] 1 4.0 1 3.1 1 3.9 -1 -0.8 1 0.0 1 0.7\n"
"[C:1][CX4:2]!@;-[NX3:3][C:4] 1 0.0 1 0.0 1 1.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4H2:2]!@;-[NX3H1:3][!#1:4] 1 0.0 1 0.0 1 1.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4H2:2]!@;-[NX3:3][!#1:4] 1 0.0 1 0.0 1 1.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4H1:2]!@;-[NX3:3][!#1:4] 1 0.0 1 0.0 1 1.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4:2]!@;-[NX3:3][!#1:4] 1 0.0 1 0.0 1 1.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][$(S(=O)=O):2]!@;-[nX3:3]([aH1])[aH1:4] 1 0.0 1 20.5 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][$(S(=O)=O):2]!@;-[nX3:3][aH0:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 0.0\n"
"[c:1][S:2](=O)(=O)!@;-[NX2H0-:3]-[*:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 0.0\n"
"[*:1][$(S(=O)=O):2]!@;-[NX3H0&r:3][*:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 0.0\n"
"[C:1][$(S(=O)=O):2]!@;-[NX3H1:3][c:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 0.0\n"
"[C:1][$(S(=O)=O):2]!@;-[NX3H0:3][c:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 0.0\n"
"[c:1][$(S(=O)=O):2]!@;-[NX3H1:3][C:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 0.0\n"
"[c:1][$(S(=O)=O):2]!@;-[NX3H0:3][C:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 0.0\n"
"[c:1][$(S(=O)=O):2]!@;-[NX3H1:3][c:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 0.0\n"
"[c:1][$(S(=O)=O):2]!@;-[NX3H0:3][c:4] 1 0.0 1 4.1 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[C:1][$(S(=O)=O):2]!@;-[NX3H1:3][C:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 0.0\n"
"[C:1][$(S(=O)=O):2]!@;-[NX3H0:3][C:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 0.0\n"
"[*:1][$(S(=O)=O):2]!@;-[NX3H1:3][*:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 0.0\n"
"[*:1][$(S(=O)=O):2]!@;-[NX3H0:3][*:4] 1 0.0 1 3.7 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX3:2]!@;-[SX2:3][!#1:4] 1 0.0 -1 2.5 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4:2]!@;-[SX2:3][!#1:4] -1 -0.8 -1 -0.8 -1 -1.5 -1 0.4 1 -0.1 -1 0.3\n"
"[!#1:1][CX3:2]!@;-[SX3:3][!#1:4] 1 0.0 1 16.0 1 5.0 1 7.0 1 0.0 1 0.0\n"
"[!#1:1][CX4:2]!@;-[SX3:3][!#1:4] 1 0.0 1 0.0 1 10.4 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX3:2]!@;-[SX4:3][!#1:4] 1 0.0 1 3.8 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[H:1][CX4H1:2]!@;-[SX4:3][!#1:4] 1 0.0 1 0.0 1 2.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4:2]!@;-[SX4:3][!#1:4] 1 0.0 1 0.0 1 5.0 1 0.0 1 0.0 1 0.0\n"
"[aH1:1][c:2]([aH1])!@;-[SX2:3][!#1:4] 1 0.0 1 0.0 1 0.0 -1 0.9 1 0.0 1 0.0\n"
"[aH1:1][c:2]([aH0])!@;-[SX2:3][*R:4] 1 0.0 1 0.0 1 0.0 -1 0.9 1 0.0 1 0.0\n"
"[aH1:1][c:2]([aH0])!@;-[SX2:3][!#1:4] 1 0.0 1 0.0 1 0.0 -1 0.9 1 0.0 1 0.0\n"
"[aH0:1][c:2]([aH0])!@;-[SX2:3][!#1:4] 1 -0.2 1 0.4 1 0.0 -1 1.9 1 0.0 1 -1.1\n"
"[!#1:1][c:2]!@;-[SX2:3][!#1:4] 1 0.0 -1 39.4 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][c:2]!@;-[SX3:3][!#1:4] 1 0.0 1 1.3 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[aH1:1][c:2]([aH1])!@;-[SX4:3][!#1:4] 1 0.0 1 1.5 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[aH0:1][c:2]([aH1])!@;-[SX4:3][!#1:4] 1 0.0 1 0.0 1 2.0 1 0.0 1 0.0 1 0.0\n"
"[aH0:1][c:2]([aH0])!@;-[SX4:3][!#1:4] 1 0.0 1 3.3 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[CX3:2]([NH1])!@;-[CH2:3][CX3:4]=O 1 0.0 1 0.0 1 2.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[CX3:2]([NH1])!@;-[CH2:3][C:4] -1 8.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$([CX3]([C])([H])):1]=[CX3:2]([C])!@;-[CH2:3][C:4] 1 0.0 1 0.0 -1 5.0 1 0.0 1 0.0 1 0.0\n"
"[$([CX3]([C])([H])):1]=[CX3:2]([H])!@;-[CH1:3](C)[C:4] 1 0.0 1 0.0 -1 5.0 1 0.0 1 0.0 1 0.0\n"
"[$([CX3]([C])([H])):1]=[CX3:2]([H])!@;-[CH2:3][C:4] 1 0.0 1 0.0 -1 5.0 1 0.0 1 0.0 1 0.0\n"
"[N:1][C:2](=O)!@;-[CX4H2:3][CX4H2:4] 1 4.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"N[C:2](=[O:1])!@;-[CH2:3][N:4] 1 0.0 -1 10.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]([O-])!@;-[CX4H1:3][H:4] 1 0.0 1 0.0 1 0.0 1 2.0 1 0.0 1 0.0\n"
"[CX3H2:1]=[CX3:2]!@;-[CX3:3]=[C:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[CX3:1]=[CX3:2]!@;-[CH2:3][OX2:4] 1 0.0 1 0.0 -1 20.0 1 0.0 1 0.0 1 0.0\n"
"[CX3:1]=[CX3:2]!@;-[CH1:3](C)[C:4] 1 0.0 1 0.0 -1 4.0 1 0.0 1 0.0 1 0.0\n"
"[CX3:1]=[CX3:2]!@;-[CH2:3][C:4] 1 0.0 1 0.0 -1 1.5 1 0.0 1 0.0 1 0.0\n"
"[CX3:1]=[CX3:2]!@;-[CH2:3][c:4] 1 0.0 1 0.0 -1 1.5 1 0.0 1 0.0 1 0.0\n"
"[CX3:1]=[CX3:2]!@;-[CH2:3][!#1:4] 1 0.0 1 0.0 -1 4.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[CX3:2](O)!@;-[CX3:3]([$([NH1,NH2,CH2])])=[O:4] 1 0.0 -1 39.4 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[CX3:2]!@;-[CX3:3]=[O:4] 1 20.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[CX3R:1]=[CX3R:2]!@;-[CX3:3]=[CX3:4] 1 0.0 -1 39.4 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[CX3H0:1]=[CX3H0:2]!@;-[CX3:3]=[CX3H0:4] 1 0.0 1 0.0 1 2.0 1 0.0 1 0.0 1 0.0\n"
"[CX3H0:1]=[CX3H0:2]!@;-[CX3H0:3]=[CX3:4] 1 0.0 1 1.5 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[CX3H0:1]=[CX3:2]!@;-[CX3H0:3]=[CX3:4] 1 20.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[CX3H0:1]=[CX3H0:2]!@;-[CX3:3]=[CX3:4] 1 20.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[CX3:1]=[CX3:2]!@;-[CX3:3]=[CX3:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[*^2:1]~[C^2:2]([!H])!@;-[C^2:3]~[*^2:4] 1 0.0 -1 15.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[*^2:1]~[C^2:2]!@;-[C^2:3]~[*^2:4] 1 0.0 -1 30.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[CX3:2]!@;-[CX4&r3:3]!@[!#1:4] -1 -0.7 -1 0.5 1 -0.3 -1 0.3 -1 -0.2 -1 0.2\n"
"[O:1]=[CX3:2]!@;-[CX4H1&r3:3][H:4] 1 0.0 -1 3.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[OX2:1][CX4H2:2]!@;-[CX4H2:3][N&r:4] 1 0.0 1 0.0 1 5.0 1 0.0 1 0.0 1 0.0\n"
"[OX2:1][CX4H2:2]!@;-[CX4H2:3][N:4] 1 0.0 1 0.0 1 10.0 1 0.0 1 0.0 1 0.0\n"
"[OX2:1][CX4:2]!@;-[CX4:3][N:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[OX2:1][CX4H2:2]!@;-[CX4H2:3][OX2:4] 1 0.0 1 0.0 1 10.0 1 0.0 1 0.0 1 0.0\n"
"[OX2:1][CX4:2]!@;-[CX4:3][OX2:4] 1 0.0 1 0.0 1 3.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4&r:2]!@;-[CX4&r:3][!#1:4] 1 0.0 1 0.0 1 2.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4H2:2]!@;-[CX4H2:3][!#1:4] 1 0.0 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4:2]!@;-[CX4:3][!#1:4] 1 0.0 1 0.0 1 7.0 1 0.0 1 0.0 1 0.0\n"
"[OX2:1][CX4H2:2]!@;-[CX3:3]([$([NX3H1,NX3H2])])=[O:4] 1 0.0 -1 39.4 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[OH1:1][CX4:2]!@;-[CX3:3]=[O:4] 1 0.0 -1 2.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[NH1:1][CX4:2]!@;-[CX3:3]=[O:4] 1 0.0 -1 3.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1][CX4:2]!@;-[CX3:3]=[O:4] 1 0.0 -1 3.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[N:1][CX4:2]!@;-[CX3:3]=[O:4] 1 0.0 -1 1.4 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[C:1][CX4H2:2]!@;-[CX3:3]=[O:4] 1 -1.0 1 -0.5 1 -0.2 1 -0.3 1 0.0 1 -0.3\n"
"[c:1][CX4H2:2]!@;-[CX3:3]=[O:4] -1 0.9 1 -0.3 1 -0.2 1 -0.5 -1 0.1 1 0.2\n"
"[!#1:1][CX4H2:2]!@;-[CX3:3]=[O:4] 1 0.0 1 -0.7 1 0.0 1 -0.5 1 0.0 1 -0.6\n"
"[c:1][CX4:2]!@;-[CX3:3]=[O:4] 1 0.0 1 0.0 -1 1.0 1 0.0 1 0.0 1 0.0\n"
"[C:1][CX4:2]!@;-[CX3:3]=[O:4] 1 0.0 1 0.0 -1 1.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4:2]!@;-[CX3:3]=[O:4] 1 0.0 1 0.0 -1 1.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][CX4:2]!@;-[CX3:3][C:4] 1 0.0 1 0.0 1 1.9 1 0.0 1 0.0 1 0.0\n"
"[C:1][CX4:2]!@;-[CX3:3][c:4] 1 0.0 1 0.0 1 2.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][CX4:2]!@;-[CX3:3][c:4] -1 -4.4 1 4.0 -1 -3.9 -1 -1.0 1 0.6 -1 -0.4\n"
"[C:1][CX4:2]!@;-[CX3:3][C:4] 1 0.0 1 0.0 1 1.5 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4:2]!@;-[CX3H0:3][!#1:4] 1 0.0 1 0.0 1 0.6 1 0.0 1 0.0 1 0.0\n"
"[H:1][CX4H1:2]!@;-[CX3:3][!#1:4] 1 0.0 -1 1.4 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[!#1:1][CX4H2:2]!@;-[CX3:3][!#1:4] 1 0.0 1 0.0 1 0.0 -1 0.8 1 0.0 1 0.0\n"
"[$([cH0]([$([NX3H2]),$([NX3H1])])):1][a:2]!@;-[a:3][nX2:4] 1 0.0 -1 30.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[nH0:1][c&r6:2]([nH0])!@;-[c&r6:3]([nH0])[nH0:4] 1 0.0 -1 4.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[nH0&r6:1][c&r6:2]([nH0&r6])!@;-[c&r6:3]([cH1&r6])[nH0&r6:4] 1 0.0 -1 4.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[nH0&r6:1][c&r6:2]([nH0&r6])!@;-[c&r6:3]([cH1&r6])[cH1&r6:4] 1 0.0 -1 4.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][c:2]!@;-[c:3][$(c!@c):4] 1 0.1 1 0.9 1 0.1 -1 -0.4 1 0.0 -1 0.3\n"
"[cH0:1][c:2]([cH0])!@;-[c:3]([cH0:4])[cH0] 1 0.0 1 3.6 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[c:3]([cH0:4])[cH1] 1 0.0 1 10.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH1])!@;-[c:3]([cH0:4])[cH1] 1 0.0 1 3.6 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[c:3]([cH1:4])[cH1] 1 0.0 1 3.6 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH1])!@;-[c:3]([cH1:4])[cH1] 1 0.0 1 0.0 1 0.0 1 0.6 1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[c:3]([cH1:4])[cH1] -1 -0.7 1 -8.0 1 0.0 1 4.4 1 0.0 1 -1.5\n"
"[nX2H0:1][c:2]!@;-[c:3][nX3H1:4] 1 0.0 -1 30.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[nX2H0:1][c:2]([!nX2H0])!@;-[c:3]([!nX2H0])[nX2H0:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[nX2H0:1][$(c([nX2H0])(a(a)(a))!@;-c[nX2H0]):2]!@[c:3][nX2H0:4] 1 30.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[nX2H0:1][$([c&r6](c[OH])):2]!@;-[$([c&r6](c[OH])):3][nX2H0:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][c:2]!@;-[c:3][s,o,nX3H1:4] 1 0.0 -1 4.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[c:3][nX2H0:4] 1 0.0 1 1.7 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]!@;-[c:3]([cH0])[nX2H0:4] -1 0.9 -1 -1.0 1 -0.8 -1 0.2 -1 0.3 1 -0.2\n"
"[c:1][c:2]!@;-[c:3]([cH0])[nX2H0:4] 1 0.0 1 0.0 1 0.0 1 1.1 1 0.0 1 0.0\n"
"[c:1][c:2]([cH0])!@;-[c:3][nX2H0:4] 1 0.0 -1 3.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]!@;-[c:3]([cH1])[nX2H0:4] 1 0.0 -1 20.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][c&r5:2]!@;-[c&r5:3][c:4] 1 0.0 -1 20.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][c&r6:2]!@;-[c&r5:3][c:4] 1 0.0 1 0.0 1 0.0 1 1.1 1 0.0 1 0.0\n"
"[c:1][c&r6:2]!@;-[c&r6:3][cH0:4] 1 0.0 1 3.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[c:1][c&r6:2]!@;-[c&r6:3][c:4] 1 0.0 1 0.0 1 0.0 1 1.1 1 0.0 1 0.0\n"
"[c:1][c:2]!@;-[c:3][c:4] 1 0.0 1 0.0 1 0.0 1 1.1 1 0.0 1 0.0\n"
"[nX2&r6:1][cH0&r6:2]([cH1&r6])!@;-[CX4H2:3][O!H:4] 1 2.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]!@;-[CX4H0:3][a:4] 1 0.0 1 0.0 1 8.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]!@;-[CX4H0:3][N,O,S:4] 1 0.0 1 0.0 1 8.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]!@;-[CX4H0:3][CX3:4] 1 0.0 1 0.0 1 12.5 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]!@;-[CX4H0:3][CX4:4] 1 0.0 1 0.0 1 8.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]!@;-[CX4H0:3][*:4] 1 0.0 1 0.0 1 3.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]!@;-[CX4H2:3][a:4] -1 -1.3 1 1.6 -1 -0.6 -1 0.6 1 -0.1 -1 0.3\n"
"[cH0:1][c:2]!@;-[CX4H2:3][CX3:4] -1 -1.3 1 1.6 -1 -0.6 -1 0.6 1 -0.1 -1 0.3\n"
"[cH1:1][c:2]([cH1])!@;-[CX4H2:3][$([CX4H1]C(=O)O):4] 1 0.0 1 4.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[CX4H2:3][CX4:4] 1 0.0 1 3.6 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]!@;-[CX4H2:3][CX4:4] -1 -1.3 1 1.6 -1 -0.6 -1 0.6 1 -0.1 -1 0.3\n"
"[cH0:1][c:2]!@;-[CX4H2:3][N,O,S:4] -1 -1.3 1 1.6 -1 -0.6 -1 0.6 1 -0.1 -1 0.3\n"
"[cH0:1][c:2]!@;-[CX4H2:3][!#1:4] -1 -1.3 1 1.6 -1 -0.6 -1 0.6 1 -0.1 -1 0.3\n"
"[cH0:1][c:2]!@;-[CX4H1:3][a:4] 1 0.9 1 1.2 1 0.6 1 0.4 1 0.0 1 0.1\n"
"[cH0:1][c:2]!@;-[CX4H1:3][CX4:4] 1 0.0 1 1.2 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]!@;-[CX4H1:3][CX3:4] 1 0.0 1 0.0 1 0.0 1 1.5 1 0.0 1 0.0\n"
"[cH0:1][c:2]!@;-[CX4H1:3][N,O,S:4] 1 0.0 1 0.0 1 0.0 1 2.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]!@;-[CX4H1:3][H:4] 1 0.0 -1 4.3 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[CX4H0:3][a:4] 1 0.0 -1 -0.3 -1 -0.1 1 0.1 1 0.0 -1 0.1\n"
"[a:1][c:2]!@;-[CX4H0:3][CX3:4] 1 0.0 1 0.0 1 0.0 1 1.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[CX4H0:3][CX4:4] 1 0.0 1 0.0 1 0.0 -1 0.5 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[CX4H0:3][N,O:4] 1 0.0 -1 0.8 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[CX4H2:3][a:4] 1 0.0 1 1.2 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[CX4H2:3][CX3:4] 1 0.0 1 1.2 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[n,o,s:1][c:2]!@;-[CX4H2:3][CX4:4] 1 0.0 1 0.0 1 0.0 -1 3.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[CX4H2:3][!#1:4] 1 0.0 1 3.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[CX4H1:3][N,O:4] 1 0.0 1 0.0 1 0.0 1 0.5 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[CX4H1:3][a:4] 1 0.0 1 0.6 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[CX4H1:3][H:4] 1 0.0 -1 0.7 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[nX2H0:1][c:2]!@;-[C:3](=[N:4])(-[NH1,NH2]) 1 0.0 -1 15.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[C:3](=[$([N][CX4]):4])([$(N[CX4])]) 1 0.0 -1 0.6 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[C:3](=[$([NH0][CX4]):4])(-N) 1 0.0 -1 15.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[C:3](=[$([N][!#1]):4])([$(N(C)[!#1])]) 1 0.0 -1 0.6 1 0.0 1 0.3 1 0.0 -1 -0.1\n"
"[a:1][c:2]!@;-[C:3](=[$([N][!#1]):4])([$(N(C)~[!#1])]) 1 0.0 -1 15.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[C:3](=[N:4])(-N) 1 0.0 -1 0.6 1 0.0 1 0.3 1 0.0 -1 -0.1\n"
"[O:1]=[C:2]([O-])!@;-[c:3][$(aC(=O)(O)):4] 1 0.0 -1 0.6 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]([O-])!@;-[c:3][nX3H1:4] 1 0.0 -1 30.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]([O-])!@;-[c:3][nX2H0:4] 1 0.0 -1 30.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]([O-])!@;-[c:3]([cH0])[cH0:4] 1 0.0 1 0.0 1 0.0 -1 3.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]([O-])!@;-[c:3]([cH1])[$([cH0][NH1,NH2]):4] 1 0.0 -1 30.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]([O-])!@;-[c:3]([cH1])[cH0:4] 1 0.0 -1 7.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]([O-])!@;-[c:3]([cH1])[cH1:4] 1 0.0 -1 7.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[O:1]=[C:2]([O-])!@;-[c:3][a:4] 1 0.0 -1 25.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$([c]([NH1,NH2])):1][c:2]!@;-[CX3:3]([!O])=[O:4] -1 14.8 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(a[OH1]):1][a:2]!@;-[CX3:3]([NX3H0,CX4H0,c])=[O:4] -1 14.8 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$(a[NH1,NH2]):1][a:2]!@;-[CX3:3]([NX3H0,CX4H0,c])=[O:4] -1 36.2 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH1])!@;-[CX3:3](c)=[O:4] 1 0.0 1 0.0 1 0.0 1 1.5 1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[CX3:3](c)=[O:4] -1 -0.1 -1 2.4 1 -0.4 -1 -1.0 1 0.1 -1 -0.5\n"
"[a:1][a:2]!@;-[CX3:3](a)=[O:4] -1 8.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$([cH0](=O)):1][c:2]([cH1])!@;-[CX3:3]([NX3H1,NX3H2])=[O:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[nH0&r6:1][c&r6:2]([cH1&r6])!@;-[C:3]([NH1,NH2])=[O:4] 1 20.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[s:1][c:2]!@;-[C:3]([NH1])=[O:4] 1 0.0 -1 36.8 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$([cH0]Cl):1][c:2]([cH1])!@;-[CX3:3]([NX3H1])=[O:4] 1 0.1 1 0.9 1 0.1 -1 -0.4 1 0.0 -1 0.3\n"
"[$([cH0]F):1][c:2]([cH1])!@;-[CX3:3]([NX3H1])=[O:4] 1 6.2 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$([cH0][OH0]):1][c:2]([cH1])!@;-[C:3](=O)[NH1:4] -1 60.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$([cH0][OH1]):1][c:2]([cH1])!@;-[C:3](=O)[NH1:4] 1 0.0 -1 15.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH1])!@;-[CX3:3]([NX3H1])=[O:4] 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0 -1 1.2\n"
"[cH0:1][c:2]([cH1])!@;-[CX3:3]([NX3H0])=[O:4] 1 0.0 1 5.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[C:3]([NH1,NH2])=[O:4] 1 0.0 -1 1.6 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][c:2]!@;-[C:3]([NH0])=[O:4] 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0 -1 1.2\n"
"[a:1][c:2]!@;-[C:3]([NH1,NH2])=[O:4] 1 0.0 -1 2.4 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[s:1][c:2]([aX2,cH1])!@;-[CX3:3](O)=[O:4] 1 0.0 -1 10.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[s:1][c:2]([aX2,cH1])!@;-[CX3:3]=[O:4] -1 60.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$([cH0](F)):1][c:2]([cH1])!@;-[CX3:3]([O,N])=[O:4] 1 0.0 -1 1.8 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$([cH0]F):1][c:2]([cH1])!@;-[CX3:3]=[O:4] 1 6.2 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$([cH0](Cl)):1][c:2]([cH1])!@;-[CX3:3]([CX3H])=[O:4] 1 0.0 1 0.0 1 0.0 1 2.0 1 0.0 1 0.0\n"
"[$([cH0](Cl)):1][c:2]([cH1])!@;-[CX3H:3]=[O:4] 1 6.2 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$([cH0](Cl)):1][c:2]([cH1])!@;-[CX3:3](O)=[O:4] 1 0.0 -1 1.8 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[nX3H1:1][a:2]!@;-[CX3:3]=[O:4] 1 0.0 -1 10.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[nX2H0:1][c:2]([cH1])!@;-[CX3H1:3]=[O:4] 1 66.5 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[nX2H0&r6:1][c&r6:2]([c&r6])!@;-[CX3:3]([!O])=[O:4] 1 6.2 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[nX2H0:1][a:2]([nX2H0])!@;-[CX3:3]=[O:4] 1 0.0 -1 36.8 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[$([cH0]!@;-[*^2]):1][c:2]([cH1])!@[CX3:3]=[O:4] 1 0.0 -1 8.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH1])!@;-[CX3:3]=[O:4] 1 0.0 -1 10.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[CX3:3]=[O:4] 1 0.0 1 0.0 1 0.0 -1 3.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[CX3:3]([CX3H0])=[O:4] 1 0.0 -1 5.9 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[CX3:3]=[O:4] 1 0.0 -1 5.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][a:2]!@;-[CX3:3]=[O:4] 1 0.0 -1 8.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([nX2])!@;-[CX3:3]=[NX3:4] 1 0.0 -1 8.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([nX3H1])!@;-[CX3:3]=[NX2:4] 1 97.4 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([nX2])!@;-[CX3:3]=[NX2:4] 1 0.0 -1 8.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([$([cH0][OH1])])!@;-[CX3:3]=[NX2:4] 1 100.0 1 0.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH0])!@;-[CX3x0:3]=[NX2:4] 1 0.0 -1 36.8 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH1:1][c:2]([cH1])!@;-[CX3:3]=[NX2:4] 1 0.0 -1 9.5 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[cH0:1][c:2]([cH0])!@;-[CX3!r:3]=[NX2!r:4] 1 0.0 1 -0.7 1 0.0 1 -0.5 1 0.0 1 -0.6\n"
"[a:1][c:2]!@;-[CX3:3]=[CX3H0:4] 1 0.0 -1 0.7 1 0.0 1 0.6 1 0.0 1 -0.5\n"
"[a:1][a:2]!@;-[CX3:3]=[CX3H2:4] 1 0.0 -1 5.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[a:1][a:2]!@;-[CX3:3]=[CX3H1:4] 1 0.0 -1 5.0 1 0.0 1 0.0 1 0.0 1 0.0\n"
"[*:1][SX2:2]!@;-[SX2:3][*:4] 1 0.0 1 12.9 1 0.0 1 0.0 1 0.0 1 0.0\n"
// ------
// these patterns were added as part of the ET-DG work
// non-aromatic double bonds
"[*:1][X3,X2:2]=[X3,X2:3][*:4] 1 0.0 -1 100.0 1 0.0 1 0.0 1 0.0 1 0.0\n";

View File

@@ -57,7 +57,7 @@ Mailing list discussion: <http://www.mail-archive.com/rdkit-discuss@lists.source
The code:
""" contribution from Andrew Dalke """
""" original contribution from Andrew Dalke """
import sys
from rdkit import Chem
from rdkit.Chem import AllChem
@@ -83,9 +83,7 @@ The code:
# The parameters (molecule and number of conformers) are passed via a Python
def generateconformations(m, n):
m = Chem.AddHs(m)
ids=AllChem.EmbedMultipleConfs(m, numConfs=n)
for id in ids:
AllChem.UFFOptimizeMolecule(m, confId=id)
ids=AllChem.EmbedMultipleConfs(m, numConfs=n, params=AllChem.ETKDG())
# EmbedMultipleConfs returns a Boost-wrapped type which
# cannot be pickled. Convert it to a Python list, which can.
return m, list(ids)