Yes sorry was just responding... I'm not even sure how you pass a String in there... I get a compiler error. Essentially the IsotopeFactory is really a dictionary of IUPAC isotopes. That method does do what is documented but a tolerance of 1.0 is possibly too high. I still get null but would think it should be something like this (below).
To be honest I've never used the isotope generator, are you sure you don't just need the most-abundant molecular weight (MAMW) there is an efficient function that.? IChemObjectBuilder builder = SilentChemObjectBuilder.getInstance(); > MolecularFormulaRange mfRange = new MolecularFormulaRange(); > > IIsotope o15 = builder.newAtom(); > o15.setAtomicNumber(IAtom.O); > o15.setExactMass(15.99491462); > mfRange.addIsotope(o15, isotope.min, isotope.max); > IIsotope o16 = builder.newAtom(); > o16.setAtomicNumber(IAtom.O); > o16.setExactMass(16.9991317); > mfRange.addIsotope(o16, isotope.min, isotope.max); > MolecularFormulaGenerator generator = new > MolecularFormulaGenerator(builder, 626.75, 626.9, mfRange); > IMolecularFormulaSet formulaSet = new MolecularFormulaSet(); IMolecularFormula formula = generator.getNextFormula(); IsotopePatternGenerator isotope_pattern_generator = new > IsotopePatternGenerator(0.01); > IsotopePattern isotope_pattern = > isotope_pattern_generator.getIsotopes(formula); > for (IsotopeContainer isotope_container : > isotope_pattern.getIsotopes()) { > System.out.println("Isotope: mass:" + isotope_container.getMass() + > " intensity:" + isotope_container.getIntensity()); > } On Tue, 22 Mar 2022 at 22:39, Rob Smith <2robsm...@gmail.com> wrote: > Hi John, > I took a look at the CDK source. Sure enough, the pattern generator just > uses the element symbol to pull the generic isotopes from the atom (see > lines 139-141 here > https://github.com/cdk/cdk/blob/ce36b8af886e08e6015d15a2724001193f71be76/tool/formula/src/main/java/org/openscience/cdk/formula/IsotopePatternGenerator.java#L135 > ). > > That will always overwrite any custom isotopes you have. > > On Tue, Mar 22, 2022 at 3:59 PM Rob Smith <2robsm...@gmail.com> wrote: > >> I'm happy to. Just to clear up that I'm not doing something stupid, >> here's a gist. Let me know and I can still put it up on github. >> >> I've chopped my code down to a minimal example below. The formula >> generator search below will return hits that include 16C and 17C (though >> this snippet just calls getNextFormula once, so it returns just one). The >> masses of these hits will be in the correct range (626.75-626.9). But if >> you print the isotope pattern generated, you will get masses outside of >> that range, because they correspond to the same molecular formula (e.g., >> O38 or O39) with the normal C isotopes (12C, 13C, etc), and therefore >> incorrect masses for each of the isotope pattern masses. In other words, if >> you were to create a vanilla O38 or O39 molecule and generate the isotope >> pattern (which, presumably uses the naturally-occuring ratio of 12C : 13C : >> 14C, >> 98.9 : 1.1 : 0.0001) you will get the same result as you do below when >> you generate the isotope patterns for nonstandard isotopes (here, O38 is >> 16C : 17C, 36:3). This suggests to me that the IsotopePatternGenerator does >> not actually use the isotope objects in the IMolecularFormula provided, but >> rather goes off the natural abundances of the atoms in the formula, >> irrespective of the isotopes set in the IMolecularFormula. >> >> public class FormulaGenerator { >> public static void main(String[] args){ >> IChemObjectBuilder builder = SilentChemObjectBuilder.getInstance(); >> MolecularFormulaRange mfRange = new MolecularFormulaRange(); >> >> try{ >> IsotopeFactory isotopeFactory = Isotopes.getInstance(); >> >> IIsotope i = isotopeFactory.getIsotope("O", "15.99491462", 1.0); >> mfRange.addIsotope(i, isotope.min, isotope.max); >> >> i = isotopeFactory.getIsotope("O", "16.9991317", 1.0); >> mfRange.addIsotope(i, isotope.min, isotope.max); >> } catch (IOException e){ >> System.exit(0); >> } >> >> MolecularFormulaGenerator generator = new >> MolecularFormulaGenerator(builder, 626.75, 626.9, mfRange); >> IMolecularFormulaSet formulaSet = new MolecularFormulaSet(); >> >> IMolecularFormula formula = generator.getNextFormula(); >> >> IsotopePatternGenerator isotope_pattern_generator = new >> IsotopePatternGenerator(0.01); >> IsotopePattern isotope_pattern = >> isotope_pattern_generator.getIsotopes(formula); >> for (IsotopeContainer isotope_container : >> isotope_pattern.getIsotopes()) { >> System.out.println("Isotope: mass:" + isotope_container.getMass() + >> " intensity:" + isotope_container.getIntensity()); >> } >> } >> } >> >> On Tue, Mar 22, 2022 at 3:19 PM John Mayfield < >> john.wilkinson...@gmail.com> wrote: >> >>> Sounds like a possible bug, but not completely clear what you're trying >>> to do could you post an issue with example code on GitHub? >>> >>> Thanks, >>> John >>> >>> On Tue, 22 Mar 2022 at 21:06, Rob Smith <2robsm...@gmail.com> wrote: >>> >>>> Hello, >>>> I've built a cdk workflow to generate IMolecularFormulas from a mass. >>>> The workflow allows ranges of counts of different isotopes for different >>>> atoms. So far, so good. >>>> >>>> The next step of the workflow is to generate IsotopePatterns for each >>>> generated IMolecularFormula. >>>> >>>> I'm probably missing something, but I have spent quite some time >>>> writing different approaches and verifications of what is happening. >>>> >>>> I have confirmed that the IMolecularFormulas outputted from the formula >>>> generator step are producing non-natural isotope abundances as expected to >>>> fit the range criteria. However, the IsotopePatternGenerator seems to >>>> ignore these isotopes and print the pattern as if only natural abundances >>>> are being used. >>>> >>>> Does the IsotopePatternGenerator not support non-standard isotope >>>> abundances? Or am I missing a step here? >>>> >>>> I'd appreciate any insight anyone may have, as I've exhausted all code >>>> permutations I can think of. >>>> >>>> Thank you for your time. >>>> -Rob >>>> _______________________________________________ >>>> Cdk-user mailing list >>>> Cdk-user@lists.sourceforge.net >>>> https://lists.sourceforge.net/lists/listinfo/cdk-user >>>> >>>
_______________________________________________ Cdk-user mailing list Cdk-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/cdk-user