From: John M. <jo...@eb...> - 2014-02-24 23:12:58
|
AtomContainerManipulator and CDKHydrogenAdder again - you had the method in your SMARTS example. You need to perceive atom types and add hydrogens. Also remember these are indices so atom 1 = 0, atom 2 = 1 and not how one would number atoms in an editor. J On 24 Feb 2014, at 23:07, Yannick .Djoumbou <y.d...@gm...> wrote: > Exactly. > Having added a new atom and linked it to an already existing atom, I realize that specific properties of the atom have not been set automatically. For example, the AtomTypeName of the newly added atom is still nil. How do I get these to be set? > > In the current example, mol.getAtom(2).getAtomTypeName() and mol.getAtom(2).getCharge() both return nil. > > Cheers, > > Yannick > > > On Mon, Feb 24, 2014 at 3:46 PM, John May <jo...@eb...> wrote: > Yes - that would not make sense, the bond holds atom references and knows nothing about the molecule. Giving it indices (FixNum) only makes sense in the context of a molecule which is where the addBond method is. The method may be missing on this version (1.2.2 i believe) which is nearly 5 years old. > John > > On 24 Feb 2014, at 22:42, Yannick .Djoumbou <y.d...@gm...> wrote: > >> However, this seems to work >> >> Bond.newI(mol.getAtom(0),mol.getAtom(1),Bond::Order::SINGLE). >> And by the way, Bond.new does not work with (FixNum, FixNum, IBond.Order, IBond.Stereo) but with arguments (IAtom, IAtom, IBond.Order, IBond.Stereo). >> >> Thanks, >> >> Yannick >> >> >> On Mon, Feb 24, 2014 at 3:35 PM, Yannick .Djoumbou <y.d...@gm...> wrote: >> Eaxctly, I understand the relationship between IBond and Order. >> I tried both options but they do not work. Ruby seems to just represent Order as a method of the IBond class. >> >> I also tried this: >> - I deleted line >> import 'org.openscience.cdk.interfaces.IBond::Order' >> >> - I ran Bond.new(0, 1, IBond::Order.SINGLE), but got the following message: >> >> NoMethodError: undefined method `SINGLE' for Java::OrgOpenscienceCdkInterfaces::Order:Class >> >> With this call, jruby seems to recognize Order as a class, but SINGLE as a method for the class Order. >> >> Yannick >> >> >> >> On Mon, Feb 24, 2014 at 3:08 PM, John May <jo...@eb...> wrote: >> The Order is a not method of IBond it is an nested class - perhaps the wrappers can’t represent it but it's pretty common so I doubt that’s the case. >> >> I’m flying blind having only spent about 5 mins in Ruby but either try >> >>> import ‘org.openscience.cdk.interfaces.IBond.Order' >> >> >> or >> >>> import ‘org.openscience.cdk.interfaces.IBond’ >> >> with IBond.Order.SINGLE >> >> J >> >> On 24 Feb 2014, at 21:53, Yannick .Djoumbou <y.d...@gm...> wrote: >> >>> HI, >>> >>> I have imported the following classes relative to bonds: >>> >>> import 'org.openscience.cdk.Bond' >>> import 'org.openscience.cdk.interfaces.IBond' >>> import 'org.openscience.cdk.interfaces.IBond$Order' >>> import 'org.openscience.cdk.interfaces.IBond$Stereo' >>> >>> When using the command you just mentioned, I still get the following error: >>> >>> NoMethodError: undefined method `Order' for Java::OrgOpenscienceCdkInterfaces::IBond:Module >>> >>> Cheers, >>> Yannick >>> >>> >>> On Mon, Feb 24, 2014 at 2:15 PM, John May <jo...@eb...> wrote: >>> Sorry, I was going on what you had and presumed ruby was loading Order directly. The full name is IBond.Order.SINGLE. >>> >>>> Bond.new(mol.getAtom(0), mol.getAtom(1), IBond.Order.SINGLE) >>> >>> >>> - John >>> >>> On 24 Feb 2014, at 21:10, Yannick .Djoumbou <y.d...@gm...> wrote: >>> >>>> Thanks for the very quick reply. >>>> >>>> I actually use the Bond class. >>>> I've tried the following options: >>>> - bond = Bond.new(mol.getAtom(0), mol.getAtom(1), Order.SINGLE) >>>> >>>> NoMethodError: undefined method `SINGLE' for Java::OrgOpenscienceCdkInterfaces::Order:Class >>>> from (irb):37:in `evaluate' >>>> from org/jruby/RubyKernel.java:1121:in `eval' >>>> from org/jruby/RubyKernel.java:1517:in `loop' >>>> from org/jruby/RubyKernel.java:1282:in `catch' >>>> from org/jruby/RubyKernel.java:1282:in `catch' >>>> >>>> - mol.addBond(0,1,Order.Single) >>>> >>>> NoMethodError: undefined method `Single' for Java::OrgOpenscienceCdkInterfaces::Order:Class >>>> from (irb):38:in `evaluate' >>>> from org/jruby/RubyKernel.java:1121:in `eval' >>>> from org/jruby/RubyKernel.java:1517:in `loop' >>>> from org/jruby/RubyKernel.java:1282:in `catch' >>>> from org/jruby/RubyKernel.java:1282:in `catch' >>>> >>>> I guess it comes from the fact that I am using Jruby. I should normally not have a problem with this. It's kind of confusing. Do you have a hint? >>>> >>>> Cheers, >>>> >>>> Yannick >>>> >>>> >>>> On Mon, Feb 24, 2014 at 1:21 PM, John May <jo...@eb...> wrote: >>>> Hi Yannick, >>>> >>>> I don’t now about ruby wrappers but can answer 2 and 3. Also looks like rcdk is used for ruby and R bindings which is a little confusing. >>>> >>>> 2) IBond is an interface you need to use the concrete class. There are a couple of way to do this, you can use Bond concrete class (silent package is best) >>>> >>>>> Bond.new(mol.getAtom(0), mol.getAtom(1), Order.SINGLE) >>>> >>>> use a builder - >>>> >>>>> SilentChemObjectBuilder.getInstance().newInstance(IBond.class, mol.getAtom(0), mol.getAtom(1), Order.SINGLE) >>>> >>>> >>>> or use the convince method on the molecule - >>>> >>>>> molcule.addBond(0,1, Order.Single); >>>> >>>> >>>> 3-1) CDKHydrogenAdder is only for implicit hydrogens - you only need this if you have null hydrogen values. For explicit hydrogens use the manipulator. >>>> >>>>> AtomContainerManipulator.convertImplicitToExplicitHydrogens(mol) >>>> >>>> >>>> 3-2) You have a SMARTS pattern and so need to use the SMARTSQueryTool. I don’t think that will be available in the version you are using. Here’s the java code anyways. >>>> >>>> SMARTSQueryTool sqt = new SMARTSQueryTool(“[#8]=[#6]”); >>>> sqt.matches(mol); >>>> for (List<Integer> mapping : sqt.getAllMappings()) { >>>> for (int i = 0; i < mapping.size(); i++) { >>>> System.out.println(mapping.get(i) + 1); >>>> } >>>> } >>>> >>>> Hope that helps, >>>> John >>>> >>> >>> >> >> >> > > |