Molecular size limit for conformer calculations

User c3bf6435ed

14-11-2012 08:03:53

Dear all,


I am trying to use leconformer to calculate the lowest energy conformer of a hexadeca oligosaccharide. When I run the command from the terminal (Mac OS X Mountain Lion) with the default settings, I get this error message:


 



 


./cxcalc leconformer Oligo.sdf > output.sdf


java.util.concurrent.ExecutionException: chemaxon.util.concurrent.processors.WorkUnitException: java.lang.OutOfMemoryError: Java heap space


at chemaxon.util.concurrent.processors.WorkUnitData.getResult(WorkUnitData.java:79)


at chemaxon.util.concurrent.processors.ScheduledWorkUnitData.getResult(ScheduledWorkUnitData.java:60)


at chemaxon.util.concurrent.processors.WorkUnitDataIterator.getNext(WorkUnitDataIterator.java:74)


at chemaxon.marvin.Calculator.run(Calculator.java:1444)


at chemaxon.marvin.Calculator.run(Calculator.java:1345)


at chemaxon.marvin.Calculator.main(Calculator.java:2023)


Caused by: chemaxon.util.concurrent.processors.WorkUnitException: java.lang.OutOfMemoryError: Java heap space


at chemaxon.util.concurrent.processors.InputOrderedWorkUnitProcessor.process(InputOrderedWorkUnitProcessor.java:70)


at chemaxon.util.concurrent.processors.InputOrderedWorkUnitProcessor.processInput(InputOrderedWorkUnitProcessor.java:51)


at chemaxon.util.concurrent.processors.WorkUnitWorker.work0(WorkUnitWorker.java:51)


at chemaxon.util.concurrent.processors.WorkUnitWorker.work(WorkUnitWorker.java:36)


at chemaxon.util.concurrent.worker.Worker$1.call(Worker.java:45)


at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)


at java.util.concurrent.FutureTask.run(FutureTask.java:138)


at chemaxon.util.concurrent.worker.Worker.run(Worker.java:57)


at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)


at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)


at java.util.concurrent.FutureTask.run(FutureTask.java:138)


at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)


at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)


at java.lang.Thread.run(Thread.java:680)


Caused by: java.lang.OutOfMemoryError: Java heap space


at chemaxon.marvin.modelling.mm.CXNForceField.init(CXNForceField.java:255)


at chemaxon.marvin.modelling.mm.Dreiding.init(Dreiding.java:2632)


at chemaxon.marvin.modelling.mm.Dreiding.init(Dreiding.java:2626)


at chemaxon.marvin.modelling.struc.myMolecule.getForceField(myMolecule.java:2626)


at chemaxon.marvin.modelling.struc.myMolecule.getWishGroup(myMolecule.java:2551)


at chemaxon.marvin.modelling.struc.myMolecule.assignForcefieldLengths(myMolecule.java:2681)


at chemaxon.marvin.modelling.struc.myMolecule.<init>(myMolecule.java:2393)


at chemaxon.marvin.modelling.struc.Fragment.getFragMol(Fragment.java:1549)


at chemaxon.marvin.modelling.struc.Fragment.getFragMol(Fragment.java:1446)


at chemaxon.marvin.modelling.struc.Fragment.getForceField(Fragment.java:254)


at chemaxon.marvin.modelling.struc.Fragment.calcForcefield_MM(Fragment.java:446)


at chemaxon.marvin.modelling.struc.Fragment.calcForcefield(Fragment.java:486)


at chemaxon.marvin.modelling.struc.Fragment.calcForcefield(Fragment.java:310)


at chemaxon.marvin.modelling.struc.FragmentConformer.calcEnergy(FragmentConformer.java:92)


at chemaxon.marvin.modelling.struc.FragmentConformer.getEnergy(FragmentConformer.java:98)


at chemaxon.marvin.modelling.struc.FragmentPool.getEnergies(FragmentPool.java:827)


at chemaxon.marvin.modelling.struc.FragmentPool.removeDuplicates(FragmentPool.java:668)


at chemaxon.marvin.modelling.build.BuildCommandBase.callInvokeBuild(BuildCommandBase.java:660)


at chemaxon.marvin.modelling.build.BuildCommand.fetchCoordinates(BuildCommand.java:444)


at chemaxon.marvin.modelling.build.BuildCommandBase.build(BuildCommandBase.java:987)


at chemaxon.marvin.modelling.build.BuildCommandBase.build(BuildCommandBase.java:804)


at chemaxon.marvin.modelling.build.FragFragFuseBuildCommand.nextConformer(FragFragFuseBuildCommand.java:457)


at chemaxon.marvin.modelling.build.FragFragFuseBuildCommand.invokeFuse(FragFragFuseBuildCommand.java:4092)


at chemaxon.marvin.modelling.build.FragFragFuseBuildCommand.invokeBuild(FragFragFuseBuildCommand.java:228)


at chemaxon.marvin.modelling.build.BuildCommandBase.callInvokeBuild(BuildCommandBase.java:631)


at chemaxon.marvin.modelling.build.BuildCommand.fetchCoordinates(BuildCommand.java:444)


at chemaxon.marvin.modelling.build.BuildCommandBase.build(BuildCommandBase.java:987)


at chemaxon.marvin.modelling.build.BuildCommandBase.build(BuildCommandBase.java:804)


at chemaxon.marvin.modelling.build.FragFragFuseBuildCommand.nextConformer(FragFragFuseBuildCommand.java:414)


at chemaxon.marvin.modelling.build.FragFragFuseBuildCommand.invokeFuse(FragFragFuseBuildCommand.java:4092)


at chemaxon.marvin.modelling.build.FragFragFuseBuildCommand.invokeBuild(FragFragFuseBuildCommand.java:228)


at chemaxon.marvin.modelling.build.BuildCommandBase.callInvokeBuild(BuildCommandBase.java:631)


 


 



If I try to run the calculation from the GUI the progress bar stops at 10 % and then nothing more happens.


Does anyone know if there is a molecular size limit for conformer calculations? Are there other alternatives to solve this? Also, what does the error message above mean?


 


Thank you!


/Emil

User c3bf6435ed

14-11-2012 08:18:04










repliko wrote:

Dear all,


I am trying to use leconformer to calculate the lowest energy conformer of a hexadeca oligosaccharide. When I run the command from the terminal (Mac OS X Mountain Lion) with the default settings, I get this error message:


 



 


./cxcalc leconformer Oligo.sdf > output.sdf


java.util.concurrent.ExecutionException: chemaxon.util.concurrent.processors.WorkUnitException: java.lang.OutOfMemoryError: Java heap space


at chemaxon.util.concurrent.processors.WorkUnitData.getResult(WorkUnitData.java:79)


at chemaxon.util.concurrent.processors.ScheduledWorkUnitData.getResult(ScheduledWorkUnitData.java:60)


at chemaxon.util.concurrent.processors.WorkUnitDataIterator.getNext(WorkUnitDataIterator.java:74)


at chemaxon.marvin.Calculator.run(Calculator.java:1444)


at chemaxon.marvin.Calculator.run(Calculator.java:1345)


at chemaxon.marvin.Calculator.main(Calculator.java:2023)


Caused by: chemaxon.util.concurrent.processors.WorkUnitException: java.lang.OutOfMemoryError: Java heap space


at chemaxon.util.concurrent.processors.InputOrderedWorkUnitProcessor.process(InputOrderedWorkUnitProcessor.java:70)


at chemaxon.util.concurrent.processors.InputOrderedWorkUnitProcessor.processInput(InputOrderedWorkUnitProcessor.java:51)


at chemaxon.util.concurrent.processors.WorkUnitWorker.work0(WorkUnitWorker.java:51)


at chemaxon.util.concurrent.processors.WorkUnitWorker.work(WorkUnitWorker.java:36)


at chemaxon.util.concurrent.worker.Worker$1.call(Worker.java:45)


at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)


at java.util.concurrent.FutureTask.run(FutureTask.java:138)


at chemaxon.util.concurrent.worker.Worker.run(Worker.java:57)


at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)


at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)


at java.util.concurrent.FutureTask.run(FutureTask.java:138)


at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)


at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)


at java.lang.Thread.run(Thread.java:680)


Caused by: java.lang.OutOfMemoryError: Java heap space


at chemaxon.marvin.modelling.mm.CXNForceField.init(CXNForceField.java:255)


at chemaxon.marvin.modelling.mm.Dreiding.init(Dreiding.java:2632)


at chemaxon.marvin.modelling.mm.Dreiding.init(Dreiding.java:2626)


at chemaxon.marvin.modelling.struc.myMolecule.getForceField(myMolecule.java:2626)


at chemaxon.marvin.modelling.struc.myMolecule.getWishGroup(myMolecule.java:2551)


at chemaxon.marvin.modelling.struc.myMolecule.assignForcefieldLengths(myMolecule.java:2681)


at chemaxon.marvin.modelling.struc.myMolecule.<init>(myMolecule.java:2393)


at chemaxon.marvin.modelling.struc.Fragment.getFragMol(Fragment.java:1549)


at chemaxon.marvin.modelling.struc.Fragment.getFragMol(Fragment.java:1446)


at chemaxon.marvin.modelling.struc.Fragment.getForceField(Fragment.java:254)


at chemaxon.marvin.modelling.struc.Fragment.calcForcefield_MM(Fragment.java:446)


at chemaxon.marvin.modelling.struc.Fragment.calcForcefield(Fragment.java:486)


at chemaxon.marvin.modelling.struc.Fragment.calcForcefield(Fragment.java:310)


at chemaxon.marvin.modelling.struc.FragmentConformer.calcEnergy(FragmentConformer.java:92)


at chemaxon.marvin.modelling.struc.FragmentConformer.getEnergy(FragmentConformer.java:98)


at chemaxon.marvin.modelling.struc.FragmentPool.getEnergies(FragmentPool.java:827)


at chemaxon.marvin.modelling.struc.FragmentPool.removeDuplicates(FragmentPool.java:668)


at chemaxon.marvin.modelling.build.BuildCommandBase.callInvokeBuild(BuildCommandBase.java:660)


at chemaxon.marvin.modelling.build.BuildCommand.fetchCoordinates(BuildCommand.java:444)


at chemaxon.marvin.modelling.build.BuildCommandBase.build(BuildCommandBase.java:987)


at chemaxon.marvin.modelling.build.BuildCommandBase.build(BuildCommandBase.java:804)


at chemaxon.marvin.modelling.build.FragFragFuseBuildCommand.nextConformer(FragFragFuseBuildCommand.java:457)


at chemaxon.marvin.modelling.build.FragFragFuseBuildCommand.invokeFuse(FragFragFuseBuildCommand.java:4092)


at chemaxon.marvin.modelling.build.FragFragFuseBuildCommand.invokeBuild(FragFragFuseBuildCommand.java:228)


at chemaxon.marvin.modelling.build.BuildCommandBase.callInvokeBuild(BuildCommandBase.java:631)


at chemaxon.marvin.modelling.build.BuildCommand.fetchCoordinates(BuildCommand.java:444)


at chemaxon.marvin.modelling.build.BuildCommandBase.build(BuildCommandBase.java:987)


at chemaxon.marvin.modelling.build.BuildCommandBase.build(BuildCommandBase.java:804)


at chemaxon.marvin.modelling.build.FragFragFuseBuildCommand.nextConformer(FragFragFuseBuildCommand.java:414)


at chemaxon.marvin.modelling.build.FragFragFuseBuildCommand.invokeFuse(FragFragFuseBuildCommand.java:4092)


at chemaxon.marvin.modelling.build.FragFragFuseBuildCommand.invokeBuild(FragFragFuseBuildCommand.java:228)


at chemaxon.marvin.modelling.build.BuildCommandBase.callInvokeBuild(BuildCommandBase.java:631)


 


 



If I try to run the calculation from the GUI the progress bar stops at 10 % and then nothing more happens.


Does anyone know if there is a molecular size limit for conformer calculations? Are there other alternatives to solve this? Also, what does the error message above mean?


 


Thank you!


/Emil



 


Update:


I added "-Xmx512m" to the command line, to increase the Java heap size to 512 Mb (default is 64 Mb), and now it works just fine!

ChemAxon e08c317633

19-11-2012 16:47:55

Hi,


Thanks for reporting this bug. We will fix the Xmx settings in MarvinBeans scripts. In JChem it is set to "-Xmx500m", so scripts started from JChem should work fine.


Zsolt

User c3bf6435ed

23-11-2012 17:52:50










Zsolt wrote:

Hi,


Thanks for reporting this bug. We will fix the Xmx settings in MarvinBeans scripts. In JChem it is set to "-Xmx500m", so scripts started from JChem should work fine.


Zsolt



No problem!


 


I have another question. When I am running a calculation (e.g. "cxcalc leconformer oligo.sdf > output.sdf") on a dual core Core i5 processor with hyper-threading enabled, the CPU usage (as reported by the task manager in Windows 7) only goes up to 25%. I understand that each core is split into two virtual cores, which would mean that a dual core shows up as a quad core, but is there a way to fully utilize all cores? The java process has 17 threads, so theoretically it should be possible, right?


Right now it looks like every calculation takes four times as long as it should.


 


Regards

ChemAxon e08c317633

29-11-2012 09:06:23

cxcalc should utilize all CPU cores. It does on my quad core i7-3610QM CPU when I run the command


cxcalc leconformer NCI_aug00.smi > out.sdf

, see the attached screenshots.


Multiple CPU cores are utilized only if the input file contains multiple input molecules (batch mode). For one input molecule one core will do all the work.