diff --git a/.gitignore b/.gitignore index cde11f848..8a7407566 100644 --- a/.gitignore +++ b/.gitignore @@ -45,18 +45,16 @@ __pycache__/ /Data/templates.mae +/External/**/*.tar.gz +/External/**/*.zip /External/catch/catch/ /External/CoordGen/coordgen/ /External/CoordGen/maeparser/ -/External/CoordGen/maeparser-v*.tar.gz -/External/CoordGen/coordgenlibs-v*.tar.gz /External/FreeSASA/freesasa-2.0.1/ -/External/FreeSASA/master.tar.gz -/External/INCHI-API/INCHI-1-SRC.zip /External/INCHI-API/INCHI-1-SRC/ /External/INCHI-API/src/ -/External/rapidjson-1.1.0.tar.gz /External/rapidjson-1.1.0/ +/External/RingFamilies/RingDecomposerLib/ /rdkit/RDPaths.py /rdkit/Chem/inchi.py diff --git a/Code/ChemicalFeatures/Wrap/testFeatures.py b/Code/ChemicalFeatures/Wrap/testFeatures.py index c58d8e850..12fc702ac 100644 --- a/Code/ChemicalFeatures/Wrap/testFeatures.py +++ b/Code/ChemicalFeatures/Wrap/testFeatures.py @@ -98,7 +98,7 @@ class TestCase(unittest.TestCase): # Test the new version also has the id and works as expected - # uncomment the following to generate (overrwrite) new version of pickled + # uncomment the following to generate (overwrite) new version of pickled # data file #pickle.dump(ffeat,file(os.path.join(RDConfig.RDBaseDir, 'Code/ChemicalFeatures/Wrap/testData/featv2.pkl'),'wb+')) inTF = open( diff --git a/Code/DataManip/MetricMatrixCalc/Wrap/testMatricCalc.py b/Code/DataManip/MetricMatrixCalc/Wrap/testMatricCalc.py index c7108df39..ea311e6ef 100755 --- a/Code/DataManip/MetricMatrixCalc/Wrap/testMatricCalc.py +++ b/Code/DataManip/MetricMatrixCalc/Wrap/testMatricCalc.py @@ -29,7 +29,7 @@ class TestCase(unittest.TestCase): for i in range(numpy.shape(dmat)[0]): assert feq(dmat[i], exp[i]) - # repeat with an flaot array + # repeat with an float array desc = numpy.zeros((3, 2), 'f') desc[1, 0] = 1.0 desc[2, 0] = 1.0 @@ -39,7 +39,7 @@ class TestCase(unittest.TestCase): for i in range(numpy.shape(dmat)[0]): assert feq(dmat[i], exp[i]) - # finally with an interger array + # finally with an integer array desc = numpy.zeros((3, 2), 'i') desc[1, 0] = 1 desc[2, 0] = 1 diff --git a/Code/DataManip/MetricMatrixCalc/testExecs/.cvskeep b/Code/DataManip/MetricMatrixCalc/testExecs/.cvskeep old mode 100755 new mode 100644 diff --git a/Code/Demos/RDKit/Basement/BinaryIO/Makefile b/Code/Demos/RDKit/Basement/BinaryIO/Makefile old mode 100755 new mode 100644 diff --git a/Code/Demos/RDKit/Basement/TemplEnum/Makefile b/Code/Demos/RDKit/Basement/TemplEnum/Makefile old mode 100755 new mode 100644 diff --git a/Code/Demos/RDKit/Basement/TemplEnum/Ts.1.sdf b/Code/Demos/RDKit/Basement/TemplEnum/Ts.1.sdf old mode 100755 new mode 100644 diff --git a/Code/Demos/RDKit/Basement/TemplEnum/Ts.sdf b/Code/Demos/RDKit/Basement/TemplEnum/Ts.sdf old mode 100755 new mode 100644 diff --git a/Code/Demos/RDKit/Basement/TemplEnum/box.1.mol b/Code/Demos/RDKit/Basement/TemplEnum/box.1.mol old mode 100755 new mode 100644 diff --git a/Code/Demos/RDKit/Basement/TemplEnum/box.1a.mol b/Code/Demos/RDKit/Basement/TemplEnum/box.1a.mol old mode 100755 new mode 100644 diff --git a/Code/Demos/RDKit/Basement/TemplEnum/box.mol b/Code/Demos/RDKit/Basement/TemplEnum/box.mol old mode 100755 new mode 100644 diff --git a/Code/Demos/RDKit/Basement/TemplEnum/esters.2.sdf b/Code/Demos/RDKit/Basement/TemplEnum/esters.2.sdf old mode 100755 new mode 100644 diff --git a/Code/Demos/RDKit/Basement/TemplEnum/esters.sdf b/Code/Demos/RDKit/Basement/TemplEnum/esters.sdf old mode 100755 new mode 100644 diff --git a/Code/Demos/RDKit/Basement/TemplEnum/template.1.mol b/Code/Demos/RDKit/Basement/TemplEnum/template.1.mol old mode 100755 new mode 100644 diff --git a/Code/Demos/RDKit/Basement/TemplEnum/template.2.mol b/Code/Demos/RDKit/Basement/TemplEnum/template.2.mol old mode 100755 new mode 100644 diff --git a/Code/Demos/RDKit/Basement/TemplEnum/template.mol b/Code/Demos/RDKit/Basement/TemplEnum/template.mol old mode 100755 new mode 100644 diff --git a/Code/Demos/boost/EBV_err/crossMod.dsw b/Code/Demos/boost/EBV_err/crossMod.dsw old mode 100755 new mode 100644 diff --git a/Code/Demos/boost/any_container/Makefile b/Code/Demos/boost/any_container/Makefile old mode 100755 new mode 100644 diff --git a/Code/Demos/boost/cross_mod_err/crossMod.dsw b/Code/Demos/boost/cross_mod_err/crossMod.dsw old mode 100755 new mode 100644 diff --git a/Code/Demos/boost/cross_module/readme.txt b/Code/Demos/boost/cross_module/readme.txt old mode 100755 new mode 100644 diff --git a/Code/Geometry/UniformGrid3D.cpp b/Code/Geometry/UniformGrid3D.cpp index f4c049acb..6b05d8a66 100644 --- a/Code/Geometry/UniformGrid3D.cpp +++ b/Code/Geometry/UniformGrid3D.cpp @@ -24,7 +24,7 @@ namespace RDGeom { unsigned int ci_GRIDPICKLE_VERSION = 0x1; UniformGrid3D::UniformGrid3D(const UniformGrid3D &other) : Grid3D(other) { - PRECONDITION(other.dp_storage, "cannot copy an unintialized grid"); + PRECONDITION(other.dp_storage, "cannot copy an uninitialized grid"); auto *data = new RDKit::DiscreteValueVect(*other.dp_storage); initGrid(other.d_numX * other.d_spacing, other.d_numY * other.d_spacing, other.d_numZ * other.d_spacing, other.d_spacing, @@ -33,7 +33,7 @@ UniformGrid3D::UniformGrid3D(const UniformGrid3D &other) : Grid3D(other) { UniformGrid3D &UniformGrid3D::operator=(const UniformGrid3D &other) { if (&other == this) return *this; - PRECONDITION(other.dp_storage, "cannot copy an unintialized grid"); + PRECONDITION(other.dp_storage, "cannot copy an uninitialized grid"); delete dp_storage; auto *data = new RDKit::DiscreteValueVect(*other.dp_storage); initGrid(other.d_numX * other.d_spacing, other.d_numY * other.d_spacing, @@ -274,8 +274,8 @@ void UniformGrid3D::setSphereOccupancy(const Point3D ¢er, double radius, } UniformGrid3D &UniformGrid3D::operator|=(const UniformGrid3D &other) { - PRECONDITION(dp_storage, "unintialized grid"); - PRECONDITION(other.dp_storage, "unintialized grid"); + PRECONDITION(dp_storage, "uninitialized grid"); + PRECONDITION(other.dp_storage, "uninitialized grid"); PRECONDITION(compareParams(other), "incompatible grids"); // EFF: we're probably doing too much copying here: @@ -287,8 +287,8 @@ UniformGrid3D &UniformGrid3D::operator|=(const UniformGrid3D &other) { } UniformGrid3D &UniformGrid3D::operator&=(const UniformGrid3D &other) { - PRECONDITION(dp_storage, "unintialized grid"); - PRECONDITION(other.dp_storage, "unintialized grid"); + PRECONDITION(dp_storage, "uninitialized grid"); + PRECONDITION(other.dp_storage, "uninitialized grid"); PRECONDITION(compareParams(other), "incompatible grids"); // EFF: we're probably doing too much copying here: @@ -300,8 +300,8 @@ UniformGrid3D &UniformGrid3D::operator&=(const UniformGrid3D &other) { } UniformGrid3D &UniformGrid3D::operator+=(const UniformGrid3D &other) { - PRECONDITION(dp_storage, "unintialized grid"); - PRECONDITION(other.dp_storage, "unintialized grid"); + PRECONDITION(dp_storage, "uninitialized grid"); + PRECONDITION(other.dp_storage, "uninitialized grid"); PRECONDITION(compareParams(other), "incompatible grids"); // EFF: we're probably doing too much copying here: @@ -310,8 +310,8 @@ UniformGrid3D &UniformGrid3D::operator+=(const UniformGrid3D &other) { } UniformGrid3D &UniformGrid3D::operator-=(const UniformGrid3D &other) { - PRECONDITION(dp_storage, "unintialized grid"); - PRECONDITION(other.dp_storage, "unintialized grid"); + PRECONDITION(dp_storage, "uninitialized grid"); + PRECONDITION(other.dp_storage, "uninitialized grid"); PRECONDITION(compareParams(other), "incompatible grids"); // EFF: we're probably doing too much copying here: diff --git a/Code/GraphMol/Aromaticity.cpp b/Code/GraphMol/Aromaticity.cpp index 0a3ca814c..a7f91a07c 100644 --- a/Code/GraphMol/Aromaticity.cpp +++ b/Code/GraphMol/Aromaticity.cpp @@ -367,7 +367,7 @@ void applyHuckelToFused( // check is we are done with all the atoms in the fused // system, if so quit. This is a fix for Issue252 REVIEW: is // this check sufficient or should we add an additional - // contraint on the the number of combinations of rings in a + // constraint on the number of combinations of rings in a // fused system that we will try. The number of combinations // can obviously be quite large when the number of rings in // the fused system is large diff --git a/Code/GraphMol/ChemReactions/ReactionParser.h b/Code/GraphMol/ChemReactions/ReactionParser.h index 1ee64b9d0..ca959321a 100644 --- a/Code/GraphMol/ChemReactions/ReactionParser.h +++ b/Code/GraphMol/ChemReactions/ReactionParser.h @@ -108,7 +108,7 @@ RDKIT_CHEMREACTIONS_EXPORT std::string ChemicalReactionToRxnSmiles( //! returns an RXN block for a reaction /*! \param rxn chemical reaction - \param separateAgents flag to decide if agents were put in a seperate block, + \param separateAgents flag to decide if agents were put in a separate block, otherwise they were included in the reactants block (default) */ diff --git a/Code/GraphMol/ChemReactions/Wrap/Enumerate.cpp b/Code/GraphMol/ChemReactions/Wrap/Enumerate.cpp index a9c5c2e46..f0194038d 100644 --- a/Code/GraphMol/ChemReactions/Wrap/Enumerate.cpp +++ b/Code/GraphMol/ChemReactions/Wrap/Enumerate.cpp @@ -229,7 +229,7 @@ Options:\n\ docString = \ "EnumerateLibrary\n\ This class allows easy enumeration of reactions. Simply provide a reaction\n\ -and a set of reagents and you are off the the races.\n\ +and a set of reagents and you are off the races.\n\ \n\ Note that this functionality should be considered beta and that the API may\n\ change in a future release.\n\ diff --git a/Code/GraphMol/ChemTransforms/ChemTransforms.cpp b/Code/GraphMol/ChemTransforms/ChemTransforms.cpp index 2d6b1b2f8..99b1bf9c8 100644 --- a/Code/GraphMol/ChemTransforms/ChemTransforms.cpp +++ b/Code/GraphMol/ChemTransforms/ChemTransforms.cpp @@ -227,7 +227,7 @@ std::vector replaceSubstructs( } // clear conformers and computed props and do basic updates - // on the the resulting molecules, but allow unhappiness: + // on the resulting molecules, but allow unhappiness: for (auto &re : res) { updateSubMolConfs(mol, *(RWMol *)re.get(), removedAtoms); re->clearComputedProps(true); diff --git a/Code/GraphMol/Depictor/DepictUtils.h b/Code/GraphMol/Depictor/DepictUtils.h index 6744c444e..91c621fd1 100644 --- a/Code/GraphMol/Depictor/DepictUtils.h +++ b/Code/GraphMol/Depictor/DepictUtils.h @@ -122,7 +122,7 @@ RDKIT_DEPICTOR_EXPORT RDGeom::Point2D reflectPoint(const RDGeom::Point2D &point, --D-- | - In this case the the number substituent of A, B, C, D are 3, 1, 1, + In this case the number substituent of A, B, C, D are 3, 1, 1, 4 respectively so want to A and D to go opposite sides and so that we draw
@@ -150,7 +150,7 @@ RDKIT_DEPICTOR_EXPORT RDKit::INT_VECT setNbrOrder(unsigned int aid,
   in common with the rings that are already embedded.
 
   \param doneRings    a vertor of ring IDs that have been embedded already
-  \param fusedRings   list of all the rings in the the fused system
+  \param fusedRings   list of all the rings in the fused system
   \param nextId       this is where the ID for the next ring is written
 
   \return list of atom ids that are common
diff --git a/Code/GraphMol/Depictor/EmbeddedFrag.cpp b/Code/GraphMol/Depictor/EmbeddedFrag.cpp
index 19c74d32b..80b1c8a84 100644
--- a/Code/GraphMol/Depictor/EmbeddedFrag.cpp
+++ b/Code/GraphMol/Depictor/EmbeddedFrag.cpp
@@ -666,7 +666,7 @@ void EmbeddedFrag::mergeRing(const EmbeddedFrag &embRing, unsigned int nCommon,
     } else {
       // update the neighbor only on atoms that were used to compute the
       // transform to merge the
-      // and only if the the two are the only common atoms
+      // and only if the two are the only common atoms
       // i.e. we are doing bridged systems we will leave the nbrs untouched
       if (nCommon <= 2) {
         if (std::find(pinAtoms.begin(), pinAtoms.end(), aid) !=
@@ -690,7 +690,7 @@ void EmbeddedFrag::mergeRing(const EmbeddedFrag &embRing, unsigned int nCommon,
 void EmbeddedFrag::addNonRingAtom(unsigned int aid, unsigned int toAid) {
   // const RDKit::ROMol *mol) {
   PRECONDITION(dp_mol, "");
-  // check that aid does not belong the the embedded fragment yet
+  // check that aid does not belong the embedded fragment yet
   PRECONDITION(d_eatoms.find(aid) == d_eatoms.end(), "");
   // and that toAid is already in the embedded system
   PRECONDITION(d_eatoms.find(toAid) != d_eatoms.end(), "");
diff --git a/Code/GraphMol/Depictor/EmbeddedFrag.h b/Code/GraphMol/Depictor/EmbeddedFrag.h
index fd69b9130..ba0710469 100644
--- a/Code/GraphMol/Depictor/EmbeddedFrag.h
+++ b/Code/GraphMol/Depictor/EmbeddedFrag.h
@@ -484,7 +484,7 @@ class RDKIT_DEPICTOR_EXPORT EmbeddedFrag {
   /*
     Add an atom to this embedded fragment when the fragment already
     has a atleast two previously added neighbors to 'toAid'. In this
-    case we have to choose where the the new neighbor goes based on
+    case we have to choose where the new neighbor goes based on
     the angle that is already taken around the atom.
 
     ARGUMENTS:
diff --git a/Code/GraphMol/Depictor/RDDepictor.h b/Code/GraphMol/Depictor/RDDepictor.h
index 4f84831ef..8c169aa77 100644
--- a/Code/GraphMol/Depictor/RDDepictor.h
+++ b/Code/GraphMol/Depictor/RDDepictor.h
@@ -106,7 +106,7 @@ RDKIT_DEPICTOR_EXPORT unsigned int compute2DCoords(
   mol before adding a conformation
 
   \param weightDistMat - A value between 0.0 and 1.0, this
-  determines the importance of mimicing the the inter atoms
+  determines the importance of mimicing the inter atoms
   distances in dmat. (1.0 - weightDistMat) is the weight associated
   to spreading out the structure (density) in the cost function
 
diff --git a/Code/GraphMol/Depictor/testExecs/.cvskeep b/Code/GraphMol/Depictor/testExecs/.cvskeep
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Depictor/test_data/7UPJ_default.mol b/Code/GraphMol/Depictor/test_data/7UPJ_default.mol
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Depictor/test_data/7UPJ_mimic3D_1.mol b/Code/GraphMol/Depictor/test_data/7UPJ_mimic3D_1.mol
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Depictor/test_data/7UPJ_mimic3D_2.mol b/Code/GraphMol/Depictor/test_data/7UPJ_mimic3D_2.mol
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Depictor/test_data/7UPJ_spread.mol b/Code/GraphMol/Depictor/test_data/7UPJ_spread.mol
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Depictor/test_data/7UPJ_xtal.mol b/Code/GraphMol/Depictor/test_data/7UPJ_xtal.mol
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Depictor/test_data/first_200.tpsa.csv b/Code/GraphMol/Depictor/test_data/first_200.tpsa.csv
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Descriptors/PMI.h b/Code/GraphMol/Descriptors/PMI.h
index 59c568dbf..dd58e3834 100644
--- a/Code/GraphMol/Descriptors/PMI.h
+++ b/Code/GraphMol/Descriptors/PMI.h
@@ -18,14 +18,14 @@ class ROMol;
 namespace Descriptors {
 //! Normalized principal moments ratio 1 (=I1/I3)
 //!  from Sauer and Schwarz JCIM 43:987-1003 (2003)
-//!  https://dx.doi.org/10.1021/ci025599w
+//!  https://doi.org/10.1021/ci025599w
 RDKIT_DESCRIPTORS_EXPORT double NPR1(const ROMol&, int confId = -1,
                                      bool useAtomicMasses = true,
                                      bool force = false);
 const std::string NPR1Version = "1.0.0";
 //! Normalized principal moments ratio 2 (=I2/I3)
 //!  from Sauer and Schwarz JCIM 43:987-1003 (2003)
-//!  https://dx.doi.org/10.1021/ci025599w
+//!  https://doi.org/10.1021/ci025599w
 RDKIT_DESCRIPTORS_EXPORT double NPR2(const ROMol&, int confId = -1,
                                      bool useAtomicMasses = true,
                                      bool force = false);
@@ -51,7 +51,7 @@ const std::string PMI3Version = "1.0.0";
  Radius of gyration
    from G. A. Arteca "Molecular Shape Descriptors"
    Reviews in Computational Chemistry vol 9
-   http://dx.doi.org/10.1002/9780470125861.ch5
+   https://doi.org/10.1002/9780470125861.ch5
 
  Definition (eq: A4):
     sqrt(t_1 + t_2 + t_3) where t_i is the ith moment from the gyration matrix
@@ -64,7 +64,7 @@ const std::string radiusOfGyrationVersion = "1.0.0";
  Inertial shape factor
    from Todeschini and Consoni "Descriptors from Molecular Geometry"
    Handbook of Chemoinformatics
-   http://dx.doi.org/10.1002/9783527618279.ch37
+   https://doi.org/10.1002/9783527618279.ch37
 
  Definition:
    pm2 / (pm1*pm3)
@@ -78,7 +78,7 @@ const std::string inertialShapeFactorVersion = "1.0.0";
  Molecular eccentricity
    from G. A. Arteca "Molecular Shape Descriptors"
    Reviews in Computational Chemistry vol 9
-   http://dx.doi.org/10.1002/9780470125861.ch5
+   https://doi.org/10.1002/9780470125861.ch5
 
  Definition (eq 4):
  sqrt(pm_3**2 -pm_1**2) / pm_3**2  where pm_i is the ith moment of inertia
@@ -91,7 +91,7 @@ const std::string eccentricityVersion = "1.0.0";
  molecular asphericity
    from A. Baumgaertner, "Shapes of flexible vesicles"
    J. Chem. Phys. 98:7496 (1993)
-   http://dx.doi.org/10.1063/1.464689
+   https://doi.org/10.1063/1.464689
 
    Definition (eq 11):
    0.5 * ((t_3-t_2)**2 + (t_3-t_1)**2 + (t_2-t_1)**2)/(t_1+t_2+t_3)**2
@@ -113,7 +113,7 @@ const std::string asphericityVersion = "1.0.0";
  Spherocity index
    from Todeschini and Consoni "Descriptors from Molecular Geometry"
    Handbook of Chemoinformatics
-   http://dx.doi.org/10.1002/9783527618279.ch37
+   https://doi.org/10.1002/9783527618279.ch37
 
  Definition:
  3 * t_1 / (t_1+t_2+t_3)
diff --git a/Code/GraphMol/Descriptors/Wrap/rdMolDescriptors.cpp b/Code/GraphMol/Descriptors/Wrap/rdMolDescriptors.cpp
index 58d51a2bf..bf8a37076 100644
--- a/Code/GraphMol/Descriptors/Wrap/rdMolDescriptors.cpp
+++ b/Code/GraphMol/Descriptors/Wrap/rdMolDescriptors.cpp
@@ -1576,7 +1576,7 @@ BOOST_PYTHON_MODULE(rdMolDescriptors) {
   python::scope().attr("_CalcPBF_version") = RDKit::Descriptors::PBFVersion;
   docString =
       "Returns the PBF (plane of best fit) descriptor "
-      "(http://dx.doi.org/10.1021/ci300293f)";
+      "(https://doi.org/10.1021/ci300293f)";
   python::def("CalcPBF", RDKit::Descriptors::PBF,
               (python::arg("mol"), python::arg("confId") = -1),
               docString.c_str());
diff --git a/Code/GraphMol/FileParsers/Mol2FileParser.cpp b/Code/GraphMol/FileParsers/Mol2FileParser.cpp
index d121eea65..73771a134 100644
--- a/Code/GraphMol/FileParsers/Mol2FileParser.cpp
+++ b/Code/GraphMol/FileParsers/Mol2FileParser.cpp
@@ -324,7 +324,7 @@ bool cleanUpMol2Substructures(RWMol *res) {
         // this should return only the bond between C.2 and O.co2
         Bond *b = res->getBondBetweenAtoms(idx, *nbrIdxIt);
         if (!isFixed[*nbrIdxIt]) {
-          // the first occurence is negatively charged and has a single bond
+          // the first occurrence is negatively charged and has a single bond
           b->setBondType(Bond::SINGLE);
           b->setIsAromatic(false);
           at->setFormalCharge(-1);
@@ -333,7 +333,7 @@ bool cleanUpMol2Substructures(RWMol *res) {
           isFixed[idx] = 1;
           isFixed[*nbrIdxIt] = 1;
         } else {
-          // the other occurences are not charged and have a double bond
+          // the other occurrences are not charged and have a double bond
           b->setBondType(Bond::DOUBLE);
           b->setIsAromatic(false);
           at->setIsAromatic(false);
diff --git a/Code/GraphMol/FileParsers/MolSGroupParsing.cpp b/Code/GraphMol/FileParsers/MolSGroupParsing.cpp
index c09ad1974..a80263a82 100644
--- a/Code/GraphMol/FileParsers/MolSGroupParsing.cpp
+++ b/Code/GraphMol/FileParsers/MolSGroupParsing.cpp
@@ -446,7 +446,7 @@ void ParseSGroupV2000SCDSEDLine(IDX_TO_SGROUP_MAP &sGroupMap,
 
   if (lastDataSGroup != 0 && lastDataSGroup != sgIdx) {
     std::ostringstream errout;
-    errout << "Found a Data Field not matching the the SGroup of the last Data "
+    errout << "Found a Data Field not matching the SGroup of the last Data "
               "Field at line "
            << line;
     throw FileParseException(errout.str());
diff --git a/Code/GraphMol/FileParsers/ProximityBonds.cpp b/Code/GraphMol/FileParsers/ProximityBonds.cpp
index 6f3b1b2c9..e4e70f339 100644
--- a/Code/GraphMol/FileParsers/ProximityBonds.cpp
+++ b/Code/GraphMol/FileParsers/ProximityBonds.cpp
@@ -1,393 +1,393 @@
-//
-//  Copyright (C) 2013-2017 Greg Landrum and NextMove Software
-//
-//   @@ All Rights Reserved @@
-//  This file is part of the RDKit.
-//  The contents are covered by the terms of the BSD license
-//  which is included in the file license.txt, found at the root
-//  of the RDKit source tree.
-//
-#include "ProximityBonds.h"
-#include 
-#include 
-#include 
-#include 
-
-namespace RDKit {
-
-static const double EXTDIST = 0.45;
-// static const double MAXRAD   = 2.50;
-// static const double MINDIST  = 0.40;
-static const double MAXDIST = 5.45;      // 2*MAXRAD + EXTDIST
-static const double MINDIST2 = 0.16;     // MINDIST*MINDIST
-static const double MAXDIST2 = 29.7025;  // MAXDIST*MAXDIST
-
-struct ProximityEntry {
-  float x, y, z, r;
-  int atm, hash, next, elem;
-
-  bool operator<(const ProximityEntry &p) const { return x < p.x; }
-};
-
-static bool IsBonded(ProximityEntry *p, ProximityEntry *q, unsigned int flags) {
-  if (flags & ctdIGNORE_H_H_CONTACTS && p->elem == 1 && q->elem == 1)
-    return false;
-  double dx = (double)p->x - (double)q->x;
-  double dist2 = dx * dx;
-  if (dist2 > MAXDIST2) return false;
-  double dy = (double)p->y - (double)q->y;
-  dist2 += dy * dy;
-  if (dist2 > MAXDIST2) return false;
-  double dz = (double)p->z - (double)q->z;
-  dist2 += dz * dz;
-
-  if (dist2 > MAXDIST2 || dist2 < MINDIST2) return false;
-
-  double radius = (double)p->r + (double)q->r + EXTDIST;
-  return dist2 <= radius * radius;
-}
-
-bool SamePDBResidue(AtomPDBResidueInfo *p, AtomPDBResidueInfo *q) {
-  return p->getResidueNumber() == q->getResidueNumber() &&
-         p->getResidueName() == q->getResidueName() &&
-         p->getChainId() == q->getChainId() &&
-         p->getInsertionCode() == q->getInsertionCode();
-}
-
-static bool IsBlacklistedAtom(Atom *atom) {
-  // blacklist metals, noble gasses and halogens
-  int elem = atom->getAtomicNum();
-  // make an inverse query (non-metals and metaloids)
-  if ((5 <= elem && elem <= 8) || (14 <= elem && elem <= 16) ||
-      (32 <= elem && elem <= 34) || (51 <= elem && elem <= 52))
-    return false;
-  else
-    return true;
-}
-
-bool IsBlacklistedPair(Atom *beg_atom, Atom *end_atom) {
-  PRECONDITION(beg_atom, "empty atom");
-  PRECONDITION(end_atom, "empty atom");
-
-  AtomPDBResidueInfo *beg_info =
-      (AtomPDBResidueInfo *)beg_atom->getMonomerInfo();
-  AtomPDBResidueInfo *end_info =
-      (AtomPDBResidueInfo *)end_atom->getMonomerInfo();
-  if (!beg_info || beg_info->getMonomerType() != AtomMonomerInfo::PDBRESIDUE)
-    return false;
-  if (!end_info || end_info->getMonomerType() != AtomMonomerInfo::PDBRESIDUE)
-    return false;
-
-  if (!SamePDBResidue(beg_info, end_info)) {
-    if (IsBlacklistedAtom(beg_atom) || IsBlacklistedAtom(end_atom)) return true;
-    // Dont make bonds to waters
-    if (beg_info->getResidueName() == "HOH" ||
-        end_info->getResidueName() == "HOH")
-      return true;
-  }
-  return false;
-}
-
-/*
-static void ConnectTheDots_Small(RWMol *mol)
-{
-unsigned int count = mol->getNumAtoms();
-ProximityEntry *tmp = (ProximityEntry*)malloc(count*sizeof(ProximityEntry));
-PeriodicTable *table = PeriodicTable::getTable();
-Conformer *conf = &mol->getConformer();
-for (unsigned int i=0; igetAtomWithIdx(i);
-  unsigned int elem = atom->getAtomicNum();
-  RDGeom::Point3D p = conf->getAtomPos(i);
-  ProximityEntry *tmpi = tmp+i;
-  tmpi->x = (float)p.x;
-  tmpi->y = (float)p.y;
-  tmpi->z = (float)p.z;
-  tmpi->r = (float)table->getRcovalent(elem);
-  for (unsigned int j=0; jgetBondBetweenAtoms(i,j))
-      mol->addBond(i,j,Bond::SINGLE);
-  }
-}
-free(tmp);
-}
-
-
-static void ConnectTheDots_Medium(RWMol *mol)
-{
-int count = mol->getNumAtoms();
-std::vector tmp(count);
-PeriodicTable *table = PeriodicTable::getTable();
-Conformer *conf = &mol->getConformer();
-for (int i=0; igetAtomWithIdx(i);
-  unsigned int elem = atom->getAtomicNum();
-  RDGeom::Point3D p = conf->getAtomPos(i);
-  ProximityEntry *tmpi = &tmp[i];
-  tmpi->x = (float)p.x;
-  tmpi->y = (float)p.y;
-  tmpi->z = (float)p.z;
-  tmpi->r = (float)table->getRcovalent(elem);
-  tmpi->atm = i;
-}
-
-std::stable_sort(tmp.begin(),tmp.end());
-
-for (int j=0; jx - MAXDIST;
-  for (int k=j-1; k>=0; k--) {
-    ProximityEntry *tmpk = &tmp[k];
-    if (tmpk->x < limit)
-      break;
-    if (IsBonded(tmpj,tmpk) &&
-        !mol->getBondBetweenAtoms(tmpj->atm,tmpk->atm))
-      mol->addBond(tmpj->atm,tmpk->atm,Bond::SINGLE);
-  }
-}
-}
-*/
-
-#define HASHSIZE 1024
-#define HASHMASK 1023
-#define HASHX 571
-#define HASHY 127
-#define HASHZ 3
-
-static void ConnectTheDots_Large(RWMol *mol, unsigned int flags) {
-  int HashTable[HASHSIZE];
-  memset(HashTable, -1, sizeof(HashTable));
-
-  unsigned int count = mol->getNumAtoms();
-  ProximityEntry *tmp =
-      (ProximityEntry *)malloc(count * sizeof(ProximityEntry));
-      CHECK_INVARIANT(tmp,"bad allocation");
-  PeriodicTable *table = PeriodicTable::getTable();
-  Conformer *conf = &mol->getConformer();
-
-  for (unsigned int i = 0; i < count; i++) {
-    Atom *atom = mol->getAtomWithIdx(i);
-    unsigned int elem = atom->getAtomicNum();
-    RDGeom::Point3D p = conf->getAtomPos(i);
-    ProximityEntry *tmpi = tmp + i;
-    tmpi->x = (float)p.x;
-    tmpi->y = (float)p.y;
-    tmpi->z = (float)p.z;
-    tmpi->r = (float)table->getRcovalent(elem);
-    tmpi->atm = i;
-    tmpi->elem = elem;
-
-    int hash = HASHX * (int)(p.x / MAXDIST) + HASHY * (int)(p.y / MAXDIST) +
-               HASHZ * (int)(p.z / MAXDIST);
-
-    for (int dx = -HASHX; dx <= HASHX; dx += HASHX)
-      for (int dy = -HASHY; dy <= HASHY; dy += HASHY)
-        for (int dz = -HASHZ; dz <= HASHZ; dz += HASHZ) {
-          int probe = hash + dx + dy + dz;
-          int list = HashTable[probe & HASHMASK];
-          while (list != -1) {
-            ProximityEntry *tmpj = &tmp[list];
-            if (tmpj->hash == probe && IsBonded(tmpi, tmpj, flags) &&
-                !mol->getBondBetweenAtoms(tmpi->atm, tmpj->atm) &&
-                !IsBlacklistedPair(atom, mol->getAtomWithIdx(tmpj->atm)))
-              mol->addBond(tmpi->atm, tmpj->atm, Bond::SINGLE);
-            list = tmpj->next;
-          }
-        }
-    int list = hash & HASHMASK;
-    tmpi->next = HashTable[list];
-    HashTable[list] = i;
-    tmpi->hash = hash;
-  }
-  // Cleanup pass
-  for (unsigned int i = 0; i < count; i++) {
-    Atom *atom = mol->getAtomWithIdx(i);
-    unsigned int elem = atom->getAtomicNum();
-    // detect multivalent Hs, which could happen with ConnectTheDots
-    if (elem == 1 && atom->getDegree() > 1) {
-      AtomPDBResidueInfo *atom_info =
-          (AtomPDBResidueInfo *)(atom->getMonomerInfo());
-      // cut all but shortest Bond
-      RDGeom::Point3D p = conf->getAtomPos(i);
-      RDKit::RWMol::ADJ_ITER nbr, end_nbr;
-      boost::tie(nbr, end_nbr) = mol->getAtomNeighbors(atom);
-      float best = 10000;
-      unsigned int best_idx = mol->getNumAtoms() + 1;
-      while (nbr != end_nbr) {
-        RDGeom::Point3D pn = conf->getAtomPos(*nbr);
-        float d = (p - pn).length();
-        AtomPDBResidueInfo *n_info =
-            (AtomPDBResidueInfo *)(mol->getAtomWithIdx(*nbr)->getMonomerInfo());
-        if (d < best &&
-            atom_info->getResidueNumber() == n_info->getResidueNumber()) {
-          best = d;
-          best_idx = *nbr;
-        }
-        ++nbr;
-      }
-      // iterate again and remove all but closest
-      boost::tie(nbr, end_nbr) = mol->getAtomNeighbors(atom);
-      while (nbr != end_nbr) {
-        if (*nbr == best_idx) {
-          Bond *bond = mol->getBondBetweenAtoms(i, *nbr);
-          bond->setBondType(Bond::SINGLE);  // make sure this one is single
-        } else {
-          mol->removeBond(i, *nbr);
-        }
-        ++nbr;
-      }
-    }
-  }
-  free(tmp);
-}
-
-void ConnectTheDots(RWMol *mol, unsigned int flags) {
-  if (!mol || !mol->getNumConformers()) return;
-  // Determine optimal algorithm to use by getNumAtoms()?
-  ConnectTheDots_Large(mol, flags);
-}
-
-// These are macros to allow their use in C++ constants
-#define BCNAM(A, B, C) (((A) << 16) | ((B) << 8) | (C))
-#define BCATM(A, B, C, D) (((A) << 24) | ((B) << 16) | ((C) << 8) | (D))
-
-static bool StandardPDBDoubleBond(unsigned int rescode, unsigned int atm1,
-                                  unsigned int atm2) {
-  if (atm1 > atm2) {
-    unsigned int tmp = atm1;
-    atm1 = atm2;
-    atm2 = tmp;
-  }
-
-  switch (rescode) {
-    case BCNAM('A', 'L', 'A'):
-    case BCNAM('C', 'Y', 'S'):
-    case BCNAM('G', 'L', 'Y'):
-    case BCNAM('I', 'L', 'E'):
-    case BCNAM('L', 'E', 'U'):
-    case BCNAM('L', 'Y', 'S'):
-    case BCNAM('M', 'E', 'T'):
-    case BCNAM('P', 'R', 'O'):
-    case BCNAM('S', 'E', 'R'):
-    case BCNAM('T', 'H', 'R'):
-    case BCNAM('V', 'A', 'L'):
-      if (atm1 == BCATM(' ', 'C', ' ', ' ') &&
-          atm2 == BCATM(' ', 'O', ' ', ' '))
-        return true;
-      break;
-    case BCNAM('A', 'R', 'G'):
-      if (atm1 == BCATM(' ', 'C', ' ', ' ') &&
-          atm2 == BCATM(' ', 'O', ' ', ' '))
-        return true;
-      if (atm1 == BCATM(' ', 'C', 'Z', ' ') &&
-          atm2 == BCATM(' ', 'N', 'H', '2'))
-        return true;
-      break;
-    case BCNAM('A', 'S', 'N'):
-    case BCNAM('A', 'S', 'P'):
-      if (atm1 == BCATM(' ', 'C', ' ', ' ') &&
-          atm2 == BCATM(' ', 'O', ' ', ' '))
-        return true;
-      if (atm1 == BCATM(' ', 'C', 'G', ' ') &&
-          atm2 == BCATM(' ', 'O', 'D', '1'))
-        return true;
-      break;
-    case BCNAM('G', 'L', 'N'):
-    case BCNAM('G', 'L', 'U'):
-      if (atm1 == BCATM(' ', 'C', ' ', ' ') &&
-          atm2 == BCATM(' ', 'O', ' ', ' '))
-        return true;
-      if (atm1 == BCATM(' ', 'C', 'D', ' ') &&
-          atm2 == BCATM(' ', 'O', 'E', '1'))
-        return true;
-      break;
-    case BCNAM('H', 'I', 'S'):
-      if (atm1 == BCATM(' ', 'C', ' ', ' ') &&
-          atm2 == BCATM(' ', 'O', ' ', ' '))
-        return true;
-      if (atm1 == BCATM(' ', 'C', 'D', '2') &&
-          atm2 == BCATM(' ', 'C', 'G', ' '))
-        return true;
-      if (atm1 == BCATM(' ', 'C', 'E', '1') &&
-          atm2 == BCATM(' ', 'N', 'D', '1'))
-        return true;
-      break;
-    case BCNAM('P', 'H', 'E'):
-    case BCNAM('T', 'Y', 'R'):
-      if (atm1 == BCATM(' ', 'C', ' ', ' ') &&
-          atm2 == BCATM(' ', 'O', ' ', ' '))
-        return true;
-      if (atm1 == BCATM(' ', 'C', 'D', '1') &&
-          atm2 == BCATM(' ', 'C', 'G', ' '))
-        return true;
-      if (atm1 == BCATM(' ', 'C', 'D', '2') &&
-          atm2 == BCATM(' ', 'C', 'E', '2'))
-        return true;
-      if (atm1 == BCATM(' ', 'C', 'E', '1') &&
-          atm2 == BCATM(' ', 'C', 'Z', ' '))
-        return true;
-      break;
-    case BCNAM('T', 'R', 'P'):
-      if (atm1 == BCATM(' ', 'C', ' ', ' ') &&
-          atm2 == BCATM(' ', 'O', ' ', ' '))
-        return true;
-      if (atm1 == BCATM(' ', 'C', 'D', '1') &&
-          atm2 == BCATM(' ', 'C', 'G', ' '))
-        return true;
-      if (atm1 == BCATM(' ', 'C', 'D', '2') &&
-          atm2 == BCATM(' ', 'C', 'E', '2'))
-        return true;
-      if (atm1 == BCATM(' ', 'C', 'E', '3') &&
-          atm2 == BCATM(' ', 'C', 'Z', '3'))
-        return true;
-      if (atm1 == BCATM(' ', 'C', 'H', '2') &&
-          atm2 == BCATM(' ', 'C', 'Z', '2'))
-        return true;
-      break;
-  }
-  return false;
-}
-
-static bool StandardPDBDoubleBond(RWMol *mol, Atom *beg, Atom *end) {
-  AtomPDBResidueInfo *bInfo = (AtomPDBResidueInfo *)beg->getMonomerInfo();
-  if (!bInfo || bInfo->getMonomerType() != AtomMonomerInfo::PDBRESIDUE)
-    return false;
-  AtomPDBResidueInfo *eInfo = (AtomPDBResidueInfo *)end->getMonomerInfo();
-  if (!eInfo || eInfo->getMonomerType() != AtomMonomerInfo::PDBRESIDUE)
-    return false;
-  if (!SamePDBResidue(bInfo, eInfo)) return false;
-  if (bInfo->getIsHeteroAtom() || eInfo->getIsHeteroAtom()) return false;
-
-  const char *ptr = bInfo->getResidueName().c_str();
-  unsigned int rescode = BCNAM(ptr[0], ptr[1], ptr[2]);
-  ptr = bInfo->getName().c_str();
-  unsigned int atm1 = BCATM(ptr[0], ptr[1], ptr[2], ptr[3]);
-  ptr = eInfo->getName().c_str();
-  unsigned int atm2 = BCATM(ptr[0], ptr[1], ptr[2], ptr[3]);
-
-  if (!StandardPDBDoubleBond(rescode, atm1, atm2)) return false;
-
-  // Check that neither end already has a double bond
-  ROMol::OBOND_ITER_PAIR bp;
-  for (bp = mol->getAtomBonds(beg); bp.first != bp.second; ++bp.first)
-    if ((*mol)[*bp.first]->getBondType() == Bond::DOUBLE) return false;
-  for (bp = mol->getAtomBonds(end); bp.first != bp.second; ++bp.first)
-    if ((*mol)[*bp.first]->getBondType() == Bond::DOUBLE) return false;
-
-  return true;
-}
-
-void StandardPDBResidueBondOrders(RWMol *mol) {
-  RWMol::BondIterator bondIt;
-  for (bondIt = mol->beginBonds(); bondIt != mol->endBonds(); ++bondIt) {
-    Bond *bond = *bondIt;
-    if (bond->getBondType() == Bond::SINGLE) {
-      Atom *beg = bond->getBeginAtom();
-      Atom *end = bond->getEndAtom();
-      if (StandardPDBDoubleBond(mol, beg, end)) bond->setBondType(Bond::DOUBLE);
-    }
-  }
-}
-
-}  // namespace RDKit
+//
+//  Copyright (C) 2013-2017 Greg Landrum and NextMove Software
+//
+//   @@ All Rights Reserved @@
+//  This file is part of the RDKit.
+//  The contents are covered by the terms of the BSD license
+//  which is included in the file license.txt, found at the root
+//  of the RDKit source tree.
+//
+#include "ProximityBonds.h"
+#include 
+#include 
+#include 
+#include 
+
+namespace RDKit {
+
+static const double EXTDIST = 0.45;
+// static const double MAXRAD   = 2.50;
+// static const double MINDIST  = 0.40;
+static const double MAXDIST = 5.45;      // 2*MAXRAD + EXTDIST
+static const double MINDIST2 = 0.16;     // MINDIST*MINDIST
+static const double MAXDIST2 = 29.7025;  // MAXDIST*MAXDIST
+
+struct ProximityEntry {
+  float x, y, z, r;
+  int atm, hash, next, elem;
+
+  bool operator<(const ProximityEntry &p) const { return x < p.x; }
+};
+
+static bool IsBonded(ProximityEntry *p, ProximityEntry *q, unsigned int flags) {
+  if (flags & ctdIGNORE_H_H_CONTACTS && p->elem == 1 && q->elem == 1)
+    return false;
+  double dx = (double)p->x - (double)q->x;
+  double dist2 = dx * dx;
+  if (dist2 > MAXDIST2) return false;
+  double dy = (double)p->y - (double)q->y;
+  dist2 += dy * dy;
+  if (dist2 > MAXDIST2) return false;
+  double dz = (double)p->z - (double)q->z;
+  dist2 += dz * dz;
+
+  if (dist2 > MAXDIST2 || dist2 < MINDIST2) return false;
+
+  double radius = (double)p->r + (double)q->r + EXTDIST;
+  return dist2 <= radius * radius;
+}
+
+bool SamePDBResidue(AtomPDBResidueInfo *p, AtomPDBResidueInfo *q) {
+  return p->getResidueNumber() == q->getResidueNumber() &&
+         p->getResidueName() == q->getResidueName() &&
+         p->getChainId() == q->getChainId() &&
+         p->getInsertionCode() == q->getInsertionCode();
+}
+
+static bool IsBlacklistedAtom(Atom *atom) {
+  // blacklist metals, noble gasses and halogens
+  int elem = atom->getAtomicNum();
+  // make an inverse query (non-metals and metaloids)
+  if ((5 <= elem && elem <= 8) || (14 <= elem && elem <= 16) ||
+      (32 <= elem && elem <= 34) || (51 <= elem && elem <= 52))
+    return false;
+  else
+    return true;
+}
+
+bool IsBlacklistedPair(Atom *beg_atom, Atom *end_atom) {
+  PRECONDITION(beg_atom, "empty atom");
+  PRECONDITION(end_atom, "empty atom");
+
+  AtomPDBResidueInfo *beg_info =
+      (AtomPDBResidueInfo *)beg_atom->getMonomerInfo();
+  AtomPDBResidueInfo *end_info =
+      (AtomPDBResidueInfo *)end_atom->getMonomerInfo();
+  if (!beg_info || beg_info->getMonomerType() != AtomMonomerInfo::PDBRESIDUE)
+    return false;
+  if (!end_info || end_info->getMonomerType() != AtomMonomerInfo::PDBRESIDUE)
+    return false;
+
+  if (!SamePDBResidue(beg_info, end_info)) {
+    if (IsBlacklistedAtom(beg_atom) || IsBlacklistedAtom(end_atom)) return true;
+    // Dont make bonds to waters
+    if (beg_info->getResidueName() == "HOH" ||
+        end_info->getResidueName() == "HOH")
+      return true;
+  }
+  return false;
+}
+
+/*
+static void ConnectTheDots_Small(RWMol *mol)
+{
+unsigned int count = mol->getNumAtoms();
+ProximityEntry *tmp = (ProximityEntry*)malloc(count*sizeof(ProximityEntry));
+PeriodicTable *table = PeriodicTable::getTable();
+Conformer *conf = &mol->getConformer();
+for (unsigned int i=0; igetAtomWithIdx(i);
+  unsigned int elem = atom->getAtomicNum();
+  RDGeom::Point3D p = conf->getAtomPos(i);
+  ProximityEntry *tmpi = tmp+i;
+  tmpi->x = (float)p.x;
+  tmpi->y = (float)p.y;
+  tmpi->z = (float)p.z;
+  tmpi->r = (float)table->getRcovalent(elem);
+  for (unsigned int j=0; jgetBondBetweenAtoms(i,j))
+      mol->addBond(i,j,Bond::SINGLE);
+  }
+}
+free(tmp);
+}
+
+
+static void ConnectTheDots_Medium(RWMol *mol)
+{
+int count = mol->getNumAtoms();
+std::vector tmp(count);
+PeriodicTable *table = PeriodicTable::getTable();
+Conformer *conf = &mol->getConformer();
+for (int i=0; igetAtomWithIdx(i);
+  unsigned int elem = atom->getAtomicNum();
+  RDGeom::Point3D p = conf->getAtomPos(i);
+  ProximityEntry *tmpi = &tmp[i];
+  tmpi->x = (float)p.x;
+  tmpi->y = (float)p.y;
+  tmpi->z = (float)p.z;
+  tmpi->r = (float)table->getRcovalent(elem);
+  tmpi->atm = i;
+}
+
+std::stable_sort(tmp.begin(),tmp.end());
+
+for (int j=0; jx - MAXDIST;
+  for (int k=j-1; k>=0; k--) {
+    ProximityEntry *tmpk = &tmp[k];
+    if (tmpk->x < limit)
+      break;
+    if (IsBonded(tmpj,tmpk) &&
+        !mol->getBondBetweenAtoms(tmpj->atm,tmpk->atm))
+      mol->addBond(tmpj->atm,tmpk->atm,Bond::SINGLE);
+  }
+}
+}
+*/
+
+#define HASHSIZE 1024
+#define HASHMASK 1023
+#define HASHX 571
+#define HASHY 127
+#define HASHZ 3
+
+static void ConnectTheDots_Large(RWMol *mol, unsigned int flags) {
+  int HashTable[HASHSIZE];
+  memset(HashTable, -1, sizeof(HashTable));
+
+  unsigned int count = mol->getNumAtoms();
+  ProximityEntry *tmp =
+      (ProximityEntry *)malloc(count * sizeof(ProximityEntry));
+      CHECK_INVARIANT(tmp,"bad allocation");
+  PeriodicTable *table = PeriodicTable::getTable();
+  Conformer *conf = &mol->getConformer();
+
+  for (unsigned int i = 0; i < count; i++) {
+    Atom *atom = mol->getAtomWithIdx(i);
+    unsigned int elem = atom->getAtomicNum();
+    RDGeom::Point3D p = conf->getAtomPos(i);
+    ProximityEntry *tmpi = tmp + i;
+    tmpi->x = (float)p.x;
+    tmpi->y = (float)p.y;
+    tmpi->z = (float)p.z;
+    tmpi->r = (float)table->getRcovalent(elem);
+    tmpi->atm = i;
+    tmpi->elem = elem;
+
+    int hash = HASHX * (int)(p.x / MAXDIST) + HASHY * (int)(p.y / MAXDIST) +
+               HASHZ * (int)(p.z / MAXDIST);
+
+    for (int dx = -HASHX; dx <= HASHX; dx += HASHX)
+      for (int dy = -HASHY; dy <= HASHY; dy += HASHY)
+        for (int dz = -HASHZ; dz <= HASHZ; dz += HASHZ) {
+          int probe = hash + dx + dy + dz;
+          int list = HashTable[probe & HASHMASK];
+          while (list != -1) {
+            ProximityEntry *tmpj = &tmp[list];
+            if (tmpj->hash == probe && IsBonded(tmpi, tmpj, flags) &&
+                !mol->getBondBetweenAtoms(tmpi->atm, tmpj->atm) &&
+                !IsBlacklistedPair(atom, mol->getAtomWithIdx(tmpj->atm)))
+              mol->addBond(tmpi->atm, tmpj->atm, Bond::SINGLE);
+            list = tmpj->next;
+          }
+        }
+    int list = hash & HASHMASK;
+    tmpi->next = HashTable[list];
+    HashTable[list] = i;
+    tmpi->hash = hash;
+  }
+  // Cleanup pass
+  for (unsigned int i = 0; i < count; i++) {
+    Atom *atom = mol->getAtomWithIdx(i);
+    unsigned int elem = atom->getAtomicNum();
+    // detect multivalent Hs, which could happen with ConnectTheDots
+    if (elem == 1 && atom->getDegree() > 1) {
+      AtomPDBResidueInfo *atom_info =
+          (AtomPDBResidueInfo *)(atom->getMonomerInfo());
+      // cut all but shortest Bond
+      RDGeom::Point3D p = conf->getAtomPos(i);
+      RDKit::RWMol::ADJ_ITER nbr, end_nbr;
+      boost::tie(nbr, end_nbr) = mol->getAtomNeighbors(atom);
+      float best = 10000;
+      unsigned int best_idx = mol->getNumAtoms() + 1;
+      while (nbr != end_nbr) {
+        RDGeom::Point3D pn = conf->getAtomPos(*nbr);
+        float d = (p - pn).length();
+        AtomPDBResidueInfo *n_info =
+            (AtomPDBResidueInfo *)(mol->getAtomWithIdx(*nbr)->getMonomerInfo());
+        if (d < best &&
+            atom_info->getResidueNumber() == n_info->getResidueNumber()) {
+          best = d;
+          best_idx = *nbr;
+        }
+        ++nbr;
+      }
+      // iterate again and remove all but closest
+      boost::tie(nbr, end_nbr) = mol->getAtomNeighbors(atom);
+      while (nbr != end_nbr) {
+        if (*nbr == best_idx) {
+          Bond *bond = mol->getBondBetweenAtoms(i, *nbr);
+          bond->setBondType(Bond::SINGLE);  // make sure this one is single
+        } else {
+          mol->removeBond(i, *nbr);
+        }
+        ++nbr;
+      }
+    }
+  }
+  free(tmp);
+}
+
+void ConnectTheDots(RWMol *mol, unsigned int flags) {
+  if (!mol || !mol->getNumConformers()) return;
+  // Determine optimal algorithm to use by getNumAtoms()?
+  ConnectTheDots_Large(mol, flags);
+}
+
+// These are macros to allow their use in C++ constants
+#define BCNAM(A, B, C) (((A) << 16) | ((B) << 8) | (C))
+#define BCATM(A, B, C, D) (((A) << 24) | ((B) << 16) | ((C) << 8) | (D))
+
+static bool StandardPDBDoubleBond(unsigned int rescode, unsigned int atm1,
+                                  unsigned int atm2) {
+  if (atm1 > atm2) {
+    unsigned int tmp = atm1;
+    atm1 = atm2;
+    atm2 = tmp;
+  }
+
+  switch (rescode) {
+    case BCNAM('A', 'L', 'A'):
+    case BCNAM('C', 'Y', 'S'):
+    case BCNAM('G', 'L', 'Y'):
+    case BCNAM('I', 'L', 'E'):
+    case BCNAM('L', 'E', 'U'):
+    case BCNAM('L', 'Y', 'S'):
+    case BCNAM('M', 'E', 'T'):
+    case BCNAM('P', 'R', 'O'):
+    case BCNAM('S', 'E', 'R'):
+    case BCNAM('T', 'H', 'R'):
+    case BCNAM('V', 'A', 'L'):
+      if (atm1 == BCATM(' ', 'C', ' ', ' ') &&
+          atm2 == BCATM(' ', 'O', ' ', ' '))
+        return true;
+      break;
+    case BCNAM('A', 'R', 'G'):
+      if (atm1 == BCATM(' ', 'C', ' ', ' ') &&
+          atm2 == BCATM(' ', 'O', ' ', ' '))
+        return true;
+      if (atm1 == BCATM(' ', 'C', 'Z', ' ') &&
+          atm2 == BCATM(' ', 'N', 'H', '2'))
+        return true;
+      break;
+    case BCNAM('A', 'S', 'N'):
+    case BCNAM('A', 'S', 'P'):
+      if (atm1 == BCATM(' ', 'C', ' ', ' ') &&
+          atm2 == BCATM(' ', 'O', ' ', ' '))
+        return true;
+      if (atm1 == BCATM(' ', 'C', 'G', ' ') &&
+          atm2 == BCATM(' ', 'O', 'D', '1'))
+        return true;
+      break;
+    case BCNAM('G', 'L', 'N'):
+    case BCNAM('G', 'L', 'U'):
+      if (atm1 == BCATM(' ', 'C', ' ', ' ') &&
+          atm2 == BCATM(' ', 'O', ' ', ' '))
+        return true;
+      if (atm1 == BCATM(' ', 'C', 'D', ' ') &&
+          atm2 == BCATM(' ', 'O', 'E', '1'))
+        return true;
+      break;
+    case BCNAM('H', 'I', 'S'):
+      if (atm1 == BCATM(' ', 'C', ' ', ' ') &&
+          atm2 == BCATM(' ', 'O', ' ', ' '))
+        return true;
+      if (atm1 == BCATM(' ', 'C', 'D', '2') &&
+          atm2 == BCATM(' ', 'C', 'G', ' '))
+        return true;
+      if (atm1 == BCATM(' ', 'C', 'E', '1') &&
+          atm2 == BCATM(' ', 'N', 'D', '1'))
+        return true;
+      break;
+    case BCNAM('P', 'H', 'E'):
+    case BCNAM('T', 'Y', 'R'):
+      if (atm1 == BCATM(' ', 'C', ' ', ' ') &&
+          atm2 == BCATM(' ', 'O', ' ', ' '))
+        return true;
+      if (atm1 == BCATM(' ', 'C', 'D', '1') &&
+          atm2 == BCATM(' ', 'C', 'G', ' '))
+        return true;
+      if (atm1 == BCATM(' ', 'C', 'D', '2') &&
+          atm2 == BCATM(' ', 'C', 'E', '2'))
+        return true;
+      if (atm1 == BCATM(' ', 'C', 'E', '1') &&
+          atm2 == BCATM(' ', 'C', 'Z', ' '))
+        return true;
+      break;
+    case BCNAM('T', 'R', 'P'):
+      if (atm1 == BCATM(' ', 'C', ' ', ' ') &&
+          atm2 == BCATM(' ', 'O', ' ', ' '))
+        return true;
+      if (atm1 == BCATM(' ', 'C', 'D', '1') &&
+          atm2 == BCATM(' ', 'C', 'G', ' '))
+        return true;
+      if (atm1 == BCATM(' ', 'C', 'D', '2') &&
+          atm2 == BCATM(' ', 'C', 'E', '2'))
+        return true;
+      if (atm1 == BCATM(' ', 'C', 'E', '3') &&
+          atm2 == BCATM(' ', 'C', 'Z', '3'))
+        return true;
+      if (atm1 == BCATM(' ', 'C', 'H', '2') &&
+          atm2 == BCATM(' ', 'C', 'Z', '2'))
+        return true;
+      break;
+  }
+  return false;
+}
+
+static bool StandardPDBDoubleBond(RWMol *mol, Atom *beg, Atom *end) {
+  AtomPDBResidueInfo *bInfo = (AtomPDBResidueInfo *)beg->getMonomerInfo();
+  if (!bInfo || bInfo->getMonomerType() != AtomMonomerInfo::PDBRESIDUE)
+    return false;
+  AtomPDBResidueInfo *eInfo = (AtomPDBResidueInfo *)end->getMonomerInfo();
+  if (!eInfo || eInfo->getMonomerType() != AtomMonomerInfo::PDBRESIDUE)
+    return false;
+  if (!SamePDBResidue(bInfo, eInfo)) return false;
+  if (bInfo->getIsHeteroAtom() || eInfo->getIsHeteroAtom()) return false;
+
+  const char *ptr = bInfo->getResidueName().c_str();
+  unsigned int rescode = BCNAM(ptr[0], ptr[1], ptr[2]);
+  ptr = bInfo->getName().c_str();
+  unsigned int atm1 = BCATM(ptr[0], ptr[1], ptr[2], ptr[3]);
+  ptr = eInfo->getName().c_str();
+  unsigned int atm2 = BCATM(ptr[0], ptr[1], ptr[2], ptr[3]);
+
+  if (!StandardPDBDoubleBond(rescode, atm1, atm2)) return false;
+
+  // Check that neither end already has a double bond
+  ROMol::OBOND_ITER_PAIR bp;
+  for (bp = mol->getAtomBonds(beg); bp.first != bp.second; ++bp.first)
+    if ((*mol)[*bp.first]->getBondType() == Bond::DOUBLE) return false;
+  for (bp = mol->getAtomBonds(end); bp.first != bp.second; ++bp.first)
+    if ((*mol)[*bp.first]->getBondType() == Bond::DOUBLE) return false;
+
+  return true;
+}
+
+void StandardPDBResidueBondOrders(RWMol *mol) {
+  RWMol::BondIterator bondIt;
+  for (bondIt = mol->beginBonds(); bondIt != mol->endBonds(); ++bondIt) {
+    Bond *bond = *bondIt;
+    if (bond->getBondType() == Bond::SINGLE) {
+      Atom *beg = bond->getBeginAtom();
+      Atom *end = bond->getEndAtom();
+      if (StandardPDBDoubleBond(mol, beg, end)) bond->setBondType(Bond::DOUBLE);
+    }
+  }
+}
+
+}  // namespace RDKit
diff --git a/Code/GraphMol/FileParsers/mol1.cdxml b/Code/GraphMol/FileParsers/mol1.cdxml
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FileParsers/testExecs/.cvskeep b/Code/GraphMol/FileParsers/testExecs/.cvskeep
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FileParsers/test_data/Issue180.mol b/Code/GraphMol/FileParsers/test_data/Issue180.mol
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FileParsers/test_data/NCI_aids_few.sdf b/Code/GraphMol/FileParsers/test_data/NCI_aids_few.sdf
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FileParsers/test_data/badringstereochem.mol b/Code/GraphMol/FileParsers/test_data/badringstereochem.mol
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FileParsers/test_data/badringstereochem2.mol b/Code/GraphMol/FileParsers/test_data/badringstereochem2.mol
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FileParsers/test_data/badringstereochem3.mol b/Code/GraphMol/FileParsers/test_data/badringstereochem3.mol
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FileParsers/test_data/bond-query.mol b/Code/GraphMol/FileParsers/test_data/bond-query.mol
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FileParsers/test_data/chiral1.mol b/Code/GraphMol/FileParsers/test_data/chiral1.mol
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FileParsers/test_data/chiral2.mol b/Code/GraphMol/FileParsers/test_data/chiral2.mol
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FileParsers/test_data/chiral3.mol b/Code/GraphMol/FileParsers/test_data/chiral3.mol
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FileParsers/test_data/chiral4.mol b/Code/GraphMol/FileParsers/test_data/chiral4.mol
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FileParsers/test_data/cmpd1.tpl b/Code/GraphMol/FileParsers/test_data/cmpd1.tpl
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FileParsers/test_data/cmpd2.tpl b/Code/GraphMol/FileParsers/test_data/cmpd2.tpl
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FileParsers/test_data/earlyEOF.sdf b/Code/GraphMol/FileParsers/test_data/earlyEOF.sdf
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FileParsers/test_data/empty.sdf b/Code/GraphMol/FileParsers/test_data/empty.sdf
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FileParsers/test_data/empty.smi b/Code/GraphMol/FileParsers/test_data/empty.smi
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FileParsers/test_data/esters.sdf b/Code/GraphMol/FileParsers/test_data/esters.sdf
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FileParsers/test_data/esters_end.sdf b/Code/GraphMol/FileParsers/test_data/esters_end.sdf
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FileParsers/test_data/fewSmi.2.csv b/Code/GraphMol/FileParsers/test_data/fewSmi.2.csv
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FileParsers/test_data/fewSmi.csv b/Code/GraphMol/FileParsers/test_data/fewSmi.csv
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FileParsers/test_data/first_200.tpsa.csv b/Code/GraphMol/FileParsers/test_data/first_200.tpsa.csv
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FileParsers/test_data/issue123.mol b/Code/GraphMol/FileParsers/test_data/issue123.mol
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FileParsers/test_data/list-query.mol b/Code/GraphMol/FileParsers/test_data/list-query.mol
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FileParsers/test_data/missingCR.sdf b/Code/GraphMol/FileParsers/test_data/missingCR.sdf
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FileParsers/test_data/mol1.mol b/Code/GraphMol/FileParsers/test_data/mol1.mol
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FileParsers/test_data/outNCI_arom.sdf b/Code/GraphMol/FileParsers/test_data/outNCI_arom.sdf
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FileParsers/test_data/triazine.mol b/Code/GraphMol/FileParsers/test_data/triazine.mol
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FindRings.cpp b/Code/GraphMol/FindRings.cpp
index f96214572..1dda801d6 100644
--- a/Code/GraphMol/FindRings.cpp
+++ b/Code/GraphMol/FindRings.cpp
@@ -1087,7 +1087,7 @@ int findSSSR(const ROMol &mol, VECT_INT_VECT &res) {
   FindRings::storeRingsInfo(mol, res);
 
   // update the ring memberships of atoms and bonds in the molecule:
-  // store the SSSR rings on the the molecule as a property
+  // store the SSSR rings on the molecule as a property
   // we will ignore any existing SSSRs ont eh molecule - simply overwrite
   return rdcast(res.size());
 }
diff --git a/Code/GraphMol/Fingerprints/MorganFingerprints.h b/Code/GraphMol/Fingerprints/MorganFingerprints.h
index 9ff21ca15..05baf6b31 100644
--- a/Code/GraphMol/Fingerprints/MorganFingerprints.h
+++ b/Code/GraphMol/Fingerprints/MorganFingerprints.h
@@ -65,7 +65,7 @@ const std::string morganFingerprintVersion = "1.0.0";
   The algorithm used is described in the paper
   Rogers, D. & Hahn, M. Extended-Connectivity Fingerprints. JCIM 50:742-54
   (2010)
-  http://dx.doi.org/10.1021/ci100050t
+  https://doi.org/10.1021/ci100050t
 
   The original implementation was done using this paper:
   D. Rogers, R.D. Brown, M. Hahn J. Biomol. Screen. 10:682-6 (2005)
@@ -115,7 +115,7 @@ RDKIT_FINGERPRINTS_EXPORT SparseIntVect *getFingerprint(
   The algorithm used is described in the paper
   Rogers, D. & Hahn, M. Extended-Connectivity Fingerprints. JCIM 50:742-54
   (2010)
-  http://dx.doi.org/10.1021/ci100050t
+  https://doi.org/10.1021/ci100050t
 
   The original implementation was done using this paper:
   D. Rogers, R.D. Brown, M. Hahn J. Biomol. Screen. 10:682-6 (2005)
diff --git a/Code/GraphMol/Fingerprints/testExecs/.cvskeep b/Code/GraphMol/Fingerprints/testExecs/.cvskeep
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/ForceFieldHelpers/FFConvenience.h b/Code/GraphMol/ForceFieldHelpers/FFConvenience.h
old mode 100755
new mode 100644
index db04b84ba..b06b4f199
--- a/Code/GraphMol/ForceFieldHelpers/FFConvenience.h
+++ b/Code/GraphMol/ForceFieldHelpers/FFConvenience.h
@@ -1,122 +1,122 @@
-//
-//  Copyright (C) 2019 Paolo Tosco
-//
-//   @@ All Rights Reserved @@
-//  This file is part of the RDKit.
-//  The contents are covered by the terms of the BSD license
-//  which is included in the file license.txt, found at the root
-//  of the RDKit source tree.
-//
-#include 
-#ifndef RD_FFCONVENIENCE_H
-#define RD_FFCONVENIENCE_H
-#include 
-#include 
-
-namespace RDKit {
-class ROMol;
-namespace ForceFieldsHelper {
-namespace detail {
-#ifdef RDK_THREADSAFE_SSS
-void OptimizeMoleculeConfsHelper_(ForceFields::ForceField ff, ROMol *mol,
-                                      std::vector> *res,
-                                      unsigned int threadIdx,
-                                      unsigned int numThreads, int maxIters) {
-  PRECONDITION(mol, "mol must not be nullptr");
-  PRECONDITION(res, "res must not be nullptr");
-  PRECONDITION(res->size() >= mol->getNumConformers(), "res->size() must be >= mol->getNumConformers()");
-  unsigned int i = 0;
-  ff.positions().resize(mol->getNumAtoms());
-  for (ROMol::ConformerIterator cit = mol->beginConformers();
-       cit != mol->endConformers(); ++cit, ++i) {
-    if (i % numThreads != threadIdx) continue;
-    for (unsigned int aidx = 0; aidx < mol->getNumAtoms(); ++aidx) {
-      ff.positions()[aidx] = &(*cit)->getAtomPos(aidx);
-    }
-    ff.initialize();
-    int needsMore = ff.minimize(maxIters);
-    double e = ff.calcEnergy();
-    (*res)[i] = std::make_pair(needsMore, e);
-  }
-}
-
-void OptimizeMoleculeConfsMT(ROMol &mol, const ForceFields::ForceField &ff,
-                               std::vector> &res,
-                               int numThreads, int maxIters) {
-  std::vector tg;
-  for (int ti = 0; ti < numThreads; ++ti) {
-    tg.emplace_back(std::thread(detail::OptimizeMoleculeConfsHelper_,
-                                ff, &mol, &res, ti, numThreads, maxIters));
-  }
-  for (auto &thread : tg) {
-    if (thread.joinable()) thread.join();
-  }
-}
-#endif
-
-void OptimizeMoleculeConfsST(ROMol &mol, ForceFields::ForceField &ff,
-                               std::vector> &res,
-                               int maxIters) {
-  PRECONDITION(res.size() >= mol.getNumConformers(), "res.size() must be >= mol.getNumConformers()");
-  unsigned int i = 0;
-  for (ROMol::ConformerIterator cit = mol.beginConformers();
-       cit != mol.endConformers(); ++cit, ++i) {
-    for (unsigned int aidx = 0; aidx < mol.getNumAtoms(); ++aidx) {
-      ff.positions()[aidx] = &(*cit)->getAtomPos(aidx);
-    }
-    ff.initialize();
-    int needsMore = ff.minimize(maxIters);
-    double e = ff.calcEnergy();
-    res[i] = std::make_pair(needsMore, e);
-  }
-}
-}  // end of detail namespace
-
-//! Convenience function for optimizing a molecule using a pre-generated force-field
-/*
-  \param ff         the force-field
-  \param res        vector of (needsMore,energy) pairs
-  \param maxIters   the maximum number of force-field iterations
-
-  \return a pair with:
-     first: -1 if parameters were missing, 0 if the optimization converged, 1 if
-  more iterations are required.
-     second: the energy
-*/
-std::pair OptimizeMolecule(ForceFields::ForceField &ff, int maxIters = 1000) {
-  ff.initialize();
-  int res = ff.minimize(maxIters);
-  double e = ff.calcEnergy();
-  return std::make_pair(res, e);
-}
-
-//! Convenience function for optimizing all of a molecule's conformations using
-// a pre-generated force-field
-/*
-  \param mol        the molecule to use
-  \param ff         the force-field
-  \param res        vector of (needsMore,energy) pairs
-  \param numThreads the number of simultaneous threads to use (only has an
-                    effect if the RDKit is compiled with thread support).
-                    If set to zero, the max supported by the system will be
-  used.
-  \param maxIters   the maximum number of force-field iterations
-
-*/
-void OptimizeMoleculeConfs(ROMol &mol, ForceFields::ForceField &ff,
-                             std::vector> &res,
-                             int numThreads = 1, int maxIters = 1000) {
-  res.resize(mol.getNumConformers());
-  numThreads = getNumThreadsToUse(numThreads);
-  if (numThreads == 1) {
-    detail::OptimizeMoleculeConfsST(mol, ff, res, maxIters);
-  }
-#ifdef RDK_THREADSAFE_SSS
-  else {
-    detail::OptimizeMoleculeConfsMT(mol, ff, res, numThreads, maxIters);
-  }
-#endif
-}
-}  // end of namespace ForceFieldsHelper
-}  // end of namespace RDKit
-#endif
+//
+//  Copyright (C) 2019 Paolo Tosco
+//
+//   @@ All Rights Reserved @@
+//  This file is part of the RDKit.
+//  The contents are covered by the terms of the BSD license
+//  which is included in the file license.txt, found at the root
+//  of the RDKit source tree.
+//
+#include 
+#ifndef RD_FFCONVENIENCE_H
+#define RD_FFCONVENIENCE_H
+#include 
+#include 
+
+namespace RDKit {
+class ROMol;
+namespace ForceFieldsHelper {
+namespace detail {
+#ifdef RDK_THREADSAFE_SSS
+void OptimizeMoleculeConfsHelper_(ForceFields::ForceField ff, ROMol *mol,
+                                      std::vector> *res,
+                                      unsigned int threadIdx,
+                                      unsigned int numThreads, int maxIters) {
+  PRECONDITION(mol, "mol must not be nullptr");
+  PRECONDITION(res, "res must not be nullptr");
+  PRECONDITION(res->size() >= mol->getNumConformers(), "res->size() must be >= mol->getNumConformers()");
+  unsigned int i = 0;
+  ff.positions().resize(mol->getNumAtoms());
+  for (ROMol::ConformerIterator cit = mol->beginConformers();
+       cit != mol->endConformers(); ++cit, ++i) {
+    if (i % numThreads != threadIdx) continue;
+    for (unsigned int aidx = 0; aidx < mol->getNumAtoms(); ++aidx) {
+      ff.positions()[aidx] = &(*cit)->getAtomPos(aidx);
+    }
+    ff.initialize();
+    int needsMore = ff.minimize(maxIters);
+    double e = ff.calcEnergy();
+    (*res)[i] = std::make_pair(needsMore, e);
+  }
+}
+
+void OptimizeMoleculeConfsMT(ROMol &mol, const ForceFields::ForceField &ff,
+                               std::vector> &res,
+                               int numThreads, int maxIters) {
+  std::vector tg;
+  for (int ti = 0; ti < numThreads; ++ti) {
+    tg.emplace_back(std::thread(detail::OptimizeMoleculeConfsHelper_,
+                                ff, &mol, &res, ti, numThreads, maxIters));
+  }
+  for (auto &thread : tg) {
+    if (thread.joinable()) thread.join();
+  }
+}
+#endif
+
+void OptimizeMoleculeConfsST(ROMol &mol, ForceFields::ForceField &ff,
+                               std::vector> &res,
+                               int maxIters) {
+  PRECONDITION(res.size() >= mol.getNumConformers(), "res.size() must be >= mol.getNumConformers()");
+  unsigned int i = 0;
+  for (ROMol::ConformerIterator cit = mol.beginConformers();
+       cit != mol.endConformers(); ++cit, ++i) {
+    for (unsigned int aidx = 0; aidx < mol.getNumAtoms(); ++aidx) {
+      ff.positions()[aidx] = &(*cit)->getAtomPos(aidx);
+    }
+    ff.initialize();
+    int needsMore = ff.minimize(maxIters);
+    double e = ff.calcEnergy();
+    res[i] = std::make_pair(needsMore, e);
+  }
+}
+}  // end of detail namespace
+
+//! Convenience function for optimizing a molecule using a pre-generated force-field
+/*
+  \param ff         the force-field
+  \param res        vector of (needsMore,energy) pairs
+  \param maxIters   the maximum number of force-field iterations
+
+  \return a pair with:
+     first: -1 if parameters were missing, 0 if the optimization converged, 1 if
+  more iterations are required.
+     second: the energy
+*/
+std::pair OptimizeMolecule(ForceFields::ForceField &ff, int maxIters = 1000) {
+  ff.initialize();
+  int res = ff.minimize(maxIters);
+  double e = ff.calcEnergy();
+  return std::make_pair(res, e);
+}
+
+//! Convenience function for optimizing all of a molecule's conformations using
+// a pre-generated force-field
+/*
+  \param mol        the molecule to use
+  \param ff         the force-field
+  \param res        vector of (needsMore,energy) pairs
+  \param numThreads the number of simultaneous threads to use (only has an
+                    effect if the RDKit is compiled with thread support).
+                    If set to zero, the max supported by the system will be
+  used.
+  \param maxIters   the maximum number of force-field iterations
+
+*/
+void OptimizeMoleculeConfs(ROMol &mol, ForceFields::ForceField &ff,
+                             std::vector> &res,
+                             int numThreads = 1, int maxIters = 1000) {
+  res.resize(mol.getNumConformers());
+  numThreads = getNumThreadsToUse(numThreads);
+  if (numThreads == 1) {
+    detail::OptimizeMoleculeConfsST(mol, ff, res, maxIters);
+  }
+#ifdef RDK_THREADSAFE_SSS
+  else {
+    detail::OptimizeMoleculeConfsMT(mol, ff, res, numThreads, maxIters);
+  }
+#endif
+}
+}  // end of namespace ForceFieldsHelper
+}  // end of namespace RDKit
+#endif
diff --git a/Code/GraphMol/ForceFieldHelpers/MMFF/AtomTyper.cpp b/Code/GraphMol/ForceFieldHelpers/MMFF/AtomTyper.cpp
index 3f7727de1..f145c46bb 100644
--- a/Code/GraphMol/ForceFieldHelpers/MMFF/AtomTyper.cpp
+++ b/Code/GraphMol/ForceFieldHelpers/MMFF/AtomTyper.cpp
@@ -2869,7 +2869,7 @@ MMFFMolProperties::getMMFFBondStretchEmpiricalRuleParams(const ROMol &mol,
   } else {
     // MMFF.V, page 627
     // Herschbach-Laurie version of Badger's rule
-    // J. Chem. Phys. 35, 458 (1961); http://dx.doi.org/10.1063/1.1731952
+    // J. Chem. Phys. 35, 458 (1961); https://doi.org/10.1063/1.1731952
     // equation (8), page 5
     mmffHerschbachLaurieParams = (*mmffHerschbachLaurie)(
         getPeriodicTableRowHL(atomicNum1), getPeriodicTableRowHL(atomicNum2));
@@ -3575,7 +3575,7 @@ void MMFFMolProperties::computeMMFFCharges(const ROMol &mol) {
   }
   // now we compute partial charges
   // See Halgren, T. MMFF.V, J. Comput. Chem. 1996, 17, 616-641
-  // http://dx.doi.org/10.1002/(SICI)1096-987X(199604)17:5/6<616::AID-JCC5>3.0.CO;2-X
+  // https://doi.org/10.1002/(SICI)1096-987X(199604)17:5/6<616::AID-JCC5>3.0.CO;2-X
   for (idx = 0; idx < mol.getNumAtoms(); ++idx) {
     const Atom *atom = mol.getAtomWithIdx(idx);
     atomType = this->getMMFFAtomType(idx);
diff --git a/Code/GraphMol/ForceFieldHelpers/MMFF/test_data/cyclobutadiene.mol b/Code/GraphMol/ForceFieldHelpers/MMFF/test_data/cyclobutadiene.mol
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/ForceFieldHelpers/UFF/test_data/cyclobutadiene.mol b/Code/GraphMol/ForceFieldHelpers/UFF/test_data/cyclobutadiene.mol
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FragCatalog/Wrap/testFrags.csv b/Code/GraphMol/FragCatalog/Wrap/testFrags.csv
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FragCatalog/Wrap/test_data/testFrags.csv b/Code/GraphMol/FragCatalog/Wrap/test_data/testFrags.csv
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FragCatalog/testExecs/.cvskeep b/Code/GraphMol/FragCatalog/testExecs/.cvskeep
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FragCatalog/test_data/4mols.smi b/Code/GraphMol/FragCatalog/test_data/4mols.smi
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FragCatalog/test_data/funcGroups.txt b/Code/GraphMol/FragCatalog/test_data/funcGroups.txt
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FragCatalog/test_data/mols.smi b/Code/GraphMol/FragCatalog/test_data/mols.smi
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/FragCatalog/test_data/testFrags.csv b/Code/GraphMol/FragCatalog/test_data/testFrags.csv
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/MMPA/MMPA.cpp b/Code/GraphMol/MMPA/MMPA.cpp
index 824f4c8fe..c02b264d2 100644
--- a/Code/GraphMol/MMPA/MMPA.cpp
+++ b/Code/GraphMol/MMPA/MMPA.cpp
@@ -125,7 +125,7 @@ static void addResult(std::vector>&
     // remove the bond
     em.removeBond(bi.first, bi.second);
 
-    // now add attachement points and set attachment point lables
+    // now add attachment points and set attachment point labels
     auto* a = new Atom(0);
     a->setProp(common_properties::molAtomMapNumber, (int)isotope);
     unsigned newAtomA = em.addAtom(a, true, true);
diff --git a/Code/GraphMol/MolDraw2D/MolDraw2D.cpp b/Code/GraphMol/MolDraw2D/MolDraw2D.cpp
index 6915a1b5c..c154c5d76 100644
--- a/Code/GraphMol/MolDraw2D/MolDraw2D.cpp
+++ b/Code/GraphMol/MolDraw2D/MolDraw2D.cpp
@@ -1707,7 +1707,6 @@ void MolDraw2D::drawTriangle(const Point2D &cds1, const Point2D &cds2,
 void MolDraw2D::drawArrow(const Point2D &arrowBegin, const Point2D &arrowEnd,
                           bool asPolygon, double frac, double angle) {
   Point2D delta = arrowBegin - arrowEnd;
-  double l = frac * delta.length();
   double cos_angle = std::cos(angle), sin_angle = std::sin(angle);
 
   Point2D p1 = arrowEnd;
diff --git a/Code/GraphMol/MolTransforms/MolTransforms.h b/Code/GraphMol/MolTransforms/MolTransforms.h
index 0dd8d2c6b..045d039d6 100644
--- a/Code/GraphMol/MolTransforms/MolTransforms.h
+++ b/Code/GraphMol/MolTransforms/MolTransforms.h
@@ -100,14 +100,14 @@ computePrincipalAxesAndMomentsFromGyrationMatrix(
 // the y-axis
 //! and the smallest with the z-axis
 /*!
-  If center is not specified the the centroid of the conformer will be used
+  If center is not specified the centroid of the conformer will be used
   \param conf                Conformer of interest
   \param center              Center to be used for canonicalization, defaults to
   the centroid of the
                              conformation
   \param normalizeCovar      Normalize the covariance matrix with the number of
   atoms
-  \param ignoreHs            Optinally ignore hydrogens
+  \param ignoreHs            Optionally ignore hydrogens
 */
 RDKIT_MOLTRANSFORMS_EXPORT RDGeom::Transform3D *computeCanonicalTransform(
     const RDKit::Conformer &conf, const RDGeom::Point3D *center = 0,
diff --git a/Code/GraphMol/MolTransforms/ReadMe b/Code/GraphMol/MolTransforms/ReadMe
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/MolTransforms/Wrap/rdMolTransforms.cpp b/Code/GraphMol/MolTransforms/Wrap/rdMolTransforms.cpp
index 9e020fa4a..6b4dfd01d 100644
--- a/Code/GraphMol/MolTransforms/Wrap/rdMolTransforms.cpp
+++ b/Code/GraphMol/MolTransforms/Wrap/rdMolTransforms.cpp
@@ -134,7 +134,7 @@ BOOST_PYTHON_MODULE(rdMolTransforms) {
 
   docString =
       "Compute the transformation required aligna conformer so that\n\
-               the the principal axes align up with the x,y, z axes\n\
+               the principal axes align up with the x,y, z axes\n\
                The conformer itself is left unchanged\n\
   ARGUMENTS:\n\
     - conf : the conformer of interest\n\
diff --git a/Code/GraphMol/MolTransforms/testExecs/.cvskeep b/Code/GraphMol/MolTransforms/testExecs/.cvskeep
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/PartialCharges/Wrap/test_data/PP_combi_charges.pkl b/Code/GraphMol/PartialCharges/Wrap/test_data/PP_combi_charges.pkl
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/PartialCharges/Wrap/test_data/PP_descrs_regress.2.csv b/Code/GraphMol/PartialCharges/Wrap/test_data/PP_descrs_regress.2.csv
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/PartialCharges/Wrap/test_data/halgren.smi b/Code/GraphMol/PartialCharges/Wrap/test_data/halgren.smi
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/PartialCharges/Wrap/test_data/halgren_out.txt b/Code/GraphMol/PartialCharges/Wrap/test_data/halgren_out.txt
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/QueryOps.h b/Code/GraphMol/QueryOps.h
index 6d17b0010..cfede2682 100644
--- a/Code/GraphMol/QueryOps.h
+++ b/Code/GraphMol/QueryOps.h
@@ -972,9 +972,9 @@ class HasPropWithValueQuery
             what->template getProp(propname);
         const double tani = TanimotoSimilarity(val, bv);
         res = (1.0 - tani) <= tol;
-      } catch (KeyErrorException) {
+      } catch (KeyErrorException &) {
         res = false;
-      } catch (boost::bad_any_cast) {
+      } catch (boost::bad_any_cast &) {
         res = false;
       }
 #ifdef __GNUC__
diff --git a/Code/GraphMol/RGroupDecomposition/RGroupDecomp.cpp b/Code/GraphMol/RGroupDecomposition/RGroupDecomp.cpp
index e438f7733..18a1edbc9 100644
--- a/Code/GraphMol/RGroupDecomposition/RGroupDecomp.cpp
+++ b/Code/GraphMol/RGroupDecomposition/RGroupDecomp.cpp
@@ -825,7 +825,7 @@ struct RGroupDecompData {
         // Is this necessary?
         CHECK_INVARIANT(
             atom->getAtomicNum() > 1,
-            "Multiple attachements to a dummy (or hydrogen) is weird.");
+            "Multiple attachments to a dummy (or hydrogen) is weird.");
         auto *newAt = new Atom(0);
         setRlabel(newAt, rlabel);
         atomsToAdd.push_back(std::make_pair(atom, newAt));
diff --git a/Code/GraphMol/ROMol.h b/Code/GraphMol/ROMol.h
index 900969e1b..b5ceb4481 100644
--- a/Code/GraphMol/ROMol.h
+++ b/Code/GraphMol/ROMol.h
@@ -433,7 +433,7 @@ class RDKIT_GRAPHMOL_EXPORT ROMol : public RDProps {
     \param conf - conformation to be added to the molecule, this molecule takes
     ownership
                   of the conformer
-    \param assignId - a unique ID will be assigned to the the conformation if
+    \param assignId - a unique ID will be assigned to the conformation if
     true
                       otherwise it is assumed that the conformation already has
     an (unique) ID set
diff --git a/Code/GraphMol/Resonance.h b/Code/GraphMol/Resonance.h
index 6f3eed327..5cc797fd9 100644
--- a/Code/GraphMol/Resonance.h
+++ b/Code/GraphMol/Resonance.h
@@ -34,7 +34,7 @@ class RDKIT_GRAPHMOL_EXPORT ResonanceMolSupplier {
  public:
   typedef enum {
     /*! include resonance structures whose octets are less complete
-     *  than the the most octet-complete structure */
+     *  than the most octet-complete structure */
     ALLOW_INCOMPLETE_OCTETS = (1 << 0),
     /*! include resonance structures featuring charge separation also
      *   when uncharged resonance structures exist */
diff --git a/Code/GraphMol/SmilesParse/esmiles.flex b/Code/GraphMol/SmilesParse/esmiles.flex
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/SmilesParse/esmiles.y b/Code/GraphMol/SmilesParse/esmiles.y
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/SmilesParse/regress.txt b/Code/GraphMol/SmilesParse/regress.txt
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/SmilesParse/testExecs/.cvskeep b/Code/GraphMol/SmilesParse/testExecs/.cvskeep
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Subgraphs/testExecs/.cvskeep b/Code/GraphMol/Subgraphs/testExecs/.cvskeep
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Substruct/bond-query.cdxml b/Code/GraphMol/Substruct/bond-query.cdxml
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Substruct/list-query.cdxml b/Code/GraphMol/Substruct/list-query.cdxml
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Substruct/regress.txt b/Code/GraphMol/Substruct/regress.txt
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Substruct/testExecs/.cvskeep b/Code/GraphMol/Substruct/testExecs/.cvskeep
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Wrap/SubstanceGroup.cpp b/Code/GraphMol/Wrap/SubstanceGroup.cpp
index baa064d24..0564f338e 100644
--- a/Code/GraphMol/Wrap/SubstanceGroup.cpp
+++ b/Code/GraphMol/Wrap/SubstanceGroup.cpp
@@ -1,198 +1,198 @@
-//
-//  Copyright (C) 2019 Greg Landrum
-//
-//   @@ All Rights Reserved @@
-//  This file is part of the RDKit.
-//  The contents are covered by the terms of the BSD license
-//  which is included in the file license.txt, found at the root
-//  of the RDKit source tree.
-//
-
-#define NO_IMPORT_ARRAY
-#include 
-#include 
-#include 
-
-// ours
-#include 
-#include 
-#include "props.hpp"
-
-namespace python = boost::python;
-
-namespace RDKit {
-
-namespace {
-SubstanceGroup *getMolSubstanceGroupWithIdx(ROMol &mol, unsigned int idx) {
-  auto &sgs = getSubstanceGroups(mol);
-  if (idx >= sgs.size()) {
-    throw_index_error(idx);
-  }
-  return &(sgs[idx]);
-}
-
-std::vector getMolSubstanceGroups(ROMol &mol) {
-  return getSubstanceGroups(mol);
-}
-void clearMolSubstanceGroups(ROMol &mol) {
-  std::vector &sgs = getSubstanceGroups(mol);
-  sgs.clear();
-}
-
-SubstanceGroup *createMolSubstanceGroup(ROMol &mol, std::string type) {
-  SubstanceGroup sg(&mol, type);
-  addSubstanceGroup(mol, sg);
-  return &(getSubstanceGroups(mol).back());
-}
-
-void addBracketHelper(SubstanceGroup &self, python::object pts) {
-  unsigned int sz = python::extract(pts.attr("__len__")());
-  if (sz != 2 && sz != 3)
-    throw_value_error("pts object have a length of 2 or 3");
-
-  SubstanceGroup::Bracket bkt;
-  python::stl_input_iterator beg(pts);
-  unsigned int i = 0;
-  for (unsigned int i = 0; i < sz; ++i) {
-    bkt[i] = *beg;
-    ++beg;
-  }
-  self.addBracket(bkt);
-}
-
-}  // namespace
-
-std::string sGroupClassDoc =
-    "A collection of atoms and bonds with associated properties\n";
-
-struct sgroup_wrap {
-  static void wrap() {
-    // register the vector_indexing_suite for SubstanceGroups
-    // if it hasn't already been done.
-    // logic from https://stackoverflow.com/a/13017303
-    boost::python::type_info info =
-        boost::python::type_id>();
-    const boost::python::converter::registration *reg =
-        boost::python::converter::registry::query(info);
-    if (reg == NULL || (*reg).m_to_python == NULL) {
-      python::class_>("SubstanceGroup_VECT")
-          .def(python::vector_indexing_suite<
-               std::vector>());
-    }
-
-    python::class_>(
-        "SubstanceGroup", sGroupClassDoc.c_str(), python::no_init)
-        .def("GetOwningMol", &SubstanceGroup::getOwningMol,
-             "returns the molecule owning this SubstanceGroup",
-             python::return_internal_reference<>())
-        .def("GetIndexInMol", &SubstanceGroup::getIndexInMol,
-             "returns the index of this SubstanceGroup in the owning "
-             "molecule's list.")
-        .def(
-            "GetAtoms", &SubstanceGroup::getAtoms,
-            "returns a list of the indices of the atoms in this SubstanceGroup",
-            python::return_value_policy())
-        .def("GetParentAtoms", &SubstanceGroup::getParentAtoms,
-             "returns a list of the indices of the parent atoms in this "
-             "SubstanceGroup",
-             python::return_value_policy())
-        .def(
-            "GetBonds", &SubstanceGroup::getBonds,
-            "returns a list of the indices of the bonds in this SubstanceGroup",
-            python::return_value_policy())
-        .def("AddAtomWithIdx", &SubstanceGroup::addAtomWithIdx)
-        .def("AddBondWithIdx", &SubstanceGroup::addBondWithIdx)
-        .def("AddParentAtomWithIdx", &SubstanceGroup::addParentAtomWithIdx)
-        .def("AddAtomWithBookmark", &SubstanceGroup::addAtomWithBookmark)
-        .def("AddParentAtomWithBookmark",
-             &SubstanceGroup::addParentAtomWithBookmark)
-        .def("AddCState", &SubstanceGroup::addCState)
-        .def("AddBondWithBookmark", &SubstanceGroup::addBondWithBookmark)
-        .def("AddAttachPoint", &SubstanceGroup::addAttachPoint)
-        .def("AddBracket", addBracketHelper)
-
-        .def("SetProp",
-             (void (RDProps::*)(const std::string &, std::string, bool) const) &
-                 SubstanceGroup::setProp,
-             (python::arg("self"), python::arg("key"), python::arg("val"),
-              python::arg("computed") = false),
-             "sets the value of a particular property")
-        .def("SetDoubleProp",
-             (void (RDProps::*)(const std::string &, double, bool) const) &
-                 SubstanceGroup::setProp,
-             (python::arg("self"), python::arg("key"), python::arg("val"),
-              python::arg("computed") = false),
-             "sets the value of a particular property")
-        .def("SetIntProp",
-             (void (RDProps::*)(const std::string &, int, bool) const) &
-                 SubstanceGroup::setProp,
-             (python::arg("self"), python::arg("key"), python::arg("val"),
-              python::arg("computed") = false),
-             "sets the value of a particular property")
-        .def(
-            "SetUnsignedProp",
-            (void (RDProps::*)(const std::string &, unsigned int, bool) const) &
-                SubstanceGroup::setProp,
-            (python::arg("self"), python::arg("key"), python::arg("val"),
-             python::arg("computed") = false),
-            "sets the value of a particular property")
-        .def("SetBoolProp",
-             (void (RDProps::*)(const std::string &, bool, bool) const) &
-                 SubstanceGroup::setProp,
-             (python::arg("self"), python::arg("key"), python::arg("val"),
-              python::arg("computed") = false),
-             "sets the value of a particular property")
-        .def("HasProp",
-             (bool (RDProps::*)(const std::string &) const) &
-                 SubstanceGroup::hasProp,
-             "returns whether or not a particular property exists")
-        .def("GetProp",
-             (std::string(RDProps::*)(const std::string &) const) &
-                 SubstanceGroup::getProp,
-             "returns the value of a particular property")
-        .def("GetIntProp",
-             (int (RDProps::*)(const std::string &) const) &
-                 SubstanceGroup::getProp,
-             "returns the value of a particular property")
-        .def("GetUnsignedProp",
-             (unsigned int (RDProps::*)(const std::string &) const) &
-                 SubstanceGroup::getProp,
-             "returns the value of a particular property")
-        .def("GetDoubleProp",
-             (double (RDProps::*)(const std::string &) const) &
-                 SubstanceGroup::getProp,
-             "returns the value of a particular property")
-        .def("GetBoolProp",
-             (bool (RDProps::*)(const std::string &) const) &
-                 SubstanceGroup::getProp,
-             "returns the value of a particular property")
-        .def("GetPropNames", &SubstanceGroup::getPropList,
-             (python::arg("self"), python::arg("includePrivate") = false,
-              python::arg("includeComputed") = false),
-             "Returns a list of the properties set on the SubstanceGroup.\n\n")
-        .def("GetPropsAsDict", GetPropsAsDict,
-             (python::arg("self"), python::arg("includePrivate") = true,
-              python::arg("includeComputed") = true),
-             "Returns a dictionary of the properties set on the "
-             "SubstanceGroup.\n"
-             " n.b. some properties cannot be converted to python types.\n");
-    python::def("GetMolSubstanceGroups", &getMolSubstanceGroups,
-                "returns a copy of the molecule's SubstanceGroups (if any)",
-                python::with_custodian_and_ward_postcall<0, 1>());
-    python::def("GetMolSubstanceGroupWithIdx", &getMolSubstanceGroupWithIdx,
-                "returns a particular SubstanceGroup from the molecule",
-                python::return_internal_reference<
-                    1, python::with_custodian_and_ward_postcall<0, 1>>());
-    python::def("ClearMolSubstanceGroups", &clearMolSubstanceGroups,
-                "removes all SubstanceGroups from a molecule (if any)");
-    python::def("CreateMolSubstanceGroup", &createMolSubstanceGroup,
-                (python::arg("mol"), python::arg("type")),
-                "creates a new SubstanceGroup associated with a molecule",
-                python::return_value_policy<
-                    python::reference_existing_object,
-                    python::with_custodian_and_ward_postcall<0, 1>>());
-  }
-};
-}  // namespace RDKit
-
-void wrap_sgroup() { RDKit::sgroup_wrap::wrap(); }
+//
+//  Copyright (C) 2019 Greg Landrum
+//
+//   @@ All Rights Reserved @@
+//  This file is part of the RDKit.
+//  The contents are covered by the terms of the BSD license
+//  which is included in the file license.txt, found at the root
+//  of the RDKit source tree.
+//
+
+#define NO_IMPORT_ARRAY
+#include 
+#include 
+#include 
+
+// ours
+#include 
+#include 
+#include "props.hpp"
+
+namespace python = boost::python;
+
+namespace RDKit {
+
+namespace {
+SubstanceGroup *getMolSubstanceGroupWithIdx(ROMol &mol, unsigned int idx) {
+  auto &sgs = getSubstanceGroups(mol);
+  if (idx >= sgs.size()) {
+    throw_index_error(idx);
+  }
+  return &(sgs[idx]);
+}
+
+std::vector getMolSubstanceGroups(ROMol &mol) {
+  return getSubstanceGroups(mol);
+}
+void clearMolSubstanceGroups(ROMol &mol) {
+  std::vector &sgs = getSubstanceGroups(mol);
+  sgs.clear();
+}
+
+SubstanceGroup *createMolSubstanceGroup(ROMol &mol, std::string type) {
+  SubstanceGroup sg(&mol, type);
+  addSubstanceGroup(mol, sg);
+  return &(getSubstanceGroups(mol).back());
+}
+
+void addBracketHelper(SubstanceGroup &self, python::object pts) {
+  unsigned int sz = python::extract(pts.attr("__len__")());
+  if (sz != 2 && sz != 3)
+    throw_value_error("pts object have a length of 2 or 3");
+
+  SubstanceGroup::Bracket bkt;
+  python::stl_input_iterator beg(pts);
+  unsigned int i = 0;
+  for (unsigned int i = 0; i < sz; ++i) {
+    bkt[i] = *beg;
+    ++beg;
+  }
+  self.addBracket(bkt);
+}
+
+}  // namespace
+
+std::string sGroupClassDoc =
+    "A collection of atoms and bonds with associated properties\n";
+
+struct sgroup_wrap {
+  static void wrap() {
+    // register the vector_indexing_suite for SubstanceGroups
+    // if it hasn't already been done.
+    // logic from https://stackoverflow.com/a/13017303
+    boost::python::type_info info =
+        boost::python::type_id>();
+    const boost::python::converter::registration *reg =
+        boost::python::converter::registry::query(info);
+    if (reg == NULL || (*reg).m_to_python == NULL) {
+      python::class_>("SubstanceGroup_VECT")
+          .def(python::vector_indexing_suite<
+               std::vector>());
+    }
+
+    python::class_>(
+        "SubstanceGroup", sGroupClassDoc.c_str(), python::no_init)
+        .def("GetOwningMol", &SubstanceGroup::getOwningMol,
+             "returns the molecule owning this SubstanceGroup",
+             python::return_internal_reference<>())
+        .def("GetIndexInMol", &SubstanceGroup::getIndexInMol,
+             "returns the index of this SubstanceGroup in the owning "
+             "molecule's list.")
+        .def(
+            "GetAtoms", &SubstanceGroup::getAtoms,
+            "returns a list of the indices of the atoms in this SubstanceGroup",
+            python::return_value_policy())
+        .def("GetParentAtoms", &SubstanceGroup::getParentAtoms,
+             "returns a list of the indices of the parent atoms in this "
+             "SubstanceGroup",
+             python::return_value_policy())
+        .def(
+            "GetBonds", &SubstanceGroup::getBonds,
+            "returns a list of the indices of the bonds in this SubstanceGroup",
+            python::return_value_policy())
+        .def("AddAtomWithIdx", &SubstanceGroup::addAtomWithIdx)
+        .def("AddBondWithIdx", &SubstanceGroup::addBondWithIdx)
+        .def("AddParentAtomWithIdx", &SubstanceGroup::addParentAtomWithIdx)
+        .def("AddAtomWithBookmark", &SubstanceGroup::addAtomWithBookmark)
+        .def("AddParentAtomWithBookmark",
+             &SubstanceGroup::addParentAtomWithBookmark)
+        .def("AddCState", &SubstanceGroup::addCState)
+        .def("AddBondWithBookmark", &SubstanceGroup::addBondWithBookmark)
+        .def("AddAttachPoint", &SubstanceGroup::addAttachPoint)
+        .def("AddBracket", addBracketHelper)
+
+        .def("SetProp",
+             (void (RDProps::*)(const std::string &, std::string, bool) const) &
+                 SubstanceGroup::setProp,
+             (python::arg("self"), python::arg("key"), python::arg("val"),
+              python::arg("computed") = false),
+             "sets the value of a particular property")
+        .def("SetDoubleProp",
+             (void (RDProps::*)(const std::string &, double, bool) const) &
+                 SubstanceGroup::setProp,
+             (python::arg("self"), python::arg("key"), python::arg("val"),
+              python::arg("computed") = false),
+             "sets the value of a particular property")
+        .def("SetIntProp",
+             (void (RDProps::*)(const std::string &, int, bool) const) &
+                 SubstanceGroup::setProp,
+             (python::arg("self"), python::arg("key"), python::arg("val"),
+              python::arg("computed") = false),
+             "sets the value of a particular property")
+        .def(
+            "SetUnsignedProp",
+            (void (RDProps::*)(const std::string &, unsigned int, bool) const) &
+                SubstanceGroup::setProp,
+            (python::arg("self"), python::arg("key"), python::arg("val"),
+             python::arg("computed") = false),
+            "sets the value of a particular property")
+        .def("SetBoolProp",
+             (void (RDProps::*)(const std::string &, bool, bool) const) &
+                 SubstanceGroup::setProp,
+             (python::arg("self"), python::arg("key"), python::arg("val"),
+              python::arg("computed") = false),
+             "sets the value of a particular property")
+        .def("HasProp",
+             (bool (RDProps::*)(const std::string &) const) &
+                 SubstanceGroup::hasProp,
+             "returns whether or not a particular property exists")
+        .def("GetProp",
+             (std::string(RDProps::*)(const std::string &) const) &
+                 SubstanceGroup::getProp,
+             "returns the value of a particular property")
+        .def("GetIntProp",
+             (int (RDProps::*)(const std::string &) const) &
+                 SubstanceGroup::getProp,
+             "returns the value of a particular property")
+        .def("GetUnsignedProp",
+             (unsigned int (RDProps::*)(const std::string &) const) &
+                 SubstanceGroup::getProp,
+             "returns the value of a particular property")
+        .def("GetDoubleProp",
+             (double (RDProps::*)(const std::string &) const) &
+                 SubstanceGroup::getProp,
+             "returns the value of a particular property")
+        .def("GetBoolProp",
+             (bool (RDProps::*)(const std::string &) const) &
+                 SubstanceGroup::getProp,
+             "returns the value of a particular property")
+        .def("GetPropNames", &SubstanceGroup::getPropList,
+             (python::arg("self"), python::arg("includePrivate") = false,
+              python::arg("includeComputed") = false),
+             "Returns a list of the properties set on the SubstanceGroup.\n\n")
+        .def("GetPropsAsDict", GetPropsAsDict,
+             (python::arg("self"), python::arg("includePrivate") = true,
+              python::arg("includeComputed") = true),
+             "Returns a dictionary of the properties set on the "
+             "SubstanceGroup.\n"
+             " n.b. some properties cannot be converted to python types.\n");
+    python::def("GetMolSubstanceGroups", &getMolSubstanceGroups,
+                "returns a copy of the molecule's SubstanceGroups (if any)",
+                python::with_custodian_and_ward_postcall<0, 1>());
+    python::def("GetMolSubstanceGroupWithIdx", &getMolSubstanceGroupWithIdx,
+                "returns a particular SubstanceGroup from the molecule",
+                python::return_internal_reference<
+                    1, python::with_custodian_and_ward_postcall<0, 1>>());
+    python::def("ClearMolSubstanceGroups", &clearMolSubstanceGroups,
+                "removes all SubstanceGroups from a molecule (if any)");
+    python::def("CreateMolSubstanceGroup", &createMolSubstanceGroup,
+                (python::arg("mol"), python::arg("type")),
+                "creates a new SubstanceGroup associated with a molecule",
+                python::return_value_policy<
+                    python::reference_existing_object,
+                    python::with_custodian_and_ward_postcall<0, 1>>());
+  }
+};
+}  // namespace RDKit
+
+void wrap_sgroup() { RDKit::sgroup_wrap::wrap(); }
diff --git a/Code/GraphMol/Wrap/rough_test.py b/Code/GraphMol/Wrap/rough_test.py
index 82eb94696..2d737dc88 100644
--- a/Code/GraphMol/Wrap/rough_test.py
+++ b/Code/GraphMol/Wrap/rough_test.py
@@ -714,7 +714,7 @@ class TestCase(unittest.TestCase):
   def test21Robustification(self):
     ok = False
     # FIX: at the moment I can't figure out how to catch the
-    # actual exception that BPL is throwinng when it gets
+    # actual exception that BPL is throwing when it gets
     # invalid arguments (Boost.Python.ArgumentError)
     try:
       Chem.MolFromSmiles('C=O').HasSubstructMatch(Chem.MolFromSmarts('fiib'))
@@ -1145,7 +1145,7 @@ mol-4,CCOC
     self.assertTrue(smiSup[4])
     self.assertTrue(len(m) == 5)
 
-    # order dependance:
+    # order dependence:
     smiSup.SetData(inD, delimiter=",", smilesColumn=0, nameColumn=-1, titleLine=0)
     self.assertTrue(smiSup[4])
     self.assertTrue(len(smiSup) == 5)
@@ -4817,7 +4817,7 @@ M  END
       "C1=CNC=C1",  #pyrrole
       "C1=COC=N1",  # oxazole
       "C1=CSC=N1",  # thiazole
-      "C1=CNC=N1",  # imidzole
+      "C1=CNC=N1",  # imidazole
       "C1=CNN=C1",  # pyrazole
       "C1=CON=C1",  # isoxazole
       "C1=CSN=C1",  # isothiazole
diff --git a/Code/GraphMol/Wrap/test_data/bond-query.cdxml b/Code/GraphMol/Wrap/test_data/bond-query.cdxml
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Wrap/test_data/bond-query.mol b/Code/GraphMol/Wrap/test_data/bond-query.mol
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Wrap/test_data/bond-query2.mol b/Code/GraphMol/Wrap/test_data/bond-query2.mol
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Wrap/test_data/bond-query3.mol b/Code/GraphMol/Wrap/test_data/bond-query3.mol
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Wrap/test_data/bond-query4.mol b/Code/GraphMol/Wrap/test_data/bond-query4.mol
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Wrap/test_data/bond_types.cdxml b/Code/GraphMol/Wrap/test_data/bond_types.cdxml
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Wrap/test_data/chain1.cdxml b/Code/GraphMol/Wrap/test_data/chain1.cdxml
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Wrap/test_data/chain2.cdxml b/Code/GraphMol/Wrap/test_data/chain2.cdxml
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Wrap/test_data/chain3.cdxml b/Code/GraphMol/Wrap/test_data/chain3.cdxml
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Wrap/test_data/chain4.cdxml b/Code/GraphMol/Wrap/test_data/chain4.cdxml
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Wrap/test_data/easy_smiles.txt b/Code/GraphMol/Wrap/test_data/easy_smiles.txt
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Wrap/test_data/list-query.cdxml b/Code/GraphMol/Wrap/test_data/list-query.cdxml
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Wrap/test_data/list-query.mol b/Code/GraphMol/Wrap/test_data/list-query.mol
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Wrap/test_data/mol1.mol b/Code/GraphMol/Wrap/test_data/mol1.mol
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Wrap/test_data/ntp_smiles.txt b/Code/GraphMol/Wrap/test_data/ntp_smiles.txt
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Wrap/test_data/query.cdxml b/Code/GraphMol/Wrap/test_data/query.cdxml
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Wrap/test_data/query2.mol b/Code/GraphMol/Wrap/test_data/query2.mol
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Wrap/test_data/ring1.cdxml b/Code/GraphMol/Wrap/test_data/ring1.cdxml
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Wrap/test_data/ring2.cdxml b/Code/GraphMol/Wrap/test_data/ring2.cdxml
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Wrap/test_data/ring3.cdxml b/Code/GraphMol/Wrap/test_data/ring3.cdxml
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Wrap/test_data/rtecs_smiles.5000.txt b/Code/GraphMol/Wrap/test_data/rtecs_smiles.5000.txt
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/Wrap/test_data/rtecs_smiles.txt b/Code/GraphMol/Wrap/test_data/rtecs_smiles.txt
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/libs/.cvskeep b/Code/GraphMol/libs/.cvskeep
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/regress.txt b/Code/GraphMol/regress.txt
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/sanitTest.cpp b/Code/GraphMol/sanitTest.cpp
index e5ee20cd2..1635ab559 100644
--- a/Code/GraphMol/sanitTest.cpp
+++ b/Code/GraphMol/sanitTest.cpp
@@ -86,7 +86,7 @@ int main(int argc, char *argv[]) {
 
       // MolOps::setHybridization(*m);
       delete m;
-    } catch (MolSanitizeException) {
+    } catch (MolSanitizeException &) {
       BOOST_LOG(rdErrorLog) << smi << "\n";
       delete m;
     }
diff --git a/Code/GraphMol/testExecs/.cvskeep b/Code/GraphMol/testExecs/.cvskeep
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/test_data/canonSmiles.long.smi b/Code/GraphMol/test_data/canonSmiles.long.smi
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/test_data/canonSmiles.past_problems.smi b/Code/GraphMol/test_data/canonSmiles.past_problems.smi
old mode 100755
new mode 100644
diff --git a/Code/GraphMol/test_data/canonSmiles.smi b/Code/GraphMol/test_data/canonSmiles.smi
old mode 100755
new mode 100644
diff --git a/Code/JavaWrappers/AvalonLib.i b/Code/JavaWrappers/AvalonLib.i
old mode 100755
new mode 100644
diff --git a/Code/JavaWrappers/ROMol_doc.i b/Code/JavaWrappers/ROMol_doc.i
index b9de47a3d..439923df4 100644
--- a/Code/JavaWrappers/ROMol_doc.i
+++ b/Code/JavaWrappers/ROMol_doc.i
@@ -60,7 +60,7 @@ Add a new conformation to the molecule.
 

@param conf - conformation to be added to the molecule, this molecule takes ownership of the conformer -assignId - a unique ID will be assigned to the the conformation if true otherwise it is assumed that the conformation already has an (unique) ID set +assignId - a unique ID will be assigned to the conformation if true otherwise it is assumed that the conformation already has an (unique) ID set */ public"; diff --git a/Code/JavaWrappers/csharp_wrapper/Properties/AssemblyInfo.cs b/Code/JavaWrappers/csharp_wrapper/Properties/AssemblyInfo.cs old mode 100755 new mode 100644 diff --git a/Code/JavaWrappers/csharp_wrapper/RDKit2DotNet.csproj b/Code/JavaWrappers/csharp_wrapper/RDKit2DotNet.csproj old mode 100755 new mode 100644 diff --git a/Code/JavaWrappers/csharp_wrapper/RDKitCSharpTest/Program.cs b/Code/JavaWrappers/csharp_wrapper/RDKitCSharpTest/Program.cs old mode 100755 new mode 100644 diff --git a/Code/JavaWrappers/csharp_wrapper/RDKitCSharpTest/Properties/AssemblyInfo.cs b/Code/JavaWrappers/csharp_wrapper/RDKitCSharpTest/Properties/AssemblyInfo.cs old mode 100755 new mode 100644 diff --git a/Code/JavaWrappers/csharp_wrapper/RDKitCSharpTest/RDKitCSharpTest.csproj b/Code/JavaWrappers/csharp_wrapper/RDKitCSharpTest/RDKitCSharpTest.csproj old mode 100755 new mode 100644 diff --git a/Code/JavaWrappers/gmwrapper/src-test/org/RDKit/InchiTests.java b/Code/JavaWrappers/gmwrapper/src-test/org/RDKit/InchiTests.java old mode 100755 new mode 100644 diff --git a/Code/ML/Cluster/Murtagh/hc.f b/Code/ML/Cluster/Murtagh/hc.f old mode 100755 new mode 100644 diff --git a/Code/ML/Cluster/Murtagh/hcdriver.f b/Code/ML/Cluster/Murtagh/hcdriver.f old mode 100755 new mode 100644 diff --git a/Code/Numerics/Matrix.h b/Code/Numerics/Matrix.h index 38548905e..266cd7bd4 100644 --- a/Code/Numerics/Matrix.h +++ b/Code/Numerics/Matrix.h @@ -244,7 +244,7 @@ class Matrix { Multiply a Matrix A with a second Matrix B so the result is C = A*B - \param A the the first Matrix used in the multiplication + \param A the first Matrix used in the multiplication \param B the Matrix by which to multiply \param C Matrix to use for the results diff --git a/Code/Query/testExecs/.cvskeep b/Code/Query/testExecs/.cvskeep old mode 100755 new mode 100644 diff --git a/Code/RDGeneral/testExecs/.cvskeep b/Code/RDGeneral/testExecs/.cvskeep old mode 100755 new mode 100644 diff --git a/Code/SimDivPickers/Wrap/test_data/points.csv b/Code/SimDivPickers/Wrap/test_data/points.csv old mode 100755 new mode 100644 diff --git a/Code/cmake/Modules/FindEigen3.cmake b/Code/cmake/Modules/FindEigen3.cmake index bfb332baf..7e488b8c7 100644 --- a/Code/cmake/Modules/FindEigen3.cmake +++ b/Code/cmake/Modules/FindEigen3.cmake @@ -18,7 +18,7 @@ # Eigen3::Eigen - The header-only Eigen library # # This module reads hints about search locations from -# the following enviroment variables: +# the following environment variables: # # EIGEN3_ROOT # EIGEN3_ROOT_DIR diff --git a/Code/notes.txt b/Code/notes.txt old mode 100755 new mode 100644 diff --git a/Contrib/ChiralPairs/ChiralDescriptors.py b/Contrib/ChiralPairs/ChiralDescriptors.py index 89cd83bbd..f01d69b22 100644 --- a/Contrib/ChiralPairs/ChiralDescriptors.py +++ b/Contrib/ChiralPairs/ChiralDescriptors.py @@ -260,7 +260,7 @@ def calculateChiralDescriptors(mol, idxChiral, dists, verbose=False): desc['maxDistfromCC'] = int(np.max(paths)) # determine the number of neighbors per shell/distance level nlevels=Counter(paths.astype(int)) - # consider the levels until a path lenght of 10 + # consider the levels until a path length of 10 for i in range(1,11): desc['nLevel'+str(i)]=nlevels[i] # determine the number of nitrogen and oxygen atoms in a certain level around the chiral center diff --git a/Contrib/Glare/glare.py b/Contrib/Glare/glare.py index 452c416e6..04ab2a9a8 100755 --- a/Contrib/Glare/glare.py +++ b/Contrib/Glare/glare.py @@ -320,7 +320,7 @@ class Glare: for iteration in range(1, self.maxIterations+1): # chunk of the total library into smaller more managable sets - # and run combinitorial analysis on the sub libraries + # and run combinatorial analysis on the sub libraries # each of these records the number of times a sidechain is used # in a successful enumeration which is then used to prune the # library at the end @@ -330,7 +330,7 @@ class Glare: good = total = 0.0 chunked_libs = library.chunk(self.numPartitions) - # for each chunk, do the combinitorial check to see + # for each chunk, do the combinatorial check to see # if reagents make good products for libidx, chunk in enumerate(chunked_libs): g,t = chunk.evaluate(props) @@ -364,7 +364,7 @@ class Glare: Ki = (1.0 - K0) * (Gi - G0) / (Gt - G0) + K0; fraction = min(1.0, Ki) - # prune the library to keep the highest occuring sidechains + # prune the library to keep the highest occurring sidechains # note that even if all sidechains are acceptable, # some will always get pruned @@ -402,7 +402,7 @@ class Glare: )) print ("EFFECTIVENESS : %s%%"%(library.effectiveness()*100.)) - # stopping critieria + # stopping criteria if iteration and Gi < 1e-12: return elif abs(Gi - self.desiredFinalGoodness) < 0.001 or \ diff --git a/Contrib/LEF/DistancePlot.py b/Contrib/LEF/DistancePlot.py index 2019dcedc..e686ddcb6 100644 --- a/Contrib/LEF/DistancePlot.py +++ b/Contrib/LEF/DistancePlot.py @@ -52,7 +52,7 @@ nameField = 'Compound_orig' propField = 'chemical_shift_1' # similarity threshold for a pair to be considered interesting. -# (i.e. pairs with a similiarity below this value will not be +# (i.e. pairs with a similarity below this value will not be # added to the output. similarityThreshold = 0.5 diff --git a/Contrib/LEF/README.txt b/Contrib/LEF/README.txt index 2ee9768be..e9221f7ec 100644 --- a/Contrib/LEF/README.txt +++ b/Contrib/LEF/README.txt @@ -1,10 +1,10 @@ This directory contains scripts for carrying out the calculations and analyis from the publications: 1) A. Vulpetti, U. Hommel, G. Landrum, R. Lewis and C. Dalvit, "Design and NMR-based screening of LEF, -a library of chemical fragments with different Local Environment of Fluorine" J. Am. Chem. Soc. 131 (2009) 12949-12959. http://dx.doi.org/10.1021/ja905207t +a library of chemical fragments with different Local Environment of Fluorine" J. Am. Chem. Soc. 131 (2009) 12949-12959. https://doi.org/10.1021/ja905207t 2) A. Vulpetti, G. Landrum, S. Ruedisser, P. Erbel and C. Dalvit, "19F NMR Chemical Shift Prediction with -Fluorine Fingerprint Descriptor" J. of Fluorine Chemistry (2010). http://dx.doi.org/10.1016/j.jfluchem.2009.12.024 +Fluorine Fingerprint Descriptor" J. of Fluorine Chemistry (2010). https://doi.org/10.1016/j.jfluchem.2009.12.024 The scripts require that the RDKit (www.rdkit.org) be installed and properly configured. @@ -34,8 +34,8 @@ Commands to run: In the event you use the scripts for publication please reference the original publications: 1) A. Vulpetti, U. Hommel, G. Landrum, R. Lewis and C. Dalvit, "Design and NMR-based screening of LEF, -a library of chemical fragments with different Local Environment of Fluorine" J. Am. Chem. Soc. 131 (2009) 12949-12959. http://dx.doi.org/10.1021/ja905207t +a library of chemical fragments with different Local Environment of Fluorine" J. Am. Chem. Soc. 131 (2009) 12949-12959. https://doi.org/10.1021/ja905207t 2) A. Vulpetti, G. Landrum, S. Ruedisser, P. Erbel and C. Dalvit, "19F NMR Chemical Shift Prediction with -Fluorine Fingerprint Descriptor" J. of Fluorine Chemistry (2010). http://dx.doi.org/10.1016/j.jfluchem.2009.12.024 +Fluorine Fingerprint Descriptor" J. of Fluorine Chemistry (2010). https://doi.org/10.1016/j.jfluchem.2009.12.024 diff --git a/Contrib/M_Kossner/BaseFeatures_DIP2_NoMicrospecies.fdef b/Contrib/M_Kossner/BaseFeatures_DIP2_NoMicrospecies.fdef old mode 100755 new mode 100644 diff --git a/Contrib/M_Kossner/Frames.py b/Contrib/M_Kossner/Frames.py index 7dc16576a..2daf22f5a 100644 --- a/Contrib/M_Kossner/Frames.py +++ b/Contrib/M_Kossner/Frames.py @@ -15,7 +15,7 @@ # Usage: Frames.py # Output: # - sd files containing all molecules belonging to one frame (1.sdf, 2.sdf etc) -# - frames.smi containing the (caninical) smiles and count of occurrence +# - frames.smi containing the (canonical) smiles and count of occurrence # diff --git a/Contrib/PBF/PBFRDKit.cpp b/Contrib/PBF/PBFRDKit.cpp index b9a7fab7a..7e2965740 100644 --- a/Contrib/PBF/PBFRDKit.cpp +++ b/Contrib/PBF/PBFRDKit.cpp @@ -1,156 +1,156 @@ -// -// Copyright (c) 2012, Institue of Cancer Research. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -//modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// * Neither the name of Institue of Cancer Research. -// nor the names of its contributors may be used to endorse or promote -// products derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// For more information on the Plane of Best Fit please see http://pubs.acs.org/doi/abs/10.1021/ci300293f -// -// If this code has been useful to you, please include the reference -// in any work which has made use of it: - -// Plane of Best Fit: A Novel Method to Characterize the Three-Dimensionality of Molecules, Nicholas C. Firth, Nathan Brown, and Julian Blagg, Journal of Chemical Information and Modeling 2012 52 (10), 2516-2525 - -// -// -// Created by Nicholas Firth, November 2011 -// Modified by Greg Landrum for inclusion in the RDKit distribution November 2012 -// - -#include "PBFRDKit.h" -#include -#include -#include -#include - -#include -using namespace RDKit; - -void getSmallestEigenVector(double fSumXX,double fSumXY,double fSumXZ, - double fSumYY,double fSumYZ,double fSumZZ, - double &x,double &y, double &z); - -double distanceFromAPlane(const RDGeom::Point3D &pt,const std::vector &plane, double denom){ - double numer=0.0; - numer = std::fabs(pt.x*plane[0]+pt.y*plane[1]+pt.z*plane[2]+plane[3]); - - return numer/denom; -} - -bool getBestFitPlane(const std::vector &points, - std::vector &plane, - const std::vector *weights) { - PRECONDITION((!weights || weights->size()>=points.size()),"bad weights vector"); - RDGeom::Point3D origin(0,0,0); - double wSum=0.0; - - for(unsigned int i=0;i eigensolver(mat); - if(eigensolver.info()!=Eigen::Success){ - BOOST_LOG(rdErrorLog)<<"eigenvalue calculation did not converge"<=1,"molecule has no conformers") - int numAtoms = mol.getNumAtoms(); - if(numAtoms<4) return 0; - - const Conformer &conf = mol.getConformer(confId); - if(!conf.is3D()) return 0 ; - - std::vector points; - points.reserve(numAtoms); - for(unsigned int i=0; i plane(4); - getBestFitPlane(points,plane,0); - - double denom=0.0; - for(unsigned int i=0; i<3; ++i){ - denom += plane[i]*plane[i]; - } - denom = pow(denom,0.5); - - double res=0.0; - for(unsigned int i=0; i +#include +#include +#include + +#include +using namespace RDKit; + +void getSmallestEigenVector(double fSumXX,double fSumXY,double fSumXZ, + double fSumYY,double fSumYZ,double fSumZZ, + double &x,double &y, double &z); + +double distanceFromAPlane(const RDGeom::Point3D &pt,const std::vector &plane, double denom){ + double numer=0.0; + numer = std::fabs(pt.x*plane[0]+pt.y*plane[1]+pt.z*plane[2]+plane[3]); + + return numer/denom; +} + +bool getBestFitPlane(const std::vector &points, + std::vector &plane, + const std::vector *weights) { + PRECONDITION((!weights || weights->size()>=points.size()),"bad weights vector"); + RDGeom::Point3D origin(0,0,0); + double wSum=0.0; + + for(unsigned int i=0;i eigensolver(mat); + if(eigensolver.info()!=Eigen::Success){ + BOOST_LOG(rdErrorLog)<<"eigenvalue calculation did not converge"<=1,"molecule has no conformers") + int numAtoms = mol.getNumAtoms(); + if(numAtoms<4) return 0; + + const Conformer &conf = mol.getConformer(confId); + if(!conf.is3D()) return 0 ; + + std::vector points; + points.reserve(numAtoms); + for(unsigned int i=0; i plane(4); + getBestFitPlane(points,plane,0); + + double denom=0.0; + for(unsigned int i=0; i<3; ++i){ + denom += plane[i]*plane[i]; + } + denom = pow(denom,0.5); + + double res=0.0; + for(unsigned int i=0; i - -#include -#include -#include -#include - -using namespace RDKit; - -double PBFRD(ROMol&,int confId=-1); - -#endif +// +// Copyright (c) 2012, Institue of Cancer Research. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +//modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// * Neither the name of Institue of Cancer Research. +// nor the names of its contributors may be used to endorse or promote +// products derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// For more information on the Plane of Best Fit please see http://pubs.acs.org/doi/abs/10.1021/ci300293f +// +// If this code has been useful to you, please include the reference +// in any work which has made use of it: + +// Plane of Best Fit: A Novel Method to Characterize the Three-Dimensionality of Molecules, Nicholas C. Firth, Nathan Brown, and Julian Blagg, Journal of Chemical Information and Modeling 2012 52 (10), 2516-2525 + +// +// +// Created by Nicholas Firth, November 2011 + + + +#ifndef _PBFRDKit_h +#define _PBFRDKit_h + + +#include + +#include +#include +#include +#include + +using namespace RDKit; + +double PBFRD(ROMol&,int confId=-1); + +#endif diff --git a/Contrib/PBF/testData/egfr.sdf b/Contrib/PBF/testData/egfr.sdf old mode 100755 new mode 100644 diff --git a/Contrib/RxnRoleAssignment/identifyReactants.py b/Contrib/RxnRoleAssignment/identifyReactants.py index d767e1092..576937c9e 100644 --- a/Contrib/RxnRoleAssignment/identifyReactants.py +++ b/Contrib/RxnRoleAssignment/identifyReactants.py @@ -216,7 +216,7 @@ def _getBestCombination(rfps,pfps,output=False): print("Frequent reagent found: ", j) if temp not in tests: tests.append(temp) - # initalisation of the results + # initialisation of the results maxScore=0 maxDetailScore=0 finalReacts=[[]] @@ -281,7 +281,7 @@ def _getBestCombination(rfps,pfps,output=False): # test for almost perfect matchings (e.g. oxidations, reduction etc.) if scaffoldFPScore[0] > 0.9999 and detailFPScore[0] > 0.8: return finalReacts, finalNumUnmappedProdAtoms - # test for number of mapped product atoms e.g. to capture deprotections ealier + # test for number of mapped product atoms e.g. to capture deprotections earlier if len(finalNumUnmappedProdAtoms) > 0 and len(test) == 1: if finalNumUnmappedProdAtoms[0][1] == 0 and finalNumUnmappedProdAtoms[0][0] <= 3: return finalReacts, finalNumUnmappedProdAtoms diff --git a/Contrib/mmpa/README.txt b/Contrib/mmpa/README.txt index dd55c36f6..39e9ae0da 100644 --- a/Contrib/mmpa/README.txt +++ b/Contrib/mmpa/README.txt @@ -3,7 +3,7 @@ The fragment indexing algorithm used in the scripts is described in the followin Hussain, J., & Rea, C. (2010). "Computationally efficient algorithm to identify matched molecular pairs (MMPs) in large data sets." Journal of chemical information and modeling, 50(3), 339-348. -http://dx.doi.org/10.1021/ci900450m +https://doi.org/10.1021/ci900450m Wagener, M., & Lommerse, J. P. (2006). "The quest for bioisosteric replacements." Journal of chemical information and modeling, 46(2), 677-685. @@ -233,7 +233,7 @@ a) mmp: Find all MMPs of a input/query compound to the compounds in the db b) subs: Find all MMPs in the db where the LHS of the transform matches an input substructure. Make sure the attached points are donated by an asterisk and the -input substructure has been canonicalised (eg. [*]c1ccccc1). Note: Up to 3 attachement +input substructure has been canonicalised (eg. [*]c1ccccc1). Note: Up to 3 attachment points are allowed. c) trans: Find all MMPs that match the input transform/SMIRKS. Make sure the input @@ -300,4 +300,4 @@ In the event you use the scripts for publication please reference the original p Hussain, J., & Rea, C. (2010). "Computationally efficient algorithm to identify matched molecular pairs (MMPs) in large data sets." Journal of chemical information and modeling, 50(3), 339-348. -http://dx.doi.org/10.1021/ci900450m +https://doi.org/10.1021/ci900450m diff --git a/Contrib/mmpa/create_mmp_db.py b/Contrib/mmpa/create_mmp_db.py index 83bf3510b..ef647a76e 100644 --- a/Contrib/mmpa/create_mmp_db.py +++ b/Contrib/mmpa/create_mmp_db.py @@ -260,7 +260,7 @@ if (options.sma): outfile.close() - #set os enviroment for rdkit to use sqllite + #set os environment for rdkit to use sqllite os.environ['RD_USESQLLITE'] = '1' #use the DbCli utility in RDKit: http://code.google.com/p/rdkit/wiki/UsingTheDbCLI cmd = 'python $RDBASE/Projects/DbCLI/CreateDb.py --dbDir=%s_smarts --molFormat=smiles %s --noPairs --noFingerprints --noDescriptors --noProps --noMorganFps --noSmiles --silent' % ( diff --git a/Contrib/mmpa/indexing.py b/Contrib/mmpa/indexing.py index db112ea37..5614366a7 100644 --- a/Contrib/mmpa/indexing.py +++ b/Contrib/mmpa/indexing.py @@ -64,7 +64,7 @@ def get_symmetry_class(smi): m = Chem.MolFromSmiles(smi) symmetry_classes = Chem.CanonicalRankAtoms(m, breakTies=False) - #get the symmetry class of the attachements points + #get the symmetry class of the attachments points #Note: 1st star is the zero index, #2nd star is first index, etc for atom, symmetry_class in zip(m.GetAtoms(), symmetry_classes): @@ -81,9 +81,9 @@ def cansmirk(lhs, rhs, context): #2) For the LHS the 1st star will have label 1, 2nd star will have label 2 and so on #3) Do a symmetry check of lhs and rhs and use that to decide if the labels on # RHS or/and context need to change. - #4) For the rhs, if you have a choice (ie. two attachement points are symmetrically + #4) For the rhs, if you have a choice (ie. two attachment points are symmetrically # equivalent), always put the label with lower numerical value on the earlier - # attachement point on the cansmi-ed smiles + # attachment point on the cansmi-ed smiles #print "in: %s,%s" % (lhs,rhs) @@ -123,7 +123,7 @@ def cansmirk(lhs, rhs, context): #switch labels lhs based on position lhs = switch_labels_on_position(lhs) #change labels on rhs based on position but need to record - #the changes as need to appy them to the context + #the changes as need to apply them to the context isotope_track = build_track_dictionary(rhs, stars) rhs = switch_labels_on_position(rhs) context = switch_labels(isotope_track, stars, context) @@ -131,7 +131,7 @@ def cansmirk(lhs, rhs, context): #unsymmetric lhs and symmetric rhs elif ((lhs_sym[0] != lhs_sym[1]) and (rhs_sym[0] == rhs_sym[1])): #change labels on lhs based on position but need to record - #the changes as need to appy them to the context + #the changes as need to apply them to the context isotope_track = build_track_dictionary(lhs, stars) lhs = switch_labels_on_position(lhs) context = switch_labels(isotope_track, stars, context) @@ -159,7 +159,7 @@ def cansmirk(lhs, rhs, context): #alter lhs in usual way lhs = switch_labels_on_position(lhs) #change labels on rhs based on position but need to record - #the changes as need to appy them to the context + #the changes as need to apply them to the context isotope_track = build_track_dictionary(rhs, stars) rhs = switch_labels_on_position(rhs) context = switch_labels(isotope_track, stars, context) @@ -226,7 +226,7 @@ def cansmirk(lhs, rhs, context): #alter lhs in usual way lhs = switch_labels_on_position(lhs) #change labels on rhs based on position but need to record - #the changes as need to appy them to the context + #the changes as need to apply them to the context isotope_track = build_track_dictionary(rhs, stars) rhs = switch_labels_on_position(rhs) context = switch_labels(isotope_track, stars, context) @@ -346,7 +346,7 @@ def build_track_dictionary(smi, stars): def index_hydrogen_change(): #Algorithm details - #have an index of common fragment(key) => fragments conected to it (values) + #have an index of common fragment(key) => fragments connected to it (values) #Need to add *-H to the values where appropriate - and its #appropriate when the key is what you would get if you chopped a H off a cmpd. #Therefore simply need to check if key with the * replaced with a H is @@ -389,7 +389,7 @@ def index_hydrogen_change(): if __name__ == '__main__': #note max heavy atom count does not - #include the attachement points (*) + #include the attachment points (*) max_size = 10 ratio = 0.3 use_ratio = False @@ -455,7 +455,7 @@ if __name__ == '__main__': if (len(core) == 0): side_chains = context.split('.') - #minus 1 for the attachement pt + #minus 1 for the attachment pt if (add_to_index(side_chains[1], 1, cmpd_heavy) == True): context = side_chains[0] core = side_chains[1] @@ -466,7 +466,7 @@ if __name__ == '__main__': #add the context with id to index index.setdefault(context, []).append(value) - #minus 1 for the attachement pt + #minus 1 for the attachment pt if (add_to_index(side_chains[0], 1, cmpd_heavy) == True): context = side_chains[1] core = side_chains[0] diff --git a/Contrib/mmpa/mol_transform.py b/Contrib/mmpa/mol_transform.py index f79f6ff7d..179e7fde0 100644 --- a/Contrib/mmpa/mol_transform.py +++ b/Contrib/mmpa/mol_transform.py @@ -91,7 +91,7 @@ if __name__ == '__main__': for transform in infile: transform = transform.rstrip() - #need to conver the smiles to smart to get rid of any potential issues + #need to convert the smiles to smart to get rid of any potential issues lhs, rhs = transform.split(">>") if (lhs == "[*:1][H]"): diff --git a/Contrib/mmpa/rfrag.py b/Contrib/mmpa/rfrag.py index 1e3e65d51..11c7fc004 100644 --- a/Contrib/mmpa/rfrag.py +++ b/Contrib/mmpa/rfrag.py @@ -77,7 +77,7 @@ def delete_bonds(smi, id, mol, bonds, out): #remove the bond em.RemoveBond(i[0], i[1]) - #now add attachement points + #now add attachment points newAtomA = em.AddAtom(Chem.Atom(0)) em.AddBond(i[0], newAtomA, Chem.BondType.SINGLE) @@ -127,7 +127,7 @@ def delete_bonds(smi, id, mol, bonds, out): elif (isotope >= 2): #add the isotope labels for key in isotope_track: - #to add isotope lables + #to add isotope labels modifiedMol.GetAtomWithIdx(key).SetIsotope(isotope_track[key]) fragmented_smi = Chem.MolToSmiles(modifiedMol, isomericSmiles=True) diff --git a/Contrib/mmpa/search_mmp_db.py b/Contrib/mmpa/search_mmp_db.py index e7bbe42e4..e18437f83 100644 --- a/Contrib/mmpa/search_mmp_db.py +++ b/Contrib/mmpa/search_mmp_db.py @@ -151,7 +151,7 @@ def run_subs_query(subs): def run_subs_smarts_query(subs_smarts): - #set os enviroment for rdkit to use sqllite + #set os environment for rdkit to use sqllite os.environ['RD_USESQLLITE'] = '1' temp_core_ni_file = 'temp_core_ni_file_%s' % (os.getpid()) cmd = "python $RDBASE/Projects/DbCLI/SearchDb.py --dbDir=%s_smarts --smarts='%s' --silent >%s" % ( @@ -205,7 +205,7 @@ def run_trans_smarts_query(transform): matching_lhs = [] matching_rhs = [] - #set os enviroment for rdkit to use sqllite + #set os environment for rdkit to use sqllite os.environ['RD_USESQLLITE'] = '1' cmd = "python $RDBASE/Projects/DbCLI/SearchDb.py --dbDir=%s_smarts --smarts='%s' --silent" % (pre, @@ -357,7 +357,7 @@ parser.add_option('-p', '--prefix', action='store', dest='prefix', type='string' (options, args) = parser.parse_args() #note max heavy atom count does not -#include the attachement points (*) +#include the attachment points (*) max_size = 10 ratio = 0.3 use_ratio = False diff --git a/Contrib/pzc/p_con.py b/Contrib/pzc/p_con.py index ec2e22a67..7378a84c7 100644 --- a/Contrib/pzc/p_con.py +++ b/Contrib/pzc/p_con.py @@ -317,7 +317,7 @@ def to_table(data, bins=None): #alternative implementation with double loop #tt = np.asarray([[(x == [i,j]).all(1).sum() for j in cat_uni] # for i in cat_uni] ) - #other altervative: unique rows and bincount + #other alternative: unique rows and bincount elif np.isscalar(bins): bins_ = np.arange(bins + 1) - 0.5 data_ = data diff --git a/Data/Crippen.txt b/Data/Crippen.txt old mode 100755 new mode 100644 diff --git a/Data/DTDs/RD_Dataset.dtd b/Data/DTDs/RD_Dataset.dtd old mode 100755 new mode 100644 diff --git a/Data/DTDs/RD_Model.dtd b/Data/DTDs/RD_Model.dtd old mode 100755 new mode 100644 diff --git a/Data/FragmentDescriptors.csv b/Data/FragmentDescriptors.csv old mode 100755 new mode 100644 diff --git a/Data/FunctionalGroups.txt b/Data/FunctionalGroups.txt old mode 100755 new mode 100644 diff --git a/Data/NCI/first_200.props.sdf b/Data/NCI/first_200.props.sdf old mode 100755 new mode 100644 diff --git a/Data/NCI/first_200.tpsa.csv b/Data/NCI/first_200.tpsa.csv old mode 100755 new mode 100644 diff --git a/Data/NCI/first_5K.smi b/Data/NCI/first_5K.smi old mode 100755 new mode 100644 diff --git a/Data/NCI/first_5k.tpsa.csv b/Data/NCI/first_5k.tpsa.csv old mode 100755 new mode 100644 diff --git a/Data/RDData.sqlt b/Data/RDData.sqlt old mode 100755 new mode 100644 diff --git a/Data/RDTests.sqlt b/Data/RDTests.sqlt old mode 100755 new mode 100644 diff --git a/Data/SmartsLib/tests/mols.1000.pkl.gz b/Data/SmartsLib/tests/mols.1000.pkl.gz old mode 100755 new mode 100644 diff --git a/Data/rddata.sql b/Data/rddata.sql old mode 100755 new mode 100644 diff --git a/Data/struchk/checkfgs.chk b/Data/struchk/checkfgs.chk old mode 100755 new mode 100644 diff --git a/Data/struchk/checkfgs.opt b/Data/struchk/checkfgs.opt old mode 100755 new mode 100644 diff --git a/Data/struchk/checkfgs.trn b/Data/struchk/checkfgs.trn old mode 100755 new mode 100644 diff --git a/Docs/Book/GettingStartedInPython.rst b/Docs/Book/GettingStartedInPython.rst index a17617eb6..d1de8c67b 100644 --- a/Docs/Book/GettingStartedInPython.rst +++ b/Docs/Book/GettingStartedInPython.rst @@ -2860,7 +2860,7 @@ List of Available Descriptors +-----------------------------------------------------+------------------------------------------------------------+----------+ |Autocorr2D |New in 2017.09 release. Todeschini and Consoni "Descriptors | C++ | | |from Molecular Geometry" Handbook of Chemoinformatics | | -| |http://dx.doi.org/10.1002/9783527618279.ch37 | | +| |https://doi.org/10.1002/9783527618279.ch37 | | +-----------------------------------------------------+------------------------------------------------------------+----------+ @@ -2883,40 +2883,40 @@ These all require the molecule to have a 3D conformer. +-----------------------------------------------------+-------------------------------------------------------------+----------+ |Radius of gyration |G. A. Arteca "Molecular Shape Descriptors" | C++ | | |Reviews in Computational Chemistry vol 9 | | -| |http://dx.doi.org/10.1002/9780470125861.ch5 | | +| |https://doi.org/10.1002/9780470125861.ch5 | | +-----------------------------------------------------+-------------------------------------------------------------+----------+ |Inertial shape factor |Todeschini and Consoni "Descriptors from Molecular Geometry" | C++ | | |Handbook of Chemoinformatics | | -| |http://dx.doi.org/10.1002/9783527618279.ch37 | | +| |https://doi.org/10.1002/9783527618279.ch37 | | +-----------------------------------------------------+-------------------------------------------------------------+----------+ |Eccentricity |G. A. Arteca "Molecular Shape Descriptors" | C++ | | |Reviews in Computational Chemistry vol 9 | | -| |http://dx.doi.org/10.1002/9780470125861.ch5 | | +| |https://doi.org/10.1002/9780470125861.ch5 | | +-----------------------------------------------------+-------------------------------------------------------------+----------+ |Asphericity |A. Baumgaertner, "Shapes of flexible vesicles" | C++ | | |J. Chem. Phys. 98:7496 | | | |(1993) | | -| |http://dx.doi.org/10.1063/1.464689 | | +| |https://doi.org/10.1063/1.464689 | | +-----------------------------------------------------+-------------------------------------------------------------+----------+ |Spherocity Index |Todeschini and Consoni "Descriptors from Molecular Geometry" | C++ | | |Handbook of Chemoinformatics | | -| |http://dx.doi.org/10.1002/9783527618279.ch37 | | +| |https://doi.org/10.1002/9783527618279.ch37 | | +-----------------------------------------------------+-------------------------------------------------------------+----------+ |Autocorr3D |New in 2017.09 release. Todeschini and Consoni "Descriptors | C++ | | |from Molecular Geometry" Handbook of Chemoinformatics | | -| |http://dx.doi.org/10.1002/9783527618279.ch37 | | +| |https://doi.org/10.1002/9783527618279.ch37 | | +-----------------------------------------------------+-------------------------------------------------------------+----------+ |RDF |New in 2017.09 release. Todeschini and Consoni "Descriptors | C++ | | |from Molecular Geometry" Handbook of Chemoinformatics | | -| |http://dx.doi.org/10.1002/9783527618279.ch37 | | +| |https://doi.org/10.1002/9783527618279.ch37 | | +-----------------------------------------------------+-------------------------------------------------------------+----------+ |MORSE |New in 2017.09 release. Todeschini and Consoni "Descriptors | C++ | | |from Molecular Geometry" Handbook of Chemoinformatics | | -| |http://dx.doi.org/10.1002/9783527618279.ch37 | | +| |https://doi.org/10.1002/9783527618279.ch37 | | +-----------------------------------------------------+-------------------------------------------------------------+----------+ |WHIM |New in 2017.09 release. Todeschini and Consoni "Descriptors | C++ | | |from Molecular Geometry" Handbook of Chemoinformatics | | -| |http://dx.doi.org/10.1002/9783527618279.ch37 | | +| |https://doi.org/10.1002/9783527618279.ch37 | | | | | | | |**Note** insufficient information is available to exactly | | | |reproduce values from DRAGON for these descriptors. We | | @@ -2924,7 +2924,7 @@ These all require the molecule to have a 3D conformer. +-----------------------------------------------------+-------------------------------------------------------------+----------+ |GETAWAY |New in 2017.09 release. Todeschini and Consoni "Descriptors | C++ | | |from Molecular Geometry" Handbook of Chemoinformatics | | -| |http://dx.doi.org/10.1002/9783527618279.ch37 | | +| |https://doi.org/10.1002/9783527618279.ch37 | | | | | | | |**Note** insufficient information is available to exactly | | | |reproduce values from DRAGON for these descriptors. We | | diff --git a/Docs/Book/RDKit_Book.rst b/Docs/Book/RDKit_Book.rst index 57a9908f1..181eb1291 100644 --- a/Docs/Book/RDKit_Book.rst +++ b/Docs/Book/RDKit_Book.rst @@ -1384,7 +1384,7 @@ are, as far as I know, unique to the RDKit. The algorithm identifies features in the molecule by doing substructure searches using a small number (12 in the ``2019.03`` release of the RDKit) of very generic SMARTS patterns - like ``[*]~[*]~[*](~[*])~[*]`` or ``[R]~1[R]~[R]~[R]~1``, and then hashing each -occurence of a pattern based on the atom and bond types involved. The fact that +occurrence of a pattern based on the atom and bond types involved. The fact that particular pattern matched the molecule at all is also stored by hashing the pattern ID and size. If a particular feature contains either a query atom or a query bond (e.g. something generated from SMARTS), the only information that is diff --git a/Docs/Book/data/5ht3ligs.sdf b/Docs/Book/data/5ht3ligs.sdf old mode 100755 new mode 100644 diff --git a/Docs/Book/data/cdk2.sdf b/Docs/Book/data/cdk2.sdf old mode 100755 new mode 100644 diff --git a/Docs/Book/images/similarity_map_rf.png b/Docs/Book/images/similarity_map_rf.png old mode 100755 new mode 100644 diff --git a/Docs/Book_jp/Getting_Started_with_RDKit_in_Python_jp.rst b/Docs/Book_jp/Getting_Started_with_RDKit_in_Python_jp.rst index e887c01b0..a7fbf1d6a 100644 --- a/Docs/Book_jp/Getting_Started_with_RDKit_in_Python_jp.rst +++ b/Docs/Book_jp/Getting_Started_with_RDKit_in_Python_jp.rst @@ -2644,7 +2644,7 @@ SSSR問題 | Autocorr2D | | 2017.09リリースで新しく導入 | C++ | | | | Todeschini and Consoni | | | | | “Descriptors from Molecular Geometry” Handbook of Chemoinformatics | | -| | | http://dx.doi.org/10.1002/9783527618279.ch37 | | +| | | https://doi.org/10.1002/9783527618279.ch37 | | +-------------------------------------------------------+----------------------------------------------------------------------+--------+ @@ -2667,44 +2667,44 @@ SSSR問題 +---------------------------+-------------------------------------------------------------------------------------------------------+------+ | Radius of gyration | | G. A. Arteca “Molecular Shape Descriptors” | C++ | | | | Reviews in Computational Chemistry vol 9 | | -| | | http://dx.doi.org/10.1002/9780470125861.ch5 | | +| | | https://doi.org/10.1002/9780470125861.ch5 | | +---------------------------+-------------------------------------------------------------------------------------------------------+------+ | Inertial shape factor | | Todeschini and Consoni | C++ | | | | “Descriptors from Molecular Geometry” Handbook of Chemoinformatics | | -| | | http://dx.doi.org/10.1002/9783527618279.ch37 | | +| | | https://doi.org/10.1002/9783527618279.ch37 | | +---------------------------+-------------------------------------------------------------------------------------------------------+------+ | Eccentricity | | G. A. Arteca “Molecular Shape Descriptors” | C++ | | | | Reviews in Computational Chemistry vol 9 | | -| | | http://dx.doi.org/10.1002/9780470125861.ch5 | | +| | | https://doi.org/10.1002/9780470125861.ch5 | | +---------------------------+-------------------------------------------------------------------------------------------------------+------+ | Asphericity | | A. Baumgaertner, “Shapes of flexible vesicles” | C++ | | | | *J. Chem. Phys.* **98**:7496 (1993) | | -| | | http://dx.doi.org/10.1063/1.464689 | | +| | | https://doi.org/10.1063/1.464689 | | +---------------------------+-------------------------------------------------------------------------------------------------------+------+ | Spherocity Index | | Todeschini and Consoni | C++ | | | | “Descriptors from Molecular Geometry” | | | | | Handbook of Chemoinformatics | | -| | | http://dx.doi.org/10.1002/9783527618279.ch37 | | +| | | https://doi.org/10.1002/9783527618279.ch37 | | +---------------------------+-------------------------------------------------------------------------------------------------------+------+ | Autocorr3D | | 2017.09リリースで新しく導入。 | C++ | | | | Todeschini and Consoni | | | | | “Descriptors from Molecular Geometry” Handbook of Chemoinformatics | | -| | | http://dx.doi.org/10.1002/9783527618279.ch37 | | +| | | https://doi.org/10.1002/9783527618279.ch37 | | +---------------------------+-------------------------------------------------------------------------------------------------------+------+ | RDF | | 2017.09リリースで新しく導入。 | C++ | | | | Todeschini and Consoni | | | | | “Descriptors from Molecular Geometry” Handbook of Chemoinformatics | | -| | | http://dx.doi.org/10.1002/9783527618279.ch37 | | +| | | https://doi.org/10.1002/9783527618279.ch37 | | +---------------------------+-------------------------------------------------------------------------------------------------------+------+ | MORSE | | 2017.09リリースで新しく導入。 | C++ | | | | Todeschini and Consoni | | | | | “Descriptors from Molecular Geometry” Handbook of Chemoinformatics | | -| | | http://dx.doi.org/10.1002/9783527618279.ch37 | | +| | | https://doi.org/10.1002/9783527618279.ch37 | | +---------------------------+-------------------------------------------------------------------------------------------------------+------+ | WHIM | | 2017.09リリースで新しく導入。 | C++ | | | | Todeschini and Consoni | | | | | “Descriptors from Molecular Geometry” Handbook of Chemoinformatics | | -| | | http://dx.doi.org/10.1002/9783527618279.ch37 | | +| | | https://doi.org/10.1002/9783527618279.ch37 | | | | | | | | | | **注意** DRAGONを使って求めたこれらの記述子の値を正確に再現するには十分な情報が手にはいりません。  | | | | | 我々はこれが近い実装と信じています。 | | @@ -2712,7 +2712,7 @@ SSSR問題 | GETAWAY | | 2017.09リリースで新しく導入。 | C++ | | | | Todeschini and Consoni | | | | | “Descriptors from Molecular Geometry” Handbook of Chemoinformatics | | -| | | http://dx.doi.org/10.1002/9783527618279.ch37 | | +| | | https://doi.org/10.1002/9783527618279.ch37 | | | | | | | | | | **注意** DRAGONを使って求めたこれらの記述子の値を正確に再現するには十分な情報が手にはいりません。 | | | | | 我々はこれが近い実装と信じています。 | | diff --git a/Docs/Code/Chem/FragmentCatalogs.html b/Docs/Code/Chem/FragmentCatalogs.html old mode 100755 new mode 100644 diff --git a/Docs/RD.css b/Docs/RD.css old mode 100755 new mode 100644 diff --git a/External/AvalonTools/AvalonTools.h b/External/AvalonTools/AvalonTools.h old mode 100755 new mode 100644 diff --git a/External/AvalonTools/CMakeLists.txt b/External/AvalonTools/CMakeLists.txt old mode 100755 new mode 100644 diff --git a/External/AvalonTools/Wrap/CMakeLists.txt b/External/AvalonTools/Wrap/CMakeLists.txt old mode 100755 new mode 100644 diff --git a/External/AvalonTools/Wrap/testAvalonTools.py b/External/AvalonTools/Wrap/testAvalonTools.py index 8b7b01544..c833f5652 100755 --- a/External/AvalonTools/Wrap/testAvalonTools.py +++ b/External/AvalonTools/Wrap/testAvalonTools.py @@ -409,7 +409,7 @@ class TestCase(unittest.TestCase): # self.assertNotEqual(fixed_mol.GetAtomWithIdx(0).GetChiralTag(),Chem.rdchem.ChiralType.CHI_UNSPECIFIED) def testAvalonCountFPs(self): - # need to go to longer bit counts to avoid collions: + # need to go to longer bit counts to avoid collisions: cv1 = pyAvalonTools.GetAvalonCountFP('c1ccccc1', True, nBits=6000) cv2 = pyAvalonTools.GetAvalonCountFP('c1ccccc1.c1ccccc1', True, nBits=6000) for idx, v in cv1.GetNonzeroElements().items(): diff --git a/External/INCHI-API/Wrap/CMakeLists.txt b/External/INCHI-API/Wrap/CMakeLists.txt old mode 100755 new mode 100644 diff --git a/External/YAeHMOP/Wrap/CMakeLists.txt b/External/YAeHMOP/Wrap/CMakeLists.txt old mode 100755 new mode 100644 diff --git a/ReleaseNotes.md b/ReleaseNotes.md index 5f8bf2368..535a50d46 100644 --- a/ReleaseNotes.md +++ b/ReleaseNotes.md @@ -4192,7 +4192,7 @@ Removed modules: 2952272) - Double bonds with unspecified stereochemistry are now correctly flagged when output to mol files. (issue 2963522) - - A segmentation fault that occured when kekulizing modified + - A segmentation fault that occurred when kekulizing modified molecules has been fixed. (issue 2983794) ## New Features diff --git a/Web/RDExtras/.htaccess b/Web/RDExtras/.htaccess old mode 100755 new mode 100644 diff --git a/build_support/pkg_version.py b/build_support/pkg_version.py index b3906030c..121ee7eaf 100644 --- a/build_support/pkg_version.py +++ b/build_support/pkg_version.py @@ -1,72 +1,72 @@ -from __future__ import print_function -import os -import re -from datetime import datetime -from setuptools import setup - -pkg_version = '' -src_dir = os.path.realpath(__file__) -have_src_dir = os.path.isfile(src_dir) -i = 0 -while (i < 2 and have_src_dir): - i += 1 - src_dir = os.path.dirname(src_dir) - have_src_dir = os.path.isdir(src_dir) -if (not have_src_dir): - raise OSError('Could not find SRC_DIR, got: ' + str(src_dir)) -# parse root CMakeLists.txt and Code/cmake/Modules/RDKitUtils.cmake -root_cmakelists_path = os.path.join(src_dir, 'CMakeLists.txt') -rdkitutils_path = os.path.join(src_dir, 'Code', 'cmake', - 'Modules', 'RDKitUtils.cmake') - -var_dict = {} -for file in (root_cmakelists_path, rdkitutils_path): - with open(file, 'rt') as hnd: - # vars we want to read - var_set = set(['RDKit_Year', 'RDKit_Month', 'RDKit_Revision', - 'RDKit_ABI', 'RDKit_RELEASENAME']) - line = hnd.readline() - while (line): - # is this an uncommented set command? - m = re.match('^\s*set\s*\((\w+)\s*\"(.*)\"\s*\)', - line, re.IGNORECASE) - # if it is - if (m is not None): - # extract the var name - var_name = m.group(1) - if (var_name in var_set): - # if the var name is in the vars we want to read - var_value = m.group(2) - keepLooping = True - while (keepLooping): - # recursively replace variables we already found - m = re.match('^.*\${(\w+)}', var_value) - keepLooping = (m is not None) - if (keepLooping): - v = var_dict.get(m.group(1)) - # if the variable is not defined, remove - # the preceding dot - eat_dot = 0 - if (v is None): - v = '' - eat_dot = 1 - # replace variable name with its value - s = m.start(1) - (2 + eat_dot) - e = m.end(1) + 1 - var_value = var_value[:s] + v + var_value[e:] - # assign variable value and keep parsing - var_dict[var_name] = var_value - line = hnd.readline() -d = datetime.today().strftime('%Y%m%d') -rdkitVersion = var_dict.get('RDKit_RELEASENAME') -if (rdkitVersion is not None): - if rdkitVersion.endswith('.dev1'): - pkg_version = rdkitVersion[:-1] + d - else: - pkg_version = rdkitVersion -else: - # if extracting rdkitVersion somehow failed, use the date - pkg_version = d - -print('rdkitVersion:', pkg_version) -setup(rdkitVersion = pkg_version) +from __future__ import print_function +import os +import re +from datetime import datetime +from setuptools import setup + +pkg_version = '' +src_dir = os.path.realpath(__file__) +have_src_dir = os.path.isfile(src_dir) +i = 0 +while (i < 2 and have_src_dir): + i += 1 + src_dir = os.path.dirname(src_dir) + have_src_dir = os.path.isdir(src_dir) +if (not have_src_dir): + raise OSError('Could not find SRC_DIR, got: ' + str(src_dir)) +# parse root CMakeLists.txt and Code/cmake/Modules/RDKitUtils.cmake +root_cmakelists_path = os.path.join(src_dir, 'CMakeLists.txt') +rdkitutils_path = os.path.join(src_dir, 'Code', 'cmake', + 'Modules', 'RDKitUtils.cmake') + +var_dict = {} +for file in (root_cmakelists_path, rdkitutils_path): + with open(file, 'rt') as hnd: + # vars we want to read + var_set = set(['RDKit_Year', 'RDKit_Month', 'RDKit_Revision', + 'RDKit_ABI', 'RDKit_RELEASENAME']) + line = hnd.readline() + while (line): + # is this an uncommented set command? + m = re.match('^\s*set\s*\((\w+)\s*\"(.*)\"\s*\)', + line, re.IGNORECASE) + # if it is + if (m is not None): + # extract the var name + var_name = m.group(1) + if (var_name in var_set): + # if the var name is in the vars we want to read + var_value = m.group(2) + keepLooping = True + while (keepLooping): + # recursively replace variables we already found + m = re.match('^.*\${(\w+)}', var_value) + keepLooping = (m is not None) + if (keepLooping): + v = var_dict.get(m.group(1)) + # if the variable is not defined, remove + # the preceding dot + eat_dot = 0 + if (v is None): + v = '' + eat_dot = 1 + # replace variable name with its value + s = m.start(1) - (2 + eat_dot) + e = m.end(1) + 1 + var_value = var_value[:s] + v + var_value[e:] + # assign variable value and keep parsing + var_dict[var_name] = var_value + line = hnd.readline() +d = datetime.today().strftime('%Y%m%d') +rdkitVersion = var_dict.get('RDKit_RELEASENAME') +if (rdkitVersion is not None): + if rdkitVersion.endswith('.dev1'): + pkg_version = rdkitVersion[:-1] + d + else: + pkg_version = rdkitVersion +else: + # if extracting rdkitVersion somehow failed, use the date + pkg_version = d + +print('rdkitVersion:', pkg_version) +setup(rdkitVersion = pkg_version) diff --git a/rdkit/Chem/AtomPairs/test_data/mols1000.aps.pkl.gz b/rdkit/Chem/AtomPairs/test_data/mols1000.aps.pkl.gz old mode 100755 new mode 100644 diff --git a/rdkit/Chem/AtomPairs/test_data/mols1000.pkl.gz b/rdkit/Chem/AtomPairs/test_data/mols1000.pkl.gz old mode 100755 new mode 100644 diff --git a/rdkit/Chem/AtomPairs/test_data/mols1000.tts.pkl.gz b/rdkit/Chem/AtomPairs/test_data/mols1000.tts.pkl.gz old mode 100755 new mode 100644 diff --git a/rdkit/Chem/Descriptors3D.py b/rdkit/Chem/Descriptors3D.py index d1f7bfb41..ef1ee448a 100644 --- a/rdkit/Chem/Descriptors3D.py +++ b/rdkit/Chem/Descriptors3D.py @@ -63,7 +63,7 @@ if hasattr(rdMolDescriptors, 'CalcPMI1'): NPR1.__doc__ = """ Normalized principal moments ratio 1 (=I1/I3) from Sauer and Schwarz JCIM 43:987-1003 (2003) - https://dx.doi.org/10.1021/ci025599w + https://doi.org/10.1021/ci025599w **Arguments** @@ -81,7 +81,7 @@ if hasattr(rdMolDescriptors, 'CalcPMI1'): NPR2.__doc__ = """ Normalized principal moments ratio 2 (=I2/I3) from Sauer and Schwarz JCIM 43:987-1003 (2003) - https://dx.doi.org/10.1021/ci025599w + https://doi.org/10.1021/ci025599w **Arguments** @@ -100,7 +100,7 @@ if hasattr(rdMolDescriptors, 'CalcPMI1'): from Todeschini and Consoni "Descriptors from Molecular Geometry" Handbook of Chemoinformatics - http://dx.doi.org/10.1002/9783527618279.ch37 + https://doi.org/10.1002/9783527618279.ch37 Definition: for planar molecules: sqrt( sqrt(pm3*pm2)/MW ) @@ -122,7 +122,7 @@ if hasattr(rdMolDescriptors, 'CalcPMI1'): from Todeschini and Consoni "Descriptors from Molecular Geometry" Handbook of Chemoinformatics - http://dx.doi.org/10.1002/9783527618279.ch37 + https://doi.org/10.1002/9783527618279.ch37 Definition: pm2 / (pm1*pm3) @@ -143,7 +143,7 @@ if hasattr(rdMolDescriptors, 'CalcPMI1'): from Todeschini and Consoni "Descriptors from Molecular Geometry" Handbook of Chemoinformatics - http://dx.doi.org/10.1002/9783527618279.ch37 + https://doi.org/10.1002/9783527618279.ch37 Definition: sqrt(pm3**2 -pm1**2) / pm3**2 @@ -164,7 +164,7 @@ if hasattr(rdMolDescriptors, 'CalcPMI1'): from Todeschini and Consoni "Descriptors from Molecular Geometry" Handbook of Chemoinformatics - http://dx.doi.org/10.1002/9783527618279.ch37 + https://doi.org/10.1002/9783527618279.ch37 Definition: 0.5 * ((pm3-pm2)**2 + (pm3-pm1)**2 + (pm2-pm1)**2)/(pm1**2+pm2**2+pm3**2) @@ -185,7 +185,7 @@ if hasattr(rdMolDescriptors, 'CalcPMI1'): from Todeschini and Consoni "Descriptors from Molecular Geometry" Handbook of Chemoinformatics - http://dx.doi.org/10.1002/9783527618279.ch37 + https://doi.org/10.1002/9783527618279.ch37 Definition: 3 * pm1 / (pm1+pm2+pm3) where the moments are calculated without weights diff --git a/rdkit/Chem/Features/FeatDirUtilsRD.py b/rdkit/Chem/Features/FeatDirUtilsRD.py index 69172cb4b..a53f78e01 100644 --- a/rdkit/Chem/Features/FeatDirUtilsRD.py +++ b/rdkit/Chem/Features/FeatDirUtilsRD.py @@ -15,7 +15,7 @@ import math # BIG NOTE: we are going assume atom IDs starting from 0 instead of 1 # for all the functions in this file. This is so that they -# are reasonably indepedent of the combicode. However when using +# are reasonably independent of the combicode. However when using # with combicode the caller needs to make sure the atom IDs from combicode # are corrected before feeding them in here. diff --git a/rdkit/Chem/MCS.py b/rdkit/Chem/MCS.py index 66dfecd41..b5e2b6e3e 100755 --- a/rdkit/Chem/MCS.py +++ b/rdkit/Chem/MCS.py @@ -145,7 +145,7 @@ chain-only version are "[C;!R]" and "=;!@". # grow, which is just the powerset of the available bonds, excluding the # no-growth case. # -# This breadth-first growth takes into account all possibilties of using +# This breadth-first growth takes into account all possibilities of using # the available N bonds so all of those bonds are added to the exclusion # set of the newly expanded subgraphs. # diff --git a/rdkit/Chem/MolKey/InchiInfo.py b/rdkit/Chem/MolKey/InchiInfo.py index 063fa19a4..f43bfc51f 100644 --- a/rdkit/Chem/MolKey/InchiInfo.py +++ b/rdkit/Chem/MolKey/InchiInfo.py @@ -28,7 +28,7 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # -# Retrieve stereo and tautomer information from the the InChI string +# Retrieve stereo and tautomer information from the InChI string # Created on Sep 23, 2010 # Original author: Thomas Muellerk muelleth import logging diff --git a/rdkit/Chem/MolStandardize/resonance.py b/rdkit/Chem/MolStandardize/resonance.py index a825018dc..60f29e497 100644 --- a/rdkit/Chem/MolStandardize/resonance.py +++ b/rdkit/Chem/MolStandardize/resonance.py @@ -29,7 +29,7 @@ class ResonanceEnumerator(object): unconstrained_anions=False, allow_charge_separation=False, max_structures=MAX_STRUCTURES): """ - :param bool allow_incomplete_octets: include resonance structures whose octets are less complete than the the most octet-complete structure. + :param bool allow_incomplete_octets: include resonance structures whose octets are less complete than the most octet-complete structure. :param bool allow_charge_separation: include resonance structures featuring charge separation also when uncharged resonance structures exist. :param bool kekule_all: enumerate all possible degenerate Kekule resonance structures (the default is to include just one). :param bool unconstrained_cations: if False positively charged atoms left and right of N with an incomplete octet are acceptable only if the conjugated group has a positive total formal charge. diff --git a/rdkit/Chem/SimpleEnum/test_data/azide_reaction.rxn b/rdkit/Chem/SimpleEnum/test_data/azide_reaction.rxn old mode 100755 new mode 100644 diff --git a/rdkit/Chem/SimpleEnum/test_data/bad_value1.rxn b/rdkit/Chem/SimpleEnum/test_data/bad_value1.rxn old mode 100755 new mode 100644 diff --git a/rdkit/Chem/SimpleEnum/test_data/bad_value2.rxn b/rdkit/Chem/SimpleEnum/test_data/bad_value2.rxn old mode 100755 new mode 100644 diff --git a/rdkit/Chem/SimpleEnum/test_data/bad_value3.rxn b/rdkit/Chem/SimpleEnum/test_data/bad_value3.rxn old mode 100755 new mode 100644 diff --git a/rdkit/Chem/SimpleEnum/test_data/boronic1.rxn b/rdkit/Chem/SimpleEnum/test_data/boronic1.rxn old mode 100755 new mode 100644 diff --git a/rdkit/Chem/Subshape/test_data/5ht3_mol1.shp.pkl b/rdkit/Chem/Subshape/test_data/5ht3_mol1.shp.pkl old mode 100755 new mode 100644 diff --git a/rdkit/Chem/Subshape/test_data/5ht3_mol2.shp.pkl b/rdkit/Chem/Subshape/test_data/5ht3_mol2.shp.pkl old mode 100755 new mode 100644 diff --git a/rdkit/Chem/Subshape/test_data/5ht3ligs.sdf b/rdkit/Chem/Subshape/test_data/5ht3ligs.sdf old mode 100755 new mode 100644 diff --git a/rdkit/Chem/UnitTestMCS.py b/rdkit/Chem/UnitTestMCS.py index b0583ea1d..3d93b756b 100644 --- a/rdkit/Chem/UnitTestMCS.py +++ b/rdkit/Chem/UnitTestMCS.py @@ -101,7 +101,7 @@ class TestAtomTypes(MCSTestCase): bondCompare=rdFMCS.BondCompare.CompareOrderExact) def test_atom_compare_any(self): - # Note: bond aromaticies must still match! + # Note: bond aromaticities must still match! # 'cccccO' matches 'ccccnO' self.assert_search(atomtype_mols, 6, 5, atomCompare=rdFMCS.AtomCompare.CompareAny, diff --git a/rdkit/Chem/UnitTestMol3D.py b/rdkit/Chem/UnitTestMol3D.py index 36a2457fd..58b817c71 100755 --- a/rdkit/Chem/UnitTestMol3D.py +++ b/rdkit/Chem/UnitTestMol3D.py @@ -265,7 +265,7 @@ class TestCase(unittest.TestCase): smiles = set(Chem.MolToSmiles(i, isomericSmiles=True) for i in AllChem.EnumerateStereoisomers(fully_assigned)) self.assertEqual(smiles, set(['C/C(F)=C/[C@@H](C)Cl'])) - # should only enuemrate the bond stereo + # should only enumerate the bond stereo partially_assigned = Chem.MolFromSmiles('CC(F)=C[C@@H](C)Cl') smiles = set(Chem.MolToSmiles(i, isomericSmiles=True) for i in AllChem.EnumerateStereoisomers(partially_assigned)) self.assertEqual(smiles, set(['C/C(F)=C/[C@@H](C)Cl', 'C/C(F)=C\\[C@@H](C)Cl'])) diff --git a/rdkit/Chem/fmcs/fmcs.py b/rdkit/Chem/fmcs/fmcs.py index f3998d2d4..462d5531a 100644 --- a/rdkit/Chem/fmcs/fmcs.py +++ b/rdkit/Chem/fmcs/fmcs.py @@ -408,7 +408,7 @@ if hasattr(Chem.Atom, "GetIsotope"): atom.SetIsotope(isotope) else: - # Backards compatibility. Before mid-2012, RDKit only supported atomic mass, not isotope. + # Backward compatibility. Before mid-2012, RDKit only supported atomic mass, not isotope. def get_isotopes(mol): return [atom.GetMass() for atom in mol.GetAtoms()] @@ -474,7 +474,7 @@ def assign_isotopes_from_class_tag(mol, atom_class_tag): # A TypedMolecule contains the input molecule, unmodified, along with # atom type, and bond type information; both as SMARTS fragments. The -# "canonical_bondtypes" uniquely charactizes a bond; two bonds will +# "canonical_bondtypes" uniquely characterizes a bond; two bonds will # match if and only if their canonical bondtypes match. (Meaning: # bonds must be of equivalent type, and must go between atoms of # equivalent types.) @@ -675,7 +675,7 @@ def _check_atom_classes(molno, num_atoms, atom_classes): # that. -# Return a dictionary mapping iterator item to occurence count +# Return a dictionary mapping iterator item to occurrence count def get_counts(it): d = defaultdict(int) for item in it: @@ -880,7 +880,7 @@ def fragmented_mol_to_enumeration_mols(typed_mol, minNumAtoms=2): ####### Canonical SMARTS generation using Weininger, Weininger, and Weininger's CANGEN # CANGEN "combines two separate algorithms, CANON and GENES. The -# first stage, CANON, labels a molecualr structure with canonical +# first stage, CANON, labels a molecular structure with canonical # labels. ... Each atom is given a numerical label on the basis of its # topology. In the second stage, GENES generates the unique SMILES # ... . [It] selects the starting atom and makes branching decisions @@ -1829,7 +1829,7 @@ def check_completeRingsOnly(smarts, subgraph, enumeration_mol): break else: # No more backtracking. We fail. Try next bond? - # (If it had been sucessful then the + # (If it had been successful then the # len(confirmed_ring_bonds) == len(ring_bonds) # would have return True) break @@ -2660,7 +2660,7 @@ def main(args=None): if args.atom_class_tag is None: args.atomCompare = "elements" # Default atom comparison else: - args.atomCompare = "isotopes" # Assing the atom classes to the isotope fields + args.atomCompare = "isotopes" # Assign the atom classes to the isotope fields else: if args.atom_class_tag is not None: parser.error("Cannot specify both --atom-compare and --atom-class-tag fields") diff --git a/rdkit/Chem/test_data/Block_regress.Lip.csv b/rdkit/Chem/test_data/Block_regress.Lip.csv old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/Cp-.cdxml b/rdkit/Chem/test_data/Cp-.cdxml old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/Crippen.csv b/rdkit/Chem/test_data/Crippen.csv old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/Crippen_contribs_regress.pkl b/rdkit/Chem/test_data/Crippen_contribs_regress.pkl old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/Fe-multi-center.cdxml b/rdkit/Chem/test_data/Fe-multi-center.cdxml old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/NCI_5K_TPSA.csv b/rdkit/Chem/test_data/NCI_5K_TPSA.csv old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/NCI_aromat_regress.txt b/rdkit/Chem/test_data/NCI_aromat_regress.txt old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/NCI_regress.Lip.csv b/rdkit/Chem/test_data/NCI_regress.Lip.csv old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/PP_descrs_regress.2.csv b/rdkit/Chem/test_data/PP_descrs_regress.2.csv old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/PP_descrs_regress.VSA.2.csv b/rdkit/Chem/test_data/PP_descrs_regress.VSA.2.csv old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/PP_descrs_regress.VSA.csv b/rdkit/Chem/test_data/PP_descrs_regress.VSA.csv old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/PP_descrs_regress.csv b/rdkit/Chem/test_data/PP_descrs_regress.csv old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/PP_descrs_regress.rest.2.csv b/rdkit/Chem/test_data/PP_descrs_regress.rest.2.csv old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/Ti-sandwich.cdxml b/rdkit/Chem/test_data/Ti-sandwich.cdxml old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/anthracene.cdxml b/rdkit/Chem/test_data/anthracene.cdxml old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/aromat_regress.txt b/rdkit/Chem/test_data/aromat_regress.txt old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/atom-query.cdxml b/rdkit/Chem/test_data/atom-query.cdxml old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/benzene.cdxml b/rdkit/Chem/test_data/benzene.cdxml old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/benzene.mol b/rdkit/Chem/test_data/benzene.mol old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/bond-query.cdxml b/rdkit/Chem/test_data/bond-query.cdxml old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/cubane.cdxml b/rdkit/Chem/test_data/cubane.cdxml old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/dative.cdxml b/rdkit/Chem/test_data/dative.cdxml old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/dative.mol b/rdkit/Chem/test_data/dative.mol old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/ferrocene.cdxml b/rdkit/Chem/test_data/ferrocene.cdxml old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/fused-fours.cdxml b/rdkit/Chem/test_data/fused-fours.cdxml old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/lin.xml b/rdkit/Chem/test_data/lin.xml old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/linear.cdxml b/rdkit/Chem/test_data/linear.cdxml old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/linear.mol b/rdkit/Chem/test_data/linear.mol old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/monomer.mol b/rdkit/Chem/test_data/monomer.mol old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/multi-center.cdxml b/rdkit/Chem/test_data/multi-center.cdxml old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/multi-ring.cdxml b/rdkit/Chem/test_data/multi-ring.cdxml old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/napthalene.cdxml b/rdkit/Chem/test_data/napthalene.cdxml old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/napthalene.mol b/rdkit/Chem/test_data/napthalene.mol old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/quilt.cdxml b/rdkit/Chem/test_data/quilt.cdxml old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/quilt.sm.cdxml b/rdkit/Chem/test_data/quilt.sm.cdxml old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/quinone.mol b/rdkit/Chem/test_data/quinone.mol old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/sandwich.cdxml b/rdkit/Chem/test_data/sandwich.cdxml old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/simple_catalog.pkl b/rdkit/Chem/test_data/simple_catalog.pkl old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/t.xml b/rdkit/Chem/test_data/t.xml old mode 100755 new mode 100644 diff --git a/rdkit/Chem/test_data/tpsa_regr.csv b/rdkit/Chem/test_data/tpsa_regr.csv old mode 100755 new mode 100644 diff --git a/rdkit/DataStructs/HierarchyVis.py b/rdkit/DataStructs/HierarchyVis.py index e2f38b915..5c2406cb2 100755 --- a/rdkit/DataStructs/HierarchyVis.py +++ b/rdkit/DataStructs/HierarchyVis.py @@ -88,7 +88,7 @@ def DrawHierarchy(adjList, levelList, canvas, entryColors=None, bitIds=None, min nodeRad = max(spacePerNode / 2, visOpts.minCircRad) nodeRad = min(nodeRad, visOpts.maxCircRad) spacePerNode = nodeRad * 2 + visOpts.horizOffset - # start in the midde of the canvas: + # start in the middle of the canvas: pos[0] = dims[0] / 2. # maybe we need to offset a little: if nHere % 2: diff --git a/rdkit/DataStructs/test_data/pubchem_fps.dm.pkl b/rdkit/DataStructs/test_data/pubchem_fps.dm.pkl old mode 100755 new mode 100644 diff --git a/rdkit/DataStructs/test_data/pubchem_fps.pkl b/rdkit/DataStructs/test_data/pubchem_fps.pkl old mode 100755 new mode 100644 diff --git a/rdkit/Dbase/StorageUtils.py b/rdkit/Dbase/StorageUtils.py index 4df138c25..238a26a67 100755 --- a/rdkit/Dbase/StorageUtils.py +++ b/rdkit/Dbase/StorageUtils.py @@ -88,7 +88,7 @@ def IndexToRDId(idx, leadText='RDCmpd'): The format of the ID is: leadText-xxx-xxx-xxx-y - The number blocks are zero padded and the the final digit (y) + The number blocks are zero padded and the final digit (y) is a checksum: >>> str(IndexToRDId(9)) diff --git a/rdkit/Dbase/test_data/dbtest.csv b/rdkit/Dbase/test_data/dbtest.csv old mode 100755 new mode 100644 diff --git a/rdkit/Dbase/test_data/dbtest.nulls.csv b/rdkit/Dbase/test_data/dbtest.nulls.csv old mode 100755 new mode 100644 diff --git a/rdkit/Dbase/test_data/dbtest.nulls.xls b/rdkit/Dbase/test_data/dbtest.nulls.xls old mode 100755 new mode 100644 diff --git a/rdkit/Dbase/test_data/dbtest.xls b/rdkit/Dbase/test_data/dbtest.xls old mode 100755 new mode 100644 diff --git a/rdkit/Dbase/test_data/rdtest.sql b/rdkit/Dbase/test_data/rdtest.sql old mode 100755 new mode 100644 diff --git a/rdkit/ML/Cluster/test_data/ferro.UPGMA.pkl b/rdkit/ML/Cluster/test_data/ferro.UPGMA.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/Cluster/test_data/ferro.dat.pkl b/rdkit/ML/Cluster/test_data/ferro.dat.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/Cluster/test_data/struct.UPGMA.pkl b/rdkit/ML/Cluster/test_data/struct.UPGMA.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/Cluster/test_data/struct.Wards.pkl b/rdkit/ML/Cluster/test_data/struct.Wards.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/Cluster/test_data/struct.dat.pkl b/rdkit/ML/Cluster/test_data/struct.dat.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/Cluster/test_data/struct2.dat.pkl b/rdkit/ML/Cluster/test_data/struct2.dat.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/Composite/test_data/composite_base.both.pkl b/rdkit/ML/Composite/test_data/composite_base.both.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/Composite/test_data/composite_base.net.pkl b/rdkit/ML/Composite/test_data/composite_base.net.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/Composite/test_data/composite_base.neural.pkl b/rdkit/ML/Composite/test_data/composite_base.neural.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/Composite/test_data/composite_base.others.both.pkl b/rdkit/ML/Composite/test_data/composite_base.others.both.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/Composite/test_data/composite_base.others.net.pkl b/rdkit/ML/Composite/test_data/composite_base.others.net.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/Composite/test_data/composite_base.others.neural.pkl b/rdkit/ML/Composite/test_data/composite_base.others.neural.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/Composite/test_data/composite_base.others.pkl b/rdkit/ML/Composite/test_data/composite_base.others.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/Composite/test_data/composite_base.pkl b/rdkit/ML/Composite/test_data/composite_base.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/Composite/test_data/composite_base.unitnet.pkl b/rdkit/ML/Composite/test_data/composite_base.unitnet.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/Composite/test_data/composite_base.unittree.pkl b/rdkit/ML/Composite/test_data/composite_base.unittree.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/Composite/test_data/composite_plus_neural.pkl b/rdkit/ML/Composite/test_data/composite_plus_neural.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/Composite/test_data/ferro.others.pkl b/rdkit/ML/Composite/test_data/ferro.others.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/Composite/test_data/ferro.others.txt b/rdkit/ML/Composite/test_data/ferro.others.txt old mode 100755 new mode 100644 diff --git a/rdkit/ML/Composite/test_data/ferro.pkl b/rdkit/ML/Composite/test_data/ferro.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/Composite/test_data/ferro.txt b/rdkit/ML/Composite/test_data/ferro.txt old mode 100755 new mode 100644 diff --git a/rdkit/ML/Data/Stats.py b/rdkit/ML/Data/Stats.py index 2b4772d86..d3bf1be9f 100755 --- a/rdkit/ML/Data/Stats.py +++ b/rdkit/ML/Data/Stats.py @@ -85,7 +85,7 @@ def PrincipalComponents(mat, reverseOrder=1): covMat = FormCorrelationMatrix(mat) eigenVals, eigenVects = numpy.linalg.eig(covMat) - # The the 'real' component, if it exists as its own attribute + # The 'real' component, if it exists as its own attribute eigenVals = getattr(eigenVals, "real", eigenVals) eigenVects = getattr(eigenVects, "real", eigenVects) diff --git a/rdkit/ML/Data/test_data/test.dat b/rdkit/ML/Data/test_data/test.dat old mode 100755 new mode 100644 diff --git a/rdkit/ML/Data/test_data/test.dat.pkl b/rdkit/ML/Data/test_data/test.dat.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/Data/test_data/test.qdat b/rdkit/ML/Data/test_data/test.qdat old mode 100755 new mode 100644 diff --git a/rdkit/ML/Data/test_data/test.qdat.pkl b/rdkit/ML/Data/test_data/test.qdat.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/DecTree/test_data/BasicTree.pkl b/rdkit/ML/DecTree/test_data/BasicTree.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/DecTree/test_data/CmpTree1.pkl b/rdkit/ML/DecTree/test_data/CmpTree1.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/DecTree/test_data/CmpTree2.pkl b/rdkit/ML/DecTree/test_data/CmpTree2.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/DecTree/test_data/MultiTree.pkl b/rdkit/ML/DecTree/test_data/MultiTree.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/DecTree/test_data/MultiTreeRes.pkl b/rdkit/ML/DecTree/test_data/MultiTreeRes.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/DecTree/test_data/QuantTree1.pkl b/rdkit/ML/DecTree/test_data/QuantTree1.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/DecTree/test_data/QuantTree2.pkl b/rdkit/ML/DecTree/test_data/QuantTree2.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/DecTree/test_data/XValTree.pkl b/rdkit/ML/DecTree/test_data/XValTree.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/DecTree/test_data/foo.pdf b/rdkit/ML/DecTree/test_data/foo.pdf old mode 100755 new mode 100644 diff --git a/rdkit/ML/Descriptors/test_data/ferro.dsc b/rdkit/ML/Descriptors/test_data/ferro.dsc old mode 100755 new mode 100644 diff --git a/rdkit/ML/Descriptors/test_data/molcalc.dsc b/rdkit/ML/Descriptors/test_data/molcalc.dsc old mode 100755 new mode 100644 diff --git a/rdkit/ML/InfoTheory/UnitTestCorrMatGen.py b/rdkit/ML/InfoTheory/UnitTestCorrMatGen.py index 0b478e724..d35fc0c4c 100755 --- a/rdkit/ML/InfoTheory/UnitTestCorrMatGen.py +++ b/rdkit/ML/InfoTheory/UnitTestCorrMatGen.py @@ -26,7 +26,7 @@ class TestCase(unittest.TestCase): def setUp(self): # here is what we are going to do to test this out - # - generate bit vectrs of length nbits + # - generate bit vectors of length nbits # - turn on a fraction of the first nbits/2 bits at random # - for each bit i turned on in the range (0, nbits/2) turn on the bit # nbits/2 + i diff --git a/rdkit/ML/InfoTheory/entropy.py b/rdkit/ML/InfoTheory/entropy.py index c192e5e15..0dbc23a4c 100755 --- a/rdkit/ML/InfoTheory/entropy.py +++ b/rdkit/ML/InfoTheory/entropy.py @@ -51,7 +51,7 @@ def PyInfoEntropy(results): # functionality to calculate the informational entropy. # The problem is that the system log function pitches a fit # when you call log(0.0). We are perfectly happy with that - # returning *anything* because we're gonna mutiply by 0 anyway. + # returning *anything* because we're gonna multiply by 0 anyway. # Here's the risky (but marginally faster way to do it: # add a small number to probs and hope it doesn't screw diff --git a/rdkit/ML/InfoTheory/test_data/combiRank.out b/rdkit/ML/InfoTheory/test_data/combiRank.out old mode 100755 new mode 100644 diff --git a/rdkit/ML/InfoTheory/test_data/combiRankChi.out b/rdkit/ML/InfoTheory/test_data/combiRankChi.out old mode 100755 new mode 100644 diff --git a/rdkit/ML/KNN/test_data/random_pts.csv b/rdkit/ML/KNN/test_data/random_pts.csv old mode 100755 new mode 100644 diff --git a/rdkit/ML/KNN/test_data/sample_pts.csv b/rdkit/ML/KNN/test_data/sample_pts.csv old mode 100755 new mode 100644 diff --git a/rdkit/ML/ModelPackage/test_data/Jan9_build3_calc.dsc b/rdkit/ML/ModelPackage/test_data/Jan9_build3_calc.dsc old mode 100755 new mode 100644 diff --git a/rdkit/ML/ModelPackage/test_data/Jan9_build3_model.pkl b/rdkit/ML/ModelPackage/test_data/Jan9_build3_model.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/ModelPackage/test_data/Jan9_build3_pkg.pkl b/rdkit/ML/ModelPackage/test_data/Jan9_build3_pkg.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/NaiveBayes/ClassificationModel.py b/rdkit/ML/NaiveBayes/ClassificationModel.py index 5ceea2aba..d7e9eff46 100644 --- a/rdkit/ML/NaiveBayes/ClassificationModel.py +++ b/rdkit/ML/NaiveBayes/ClassificationModel.py @@ -66,9 +66,9 @@ class NaiveBayesClassifier: self._name = "" self.mprob = -1.0 - # for the sake a of efficiency lets try to change the conditional probabities + # for the sake a of efficiency lets try to change the conditional probabilities # to a numpy array instead of a dictionary. The three dimension array is indexed - # on the the activity class, the discriptor ID and the descriptor binID + # on the activity class, the descriptor ID and the descriptor binID # self._condProbs = {} # self._condProbs = numpy.zeros((self._nClasses, max(self._attrs)+1, # max(self._nPosVals)+1), 'd') diff --git a/rdkit/ML/Neural/architecture.txt b/rdkit/ML/Neural/architecture.txt old mode 100755 new mode 100644 diff --git a/rdkit/ML/files.py b/rdkit/ML/files.py index 1dd86248e..eb1041120 100755 --- a/rdkit/ML/files.py +++ b/rdkit/ML/files.py @@ -62,7 +62,7 @@ class ReFile: def ReadDataFile(fileName, comment=r'#', depVarCol=0, dataType=numpy.float): """ read in the data file and return a tuple of two Numeric arrays: - (independant variables, dependant variables). + (independent variables, dependant variables). **ARGUMENTS:** @@ -78,7 +78,7 @@ def ReadDataFile(fileName, comment=r'#', depVarCol=0, dataType=numpy.float): a tuple of two Numeric arrays: - (independant variables, dependant variables). + (independent variables, dependant variables). """ inFile = ReFile(fileName) diff --git a/rdkit/ML/test_data/ferromag_auto_10_3.pkl b/rdkit/ML/test_data/ferromag_auto_10_3.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/test_data/ferromag_filt_10_3.pkl b/rdkit/ML/test_data/ferromag_filt_10_3.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/test_data/ferromag_quant_10.pkl b/rdkit/ML/test_data/ferromag_quant_10.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/test_data/ferromag_quant_10_3.pkl b/rdkit/ML/test_data/ferromag_quant_10_3.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/test_data/ferromag_quant_10_3_lessgreedy.pkl b/rdkit/ML/test_data/ferromag_quant_10_3_lessgreedy.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/test_data/ferromag_quant_50_3.pkl b/rdkit/ML/test_data/ferromag_quant_50_3.pkl old mode 100755 new mode 100644 diff --git a/rdkit/ML/test_data/ferromag_shuffle_10_3.pkl b/rdkit/ML/test_data/ferromag_shuffle_10_3.pkl old mode 100755 new mode 100644 diff --git a/rdkit/VLib/NodeLib/test_data/NCI_aids.10.dupes.sdf b/rdkit/VLib/NodeLib/test_data/NCI_aids.10.dupes.sdf old mode 100755 new mode 100644 diff --git a/rdkit/VLib/NodeLib/test_data/NCI_aids.10.sdf b/rdkit/VLib/NodeLib/test_data/NCI_aids.10.sdf old mode 100755 new mode 100644 diff --git a/rdkit/VLib/NodeLib/test_data/pgp_20.txt b/rdkit/VLib/NodeLib/test_data/pgp_20.txt old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/courier-10.pbm b/rdkit/sping/PIL/pilfonts/courier-10.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/courier-10.pil b/rdkit/sping/PIL/pilfonts/courier-10.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/courier-12.pbm b/rdkit/sping/PIL/pilfonts/courier-12.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/courier-12.pil b/rdkit/sping/PIL/pilfonts/courier-12.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/courier-14.pbm b/rdkit/sping/PIL/pilfonts/courier-14.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/courier-14.pil b/rdkit/sping/PIL/pilfonts/courier-14.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/courier-18.pbm b/rdkit/sping/PIL/pilfonts/courier-18.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/courier-18.pil b/rdkit/sping/PIL/pilfonts/courier-18.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/courier-24.pbm b/rdkit/sping/PIL/pilfonts/courier-24.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/courier-24.pil b/rdkit/sping/PIL/pilfonts/courier-24.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/courier-8.pbm b/rdkit/sping/PIL/pilfonts/courier-8.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/courier-8.pil b/rdkit/sping/PIL/pilfonts/courier-8.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/courier-8.pil.1 b/rdkit/sping/PIL/pilfonts/courier-8.pil.1 old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/courier-bold-10.pbm b/rdkit/sping/PIL/pilfonts/courier-bold-10.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/courier-bold-10.pil b/rdkit/sping/PIL/pilfonts/courier-bold-10.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/courier-bold-12.pbm b/rdkit/sping/PIL/pilfonts/courier-bold-12.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/courier-bold-12.pil b/rdkit/sping/PIL/pilfonts/courier-bold-12.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/courier-bold-14.pbm b/rdkit/sping/PIL/pilfonts/courier-bold-14.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/courier-bold-14.pil b/rdkit/sping/PIL/pilfonts/courier-bold-14.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/courier-bold-18.pbm b/rdkit/sping/PIL/pilfonts/courier-bold-18.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/courier-bold-18.pil b/rdkit/sping/PIL/pilfonts/courier-bold-18.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/courier-bold-24.pbm b/rdkit/sping/PIL/pilfonts/courier-bold-24.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/courier-bold-24.pil b/rdkit/sping/PIL/pilfonts/courier-bold-24.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/courier-bold-8.pbm b/rdkit/sping/PIL/pilfonts/courier-bold-8.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/courier-bold-8.pil b/rdkit/sping/PIL/pilfonts/courier-bold-8.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/helvetica-10.pbm b/rdkit/sping/PIL/pilfonts/helvetica-10.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/helvetica-10.pil b/rdkit/sping/PIL/pilfonts/helvetica-10.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/helvetica-12.pbm b/rdkit/sping/PIL/pilfonts/helvetica-12.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/helvetica-12.pil b/rdkit/sping/PIL/pilfonts/helvetica-12.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/helvetica-14.pbm b/rdkit/sping/PIL/pilfonts/helvetica-14.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/helvetica-14.pil b/rdkit/sping/PIL/pilfonts/helvetica-14.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/helvetica-18.pbm b/rdkit/sping/PIL/pilfonts/helvetica-18.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/helvetica-18.pil b/rdkit/sping/PIL/pilfonts/helvetica-18.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/helvetica-24.pbm b/rdkit/sping/PIL/pilfonts/helvetica-24.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/helvetica-24.pil b/rdkit/sping/PIL/pilfonts/helvetica-24.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/helvetica-8.pbm b/rdkit/sping/PIL/pilfonts/helvetica-8.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/helvetica-8.pil b/rdkit/sping/PIL/pilfonts/helvetica-8.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/helvetica-bold-10.pbm b/rdkit/sping/PIL/pilfonts/helvetica-bold-10.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/helvetica-bold-10.pil b/rdkit/sping/PIL/pilfonts/helvetica-bold-10.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/helvetica-bold-12.pbm b/rdkit/sping/PIL/pilfonts/helvetica-bold-12.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/helvetica-bold-12.pil b/rdkit/sping/PIL/pilfonts/helvetica-bold-12.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/helvetica-bold-14.pbm b/rdkit/sping/PIL/pilfonts/helvetica-bold-14.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/helvetica-bold-14.pil b/rdkit/sping/PIL/pilfonts/helvetica-bold-14.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/helvetica-bold-18.pbm b/rdkit/sping/PIL/pilfonts/helvetica-bold-18.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/helvetica-bold-18.pil b/rdkit/sping/PIL/pilfonts/helvetica-bold-18.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/helvetica-bold-24.pbm b/rdkit/sping/PIL/pilfonts/helvetica-bold-24.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/helvetica-bold-24.pil b/rdkit/sping/PIL/pilfonts/helvetica-bold-24.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/helvetica-bold-8.pbm b/rdkit/sping/PIL/pilfonts/helvetica-bold-8.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/helvetica-bold-8.pil b/rdkit/sping/PIL/pilfonts/helvetica-bold-8.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/metrics.dat b/rdkit/sping/PIL/pilfonts/metrics.dat old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/symbol-10.pbm b/rdkit/sping/PIL/pilfonts/symbol-10.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/symbol-10.pil b/rdkit/sping/PIL/pilfonts/symbol-10.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/symbol-12.pbm b/rdkit/sping/PIL/pilfonts/symbol-12.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/symbol-12.pil b/rdkit/sping/PIL/pilfonts/symbol-12.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/symbol-14.pbm b/rdkit/sping/PIL/pilfonts/symbol-14.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/symbol-14.pil b/rdkit/sping/PIL/pilfonts/symbol-14.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/symbol-18.pbm b/rdkit/sping/PIL/pilfonts/symbol-18.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/symbol-18.pil b/rdkit/sping/PIL/pilfonts/symbol-18.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/symbol-24.pbm b/rdkit/sping/PIL/pilfonts/symbol-24.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/symbol-24.pil b/rdkit/sping/PIL/pilfonts/symbol-24.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/symbol-8.pbm b/rdkit/sping/PIL/pilfonts/symbol-8.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/symbol-8.pil b/rdkit/sping/PIL/pilfonts/symbol-8.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/times-10.pbm b/rdkit/sping/PIL/pilfonts/times-10.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/times-10.pil b/rdkit/sping/PIL/pilfonts/times-10.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/times-12.pbm b/rdkit/sping/PIL/pilfonts/times-12.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/times-12.pil b/rdkit/sping/PIL/pilfonts/times-12.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/times-14.pbm b/rdkit/sping/PIL/pilfonts/times-14.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/times-14.pil b/rdkit/sping/PIL/pilfonts/times-14.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/times-18.pbm b/rdkit/sping/PIL/pilfonts/times-18.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/times-18.pil b/rdkit/sping/PIL/pilfonts/times-18.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/times-24.pbm b/rdkit/sping/PIL/pilfonts/times-24.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/times-24.pil b/rdkit/sping/PIL/pilfonts/times-24.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/times-8.pbm b/rdkit/sping/PIL/pilfonts/times-8.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/times-8.pil b/rdkit/sping/PIL/pilfonts/times-8.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/times-bold-10.pbm b/rdkit/sping/PIL/pilfonts/times-bold-10.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/times-bold-10.pil b/rdkit/sping/PIL/pilfonts/times-bold-10.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/times-bold-12.pbm b/rdkit/sping/PIL/pilfonts/times-bold-12.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/times-bold-12.pil b/rdkit/sping/PIL/pilfonts/times-bold-12.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/times-bold-14.pbm b/rdkit/sping/PIL/pilfonts/times-bold-14.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/times-bold-14.pil b/rdkit/sping/PIL/pilfonts/times-bold-14.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/times-bold-18.pbm b/rdkit/sping/PIL/pilfonts/times-bold-18.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/times-bold-18.pil b/rdkit/sping/PIL/pilfonts/times-bold-18.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/times-bold-24.pbm b/rdkit/sping/PIL/pilfonts/times-bold-24.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/times-bold-24.pil b/rdkit/sping/PIL/pilfonts/times-bold-24.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/times-bold-8.pbm b/rdkit/sping/PIL/pilfonts/times-bold-8.pbm old mode 100755 new mode 100644 diff --git a/rdkit/sping/PIL/pilfonts/times-bold-8.pil b/rdkit/sping/PIL/pilfonts/times-bold-8.pil old mode 100755 new mode 100644 diff --git a/rdkit/sping/PS/pidPS.py b/rdkit/sping/PS/pidPS.py index 06b333206..cd583ef25 100755 --- a/rdkit/sping/PS/pidPS.py +++ b/rdkit/sping/PS/pidPS.py @@ -10,8 +10,8 @@ piddlePS - a PostScript backend for the PIDDLE drawing module # $Id$ # -# For each page, the coordinate system is intialized with "0 canvasHeight translate" so -# that coordiante (0,0) is at the top left of the page +# For each page, the coordinate system is initialized with "0 canvasHeight translate" so +# that coordinate (0,0) is at the top left of the page # Therefore all y coordinates must be entered in opposite sign to go down # Also, remember that angles are reversed relative to postscript standard -cwl @@ -26,10 +26,10 @@ piddlePS - a PostScript backend for the PIDDLE drawing module # X drawArc stuff from Eric # In the Future: -# _ Base85 ecooding just use hex encoding involves 1:2 expansion of image data vs 4:5 +# _ Base85 encoding just use hex encoding involves 1:2 expansion of image data vs 4:5 # _ Don't see a flate/deflate filter for Postscript, jpeg DCTEncode could be added. # PIL may have a LZW encoder -# _ check Adobe Document struturing conventions (half done) +# _ check Adobe Document structuring conventions (half done) # _ look at symbol's font metrics--they appear to be a little off # X postscript native implementation of drawRoundRect # _ improve underlining placement...doesn't look good for courier and symbol @@ -162,7 +162,7 @@ def dashLineDefinition(): class PsDSC: - # remeber %% will be reduced to % when using string substitution + # remember %% will be reduced to % when using string substitution # returned strings do not end with \n def __init__(self): @@ -261,7 +261,7 @@ class PSCanvas(Canvas): # Page Structure State #---------------------- self._inDocumentFlag = 0 # this is set in psBeginDocument - self._inPageFlag = 0 # we have't started a page + self._inPageFlag = 0 # we haven't started a page self.pageNum = 1 # User is free to reset this or even make this a string @@ -831,7 +831,7 @@ translate # of the lower-left corner of the first sample is (0,0), of the # second (1,0) and so on" -PS2 ref manual p. 215 # - # The ImageMatrix maps unit squre of user space to boundary of the source image + # The ImageMatrix maps unit square of user space to boundary of the source image # # The CurrentTransformationMatrix (CTM) maps the unit square of diff --git a/rdkit/sping/README b/rdkit/sping/README old mode 100755 new mode 100644 diff --git a/rdkit/sping/TK/pidTK.py b/rdkit/sping/TK/pidTK.py index 9a3d344bb..07d789d42 100755 --- a/rdkit/sping/TK/pidTK.py +++ b/rdkit/sping/TK/pidTK.py @@ -160,7 +160,7 @@ class FontManager: # nope, let's create a new tk font. # this way we will return info about the actual font # selected by Tk, which may be different than what we ask - # for if it's not availible. + # for if it's not available. font = tkFont.Font(self.master, family=family, size=size, weight=weight, slant=slant, underline=underline) self.font_cache[(family, size, weight, slant, underline)] = font diff --git a/rdkit/sping/WX/pidWxDc.py b/rdkit/sping/WX/pidWxDc.py index 9b2822619..73ddec2e2 100755 --- a/rdkit/sping/WX/pidWxDc.py +++ b/rdkit/sping/WX/pidWxDc.py @@ -89,7 +89,7 @@ class PiddleWxDc(sping_pid.Canvas): font = self.defaultFont # PIDDLE fonts are matched to wxFont families. While it is possible to # match them to individual fonts, this is difficult to do in a platform - # independant way + # independent way if font.face is None or font.face == 'times': family = wxDEFAULT elif font.face == 'courier' or font.face == 'monospaced': diff --git a/rdkit/sping/examples/tkCanvas-with-scrollbars.py b/rdkit/sping/examples/tkCanvas-with-scrollbars.py index a68061b4c..d906de93d 100755 --- a/rdkit/sping/examples/tkCanvas-with-scrollbars.py +++ b/rdkit/sping/examples/tkCanvas-with-scrollbars.py @@ -4,7 +4,7 @@ from sping.TK import TKCanvas from sping import colors # This example program creates a scrolling canvas with sping.TK -# how to tie scrollbars and canvses together. The mechanism +# how to tie scrollbars and canvases together. The mechanism # based on the demo included with python 1.5.2 source under Demo/tkinter/matt/tkcanvas-with-scrollbars.py diff --git a/rdkit/sping/examples/tkCanvasPIL-with-scrollbars.py b/rdkit/sping/examples/tkCanvasPIL-with-scrollbars.py index c8f563e73..82e0df388 100755 --- a/rdkit/sping/examples/tkCanvasPIL-with-scrollbars.py +++ b/rdkit/sping/examples/tkCanvasPIL-with-scrollbars.py @@ -3,7 +3,7 @@ from Tkinter import * from sping.TK import TKCanvas, TKCanvasPIL from sping import colors -# This example program creates a scroling canvas using TKCanvasPIL as the basis +# This example program creates a scrolling canvas using TKCanvasPIL as the basis # The PIL-based canvas may be saved to an image file. # based on the demo included with python 1.5.2 source under Demo/tkinter/matt/tkcanvas-with-scrollbars.py diff --git a/rdkit/sping/patches/Imaging-1.1-fixplugin-path b/rdkit/sping/patches/Imaging-1.1-fixplugin-path old mode 100755 new mode 100644 diff --git a/rdkit/sping/patches/Imaging-1.1.1.diff b/rdkit/sping/patches/Imaging-1.1.1.diff old mode 100755 new mode 100644 diff --git a/rdkit/sping/pid.py b/rdkit/sping/pid.py index ee1b5e8dd..681f37447 100755 --- a/rdkit/sping/pid.py +++ b/rdkit/sping/pid.py @@ -296,7 +296,7 @@ class Canvas: def fontHeight(self, font=None): "Find the height of one line of text (baseline to baseline) of the given font." - # the following approxmation is correct for PostScript fonts, + # the following approximation is correct for PostScript fonts, # and should be close for most others: if not font: font = self.defaultFont diff --git a/rdkit/sping/stringformat.py b/rdkit/sping/stringformat.py index 49f80e76c..eb05030a7 100755 --- a/rdkit/sping/stringformat.py +++ b/rdkit/sping/stringformat.py @@ -176,7 +176,7 @@ class StringFormatter(xmllib.XMLParser): # At the start of each tag the corresponding field will # be set to 1 and at the end tag the corresponding field will # be set to 0. Then when handle_data is called the options - # for that data will be aparent by the current settings. + # for that data will be apparent by the current settings. #---------------------------------------------------------- #### bold diff --git a/rdkit/utils/12h.gif b/rdkit/utils/12h.gif old mode 100755 new mode 100644 diff --git a/rdkit/utils/retest.txt b/rdkit/utils/retest.txt old mode 100755 new mode 100644 diff --git a/rdkit/utils/test1.gif b/rdkit/utils/test1.gif old mode 100755 new mode 100644 diff --git a/rdkit/utils/test2.gif b/rdkit/utils/test2.gif old mode 100755 new mode 100644 diff --git a/rdkit/utils/test3.gif b/rdkit/utils/test3.gif old mode 100755 new mode 100644