Your SlideShare is downloading. ×
  • Like
Open Babel 2.3 Quick Reference
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Open Babel 2.3 Quick Reference

  • 1,419 views
Published

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,419
On SlideShare
0
From Embeds
0
Number of Embeds
9

Actions

Shares
Downloads
46
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. // Automatic format perception // Molecular formula Open Babel 2.3 std::ifstream ifs(filename); OBConversion conv; (std::string) mol.GetFormula(); C++ API OBFormat* inFormat = conv.FormatFromExt(filename); OBFormat* outFormat = conv.SetFormat("SDF"); // Conformations (int) mol.NumConformers(); if (inFormat && outFormat) Quick reference guide { conv.SetInAndOutFormats(inFormat, outFormat); // Smallest set of smallest rings (std::vector<OBRing*>) mol.GetSSSR(); } // Hydrogen manipulations (bool) mol.DeleteHydrogens(); // All H (bool) mol.AddPolarHydrogens(); // Polar H Namespace
 Looping
over
atoms
and
bonds
 (bool) mol.AddHydrogens(); // All H // Generic data using namespace OpenBabel; #include <openbabel/obiter.h> std::vector<OBGenericData*>::iterator k; #include <openbabel/mol.h> std::vector<OBGenericData*> vdata = mol.GetData(); for (k = vdata.begin(); k != vdata.end(); ++k) using namespace OpenBabel; if ((*k)->GetDataType() == OBGenericDataType::PairData) Reading
and
writing
 OBMol mol; { std::cout << "> <" << (*k)->GetAttribute(); OBAtom* atom; std::cout << ">" << std::endl; #include <openbabel/mol.h> OBAtom* nbrAtom; std::cout << ((OBPairData*)(*k))->GetValue(); #include <openbabel/obconversion.h> OBBond* bond; std::cout << std::endl; } int main(int argc, char **argv) // Looping over all atoms { double exactMass(0.0); // Remove all but the largest fragments OBMol mol; FOR_ATOMS_OF_MOL(atom, mol) (bool) mol.StripSalts(0); { // Read from standard input and write to exactMass += atom->GetExactMass(); // Clear molecule for re-use // standard output } (bool) mol.Clear(); OBConversion conv(&std::cin, &std::cout); // Looping over all bonds // Input format is sd-file, output format unsigned int totalBondOrder(0); // is canonical smiles if (conv.SetInAndOutFormats("sdf", "can")) FOR_BONDS_OF_MOL(bond, mol) { Atoms
 { totalBondOrder += bond->GetBondOrder(); if (conv.Read(&mol)) } #include <openbabel/atom.h> { // Looping over all neighbor atoms of given atom // Print number of atoms unsigned int nAtoms(0); OBAtom atom; std::cerr << "Molecule has: " << FOR_NBORS_OF_ATOM(nbrAtom, atom) ++nAtoms; mol.NumAtoms() << " atoms.n"; // Properties } (int) atom.GetFormalCharge(); conv->Write(&mol); (unsigned int) atom.GetAtomicNum(); } mol.Clear(); Element
table
 (double) atom.GetAtomicMass(); return 0; // Explicit and maximum expected connections } #include <openbabel/data.h> (unsigned int) atom.GetValence(); (unsigned int) atom.GetImplicitValence(); OBElementTable etab; // Non-hydrogen connections Conversion
 (char*) (int) etab.GetSymbol(6); etab.GetAtomicNum("C"); (unsigned int) atom.GetHvyValence(); (double) etab.GetVdwRad(7); // Implicit and explicit hydrogens #include <openbabel/obconversion.h> (double) etab.GetCovalentRad(8); (unsigned int) atom.ImplicitHydrogenCount(); #include <openbabel/mol.h> (double) etab.GetMass(1); (unsigned int) atom.ExplicitHydrogenCount(); // Create molecule from SMILES string // Is atom in ring of size 6? std::string SmilesString("c1ccccc1"); (bool) atom.IsInRing() && atom.IsInRingSize(6); OBMol mol; stringstream ss(SmilesString) Molecules
 // Size of smallest ring that contains the atom OBConversion conv(&ss); (unsigned int) atom.MemberOfRingSize(); if (conv.SetInFormat("smi") && conv.Read(&mol)) #include <openbabel/mol.h> { /* ... */ } #include <openbabel/generic.h> // Number of rings that contain the atom (unsigned int) atom.MemberOfRingCount(); // Conversion without manipulation OBMol mol; OBConversion conv(&is, &os); if (conv.SetInAndOutFormats("SMI", "MOL")) // Number of atoms and bonds { // Option "h" adds explicit hydrogens (unsigned (unsigned int) mol.NumAtoms(); // All atoms int) mol.NumHvyAtoms(); // Non-H atoms Bonds
 conv.AddOption("h", OBConversion::GENOPTIONS); (unsigned int) mol.NumBonds(); // All bonds conv.Convert(); #include <openbabel/bond.h> } // Molecular weight with implicit hydrogens #include <openbabel/atom.h> (double) mol.GetMolWt(true); 
 www.silicos.com
 www.silicos.com
 www.silicos.com

  • 2. OBBond bond; // Set calculation parameters spec.SetResolution(3.0); Energy
calculations
 // Properties spec.SetAccuracy(AngStepSize20); (unsigned int) bond.GetBondOrder(); spec.SetStereo(NoStereoSpecificProbes); #include <openbabel/forcefield.h> (bool) bond.IsPrimaryAmide(); // and 2 and 3... spec.SetNormalization(NormalizationTowardsZeroMean); #include <openbabel/mol.h> (bool) bond.IsSingle(); // and 2 and 3... (bool) bond.IsRotor(); // Calculate and print OBMol mol; std::vector<double> sphore; /* ... */ // Flanking atoms sphore = spec.GetSpectrophore(&mol); (OBAtom*) bond.GetBeginAtom(); for (int i(0); i < sphore.size(); ++i) // Select the MMFF94 forcefield (OBAtom*) bond.GetEndAtom(); { OBForceField* pFF; OBAtom* atom; (OBAtom*) bond.GetNbrAtom(atom); std::cout << sphore[i] << "t"; pFF = OBForceField::FindForceField("MMFF94"); } if (!pFF) exit(1); // Is bond in ring? std::cout << std::endl; (bool) bond.IsInRing(); // Set the logfile pFF->SetLogFile(&std::cerr); Stereochemistry
 // Assign atom types, parameters, ... Substructure
search
 pFF->Setup(mol); #include <openbabel/mol.h> // Calculate the energy #include <openbabel/parsmart.h> #include <openbabel/obconversion.h> pFF->Energy(); #include <openbabel/mol.h> #include <openbabel/stereo/tetrahedral.h> #include <openbabel/atom.h> // Perform maximum 1000 steps of minimization OBMol mol; pFF->ConjugateGradients(1000); OBMol mol; OBConversion conv; OBAtom* atom; conv.SetInFormat("smi"); /* ... */ conv.ReadString(&mol, "C[C@H](Cl)Br"); // Create a SMARTS pattern of a phenyl ring // Stereofacade object OBSmartsPattern sp; OBStereoFacade facade(&mol); Open
Babel
 sp.Init("c1ccccc1"); (unsigned int) facade.NumTetrahedralStereo(); (unsigned int) facade.NumCisTransStereo(); This documentation is part of the Open Babel project. For more information, // Properties of the substructure (unsigned int) facade.SquarePlanarStereo(); see www.openbabel.org. Open Babel is free software; you can redistribute if (sp.IsValid()) it and/or modify it under the terms of the GNU General Public License as { // Loop over all atoms to check if stereocenter published by the Free Software Foundation version 2 of the License. Open std::cout << sp.NumAtoms(); FOR_ATOMS_OF_MOL(atom, mol) Babel is distributed in the hope that it will be useful, but without any std::cout << sp.NumBonds(); { std::cout << sp.GetSmarts(); std::cout << atom->GetId() << ": "; warranty; without even the implied warranty of merchantability or fitness for } if (facade.HasTetrahedralStereo(atom->GetId())) a particular purpose. See the GNU General Public License for more details. std::cout << ": stereo"; // Matching else (bool) sp.Match(mol, true); // Single matching std::cout << ": no stereo"; Spectrophore™ (bool) sp.Match(mol, false); // Complete matching std::cout << std::endl; } Spectrophore™ is a trademark of Silicos NV and the technology is part of // Substructure mapping the Open Babel project. std::vector<std::vector<int> > mapListA; mapListA = sp.GetMapList(); // Non-unique matches std::vector<std::vector<int> > mapListU; Rings
 Silicos
NV
 mapListU = sp.GetUMapList(); // Unique matches for (int m(0); m < mapListU.size(); ++m) Silicos is a fee-for-service company empowering open source chemo- { #include <openbabel/mol.h> informatics virtual screening technologies for the discovery of novel lead std::cout << "Unique match " << m << std::endl; #include <openbabel/ring.h> compounds and database characterization. Silicos fully endorses the for (int a(0); a < mapListU[m].size(); ++a) #include <openbabel/math/vector3.h> concept of open innovation and open source software development, and { provides its clients with a wide variety of computational chemistry-based atom = mol.GetAtom(mapListU[m][a]); OBMol mol; lead discovery services, including Open Babel support, training and code std::cout << atom->GetAtomicNum() << std::endl; /* ... */ } development. Please visit www.silicos.com for more details. } // Get the smallest-set-of-smallest-rings std::vector<OBRing*> rings = mol.GetSSSR(); vector3 center; vector3 normal_up; Spectrophores™
 vector3 normal_down; for (int i(0); i < rings.size(); ++i) Copyright © 2010 Silicos NV { Silicos NV #include <openbabel/obspectrophore.h> (bool) rings[i].IsAromatic(); #include <openbabel/mol.h> (int) rings[i].Size(); Wetenschapspark 7, (bool) rings[i].findCenterAndNormal(center, B-3590 Diepenbeek OBMol mol; normal_up, Belgium /* ... */ normal_down); } www.silicos.com // Create a Spectrophore object www.openbabel.org OBSpectrophore spec; 
 www.silicos.com
 www.silicos.com