Chemistry Toolkit Rosetta Wiki
Register
Advertisement

O=C(Nc1ccc(N2CCN(C(=O)c3ccco3)CC2)c(Cl)c1)c1cc2ccccc2o1

CC1COCC(C)N1C1=C(Cl)C(=O)c2ccccc2C1=O

Cc1ccc(/C=C/C(=O)NCc2ccc(S(N)(=O)=O)cc2)o1

Cc1ccc(NC(=O)c2cc(C)n(-c3ccccc3)c2C)cc1

Cc1ccc(-c2c(C(=O)N/N=C/c3ccsc3)nnn2-c2nonc2N)cc1

CC1=CC(=NOC(=O)/C=C/c2ccccc2)C=C(C)C1=O

CC1=C(n2nnc([N+](=O)[O-])n2)C(c2cccnc2)C(C#N)=C(N)O1

CCN1CCN(c2nc(C)nc3c2sc(=S)n3C)CC1

O=C(CNC(=O)c1cccs1)OCC(=O)c1ccc([N+](=O)[O-])cc1

CCc1c(C#N)c(S)nc(C)c1C(=O)Nc1ccccc1

C/C(Cn1nnc([N+](=O)[O-])n1)=N\NC(=O)c1ccc(Cl)c(Cl)c1

COc1ccc(-c2cn3cc(C)ccc3n2)cc1Br

Cc1ccc(S(=O)(=O)/N=C2/C=C(C3C(=O)CC(C)(C)CC3=O)C(=O)c3ccccc32)cc1

COc1ccc(N=C2C(=S)N(c3ccc(OC)cc3)C(=NS(=O)(=O)c3ccccc3)N2c2ccccc2)cc1

CCN(CC)c1ccc(NC(=O)c2ccccc2Br)cc1S(=O)(=O)Nc1ccccc1OC

S=C(NN=Cc1ccccn1)N(Cc1ccccn1)Cc1ccccn1

CCc1ccc(S(=O)(=O)Nc2cc(SCC(=O)O)c(O)c3ccccc23)cc1

CCC(C)N(CCNC(=O)c1ccc2c(c1)NC(=O)c1ccccc1S2)C1CCCCC1

COC1=CC(=O)C=C(OC)C1(O)CC(C)=O

Cc1cccc(-n2c(=S)[nH]c3sc4c(c3c2=O)CCc2ccccc2-4)c1

Nc1c(O)cccc1C(=O)O

CNCc1ccccc1Sc1cc(O)ccc1O.O=C(O)/C=C\C(=O)O

CCOc1ccc(NC(=O)Cn2sc3nc(C)cc(C)c3c2=O)cc1

COC(=O)[C@H](CCSC)NC(=O)c1cc2c3ccccc3nc-2c[nH]1

O=C1Nc2cc(C(=O)NCCCN3CCCC3)ccc2S/C1=C/c1cccc(Cl)c1

O=C1Nc2cc(C(=O)NCCCN3CCCC3)ccc2S/C1=C\c1ccccc1

COc1ccc(CNC(=O)Cc2cn(C)c3ccccc23)c(OC)c1

[O-][N+](=Cc1ccccc1)c1ccc(Cl)cc1

C/C(Cn1nnc([N+](=O)[O-])n1)=N\NC(=O)c1ccc(O)cc1

CN1CCc2cccc3c2[C@@H]1Cc1ccc(O)c(O)c1-3.Cl

Cc1ccc([S+]([O-])c2ccc([N+](=O)[O-])c3nonc23)cc1

CCOC(=O)c1c(OCC)[nH]c2c1cc(O)c1ccccc12

O=c1c2ccccc2sn1-c1ccccc1F

CCn1c([N+](=O)[O-])nc2c1c(=O)[nH]c(=O)n2C

CC1(C)CN(c2ccccc2)N(C(=O)c2ccc(C#N)cc2)C1=O

Cc1nc2ccc(Nc3nc4cc(S(=O)(=O)N5CCOCC5)ccc4o3)cc2s1

CN1C(=O)C(N=Nc2ccc([N+](=O)[O-])cc2)SC1=S

N#CC1=C(N)Oc2c(O)cc3ccccc3c2C1c1ccsc1

CN(C)c1ncc(C2=C(Cl)C(=O)C(N3CCCC3)=C(Cl)C2=O)s1

COc1ccc2c(c1)c(=Cc1ccc(N(C)C)cc1)c1cc(-c3ccccc3)[n+](C)n12.O=S(=O)([O-])C(F)(F)F

Oc1nc2ccccc2n2c(-c3ccccc3)nnc12

Cc1ccc(-c2nc(N3CCOCC3)s[n+]2-c2ccccc2)cc1.[O-][Cl+3]([O-])([O-])[O-]

COc1cccc(C(=O)Nc2nnc(C(C)C)s2)c1

COc1ccc(CN(C)S(=O)(=O)c2nnc(NC(=O)c3ccc(C)cc3)s2)cc1OC

O=C(CSc1nc2cc(Cl)ccc2s1)c1ccco1

O=c1[nH]sc2cc(F)ccc12

CCN(CC)c1ccc(NC(=O)c2cccc(C)c2)cc1S(=O)(=O)Nc1ccccc1OC

CC(Cc1ccc(O)c(O)c1)C(C)Cc1ccc(O)c(O)c1

c1nc2nc[nH]c(SSc3[nH]cnc4ncnc3-4)c-2n1

CCN(CC)CC.COc1ccc(-n2c(=S)[nH]c3c(sc(=S)n3-c3ccccc3)c2=O)c(OC)c1

O=C1C=CC(=O)N1c1ccc(N2CCCCC2)cc1

Cc1ccc(CNc2ccc(O)cc2)cc1

O=c1c2ccccc2sn1-c1cc(S(=O)(=O)N2CCOCC2)ccc1N1CCCC1

O=C(CCC(=O)OCC(=O)c1ccc([N+](=O)[O-])cc1)Nc1ccccc1Cl

OpenBabel/Rubabel[]

require 'rubabel'
  File.open("benzodiazepine.smi.sdf", 'w') do |out|
    Rubabel.foreach("benzodiazepine.smi.gz") do |mol|
    mol.make_3d!
    out.print mol.write_string(:sdf)
  end
end

Indigo/C++[]

#include "base_cpp/scanner.h"
#include "base_cpp/output.h"
#include "molecule/molecule.h"
#include "molecule/smiles_loader.h"
#include "molecule/molfile_saver.h"
#include "molecule/molecule_dearom.h"
#include "layout/molecule_layout.h"

int main (int argc, char *argv[])
{
   if (argc < 3)
   {
      fprintf(stderr, "Usage: smi_sdf_convert infile.smi outfile.sdf\n");
      return -1;
   }

   try
   {
      FileScanner scanner(argv[1]);
      FileOutput output(argv[2]);
      Array<char> smiles;
      Molecule mol;
      int cnt = 0;

      while (!scanner.isEOF())
      {
         scanner.readString(smiles, false);

         if (smiles.size() < 1)
            continue;

         printf("saving molecule #%d... ", ++cnt);

         BufferScanner smiles_s(smiles);
         SmilesLoader smiles_l(smiles_s);

         smiles_l.loadMolecule(mol, false);
         mol.calcImplicitHydrogens(true);

         {         
            DearomatizationsStorage dst;
            Dearomatizer dearom(mol);
            dearom.setDearomatizationParams(Dearomatizer::PARAMS_SAVE_ONE_DEAROMATIZATION);
            dearom.enumerateDearomatizations(dst);

            MoleculeDearomatizer mdearom(mol, dst);
            for (int i = 0; i < dst.getGroupsCount(); i++)
               mdearom.dearomatizeGroup(i, 0);
         }

         {
            MoleculeLayout ml(mol);
            ml.make();
            mol.getStereocenters().markBonds();
         }

         MolfileSaver saver(output);

         // saver.v2000 = true;
         saver.saveMolecule(mol);
         output.printf("$$$$\n");
         printf("\n");
      }
   }
   catch (Exception &e)
   {
      fprintf(stderr, "error: %s\n", e.message());
      return -1;
   }
   return 0;
}

Instructions:

  1. Unpack 'graph', 'molecule', and 'layout' projects into some folder
  2. Create 'utils' folder nearby
  3. Paste the above code into utils/smi_sdf_convert.cpp file
  4. Compile the file using the following commands:
    $ cd graph; make CONF=Release32; cd ..
    $ cd molecule; make CONF=Release32; cd ..
    $ cd layout; make CONF=Release32; cd ..
    $ cd utils
    $ gcc smi_sdf_convert.cpp -o smi_sdf_convert -O3 -m32 -I.. -I../common ../liblayout/dist/Release32/GNU-Linux-x86/liblayout.a ../molecule/dist/Release32/GNU-Linux-x86/libmolecule.a ../graph/dist/Release32/GNU-Linux-x86/libgraph.a -lpthread -lstdc++
  5. Run the program like that:
    $ ./smi_sdf_convert infile.smi outfile.sdf

RDKit/Python[]

from rdkit import Chem
from rdkit.Chem import AllChem

suppl = Chem.SmilesMolSupplier('benzodiazepine.smi')
w = Chem.SDWriter('bz.out.sdf')
for mol in suppl:
    # skip molecules the rdkit doesn't read:
    if not mol: continue
    # add coordinates so we get a correct mol block:
    AllChem.Compute2DCoords(mol)
    w.write(mol)

w.flush()

Cactvs/Tcl[]

molfile write "benzodiazepine.sdf" [molfile open "benzodiazepine.smi"]

Yup, it's a one-liner. 2D coordinates and wedges are automatically generated, and aromaticity resolution is also implicit. The format of the output file is, in the absence of a specific format setting, decoded from the suffix of that file.

Cactvs/Python[]

A one-liner as well:

Molfile.Write('benzodiazepine.sdf',Molfile('benzodiazepine.smi'))
Advertisement