Ratio bug in Reactor

User 7a4bd58ff0

19-12-2011 16:33:04

I get output when I specify one ratio and ArrayOutofBound exceptions when I specify another.  See below; the ratios I'm testing are 1:10:10, 10:1:10, and 10:10:1.



$ ./src/test/run_reactor.sh "C(OCC1=CC=CC=C1)C1C(COCC2=CC=CC=C2)C(COCC2=CC=CC=C2)C(COCC2=CC=CC=C2)C1COCC1=CC=CC=C1" -r "[#6:1][OH:2].[#6:3]-[F,Cl,Br,I:4].[Na+]>>[#6:1][O:2][#6:3]" --reverse -f cxsmarts --ratio 10:10:1


SEVERE: 2  [main|chemaxon.reaction.ConcurrentReactorProcessor.main|12/19/2011 11:26:19] 


chemaxon.reaction.ReactionException: chemaxon.util.concurrent.processors.WorkUnitException: java.lang.ArrayIndexOutOfBoundsException: 2


Caused by:


java.lang.ArrayIndexOutOfBoundsException: 2


Caused by:


2


at chemaxon.reaction.ConcurrentReactorProcessor.react(ConcurrentReactorProcessor.java:556)


at chemaxon.reaction.ConcurrentReactorProcessor.run(ConcurrentReactorProcessor.java:696)


at chemaxon.reaction.ConcurrentReactorProcessor.main(ConcurrentReactorProcessor.java:1223)


at chemaxon.reaction.Reactor.main(Reactor.java:1372)


Caused by: chemaxon.util.concurrent.processors.WorkUnitException: java.lang.ArrayIndexOutOfBoundsException: 2


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:441)


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.ArrayIndexOutOfBoundsException: 2


at chemaxon.reaction.ReactantRatioHandlerEnumerator.createNextReactantSet(ReactantRatioHandlerEnumerator.java:213)


at chemaxon.reaction.ReactantRatioHandlerEnumerator.reactAll(ReactantRatioHandlerEnumerator.java:192)


at chemaxon.reaction.ReactantRatioHandlerEnumerator.reactRatio(ReactantRatioHandlerEnumerator.java:167)


at chemaxon.reaction.ReactantRatioHandlerEnumerator.react(ReactantRatioHandlerEnumerator.java:87)


at chemaxon.reaction.Reactor.react(Reactor.java:1289)


at chemaxon.reaction.ConcurrentReactorProcessor$ReactorWorkUnit.call(ConcurrentReactorProcessor.java:366)


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


... 13 more


 


ERROR: An error occured, check the log for details. Use --ignore-error option to ignore errors during reaction processing.


$ ./src/test/run_reactor.sh "C(OCC1=CC=CC=C1)C1C(COCC2=CC=CC=C2)C(COCC2=CC=CC=C2)C(COCC2=CC=CC=C2)C1COCC1=CC=CC=C1" -r "[#6:1][OH:2].[#6:3]-[F,Cl,Br,I:4].[Na+]>>[#6:1][O:2][#6:3]" --reverse -f cxsmarts --ratio 1:10:10


OCC1=CC=CC=C1 |c:4,6,t:2|


[F,Cl,Br,I]CC1C(COCC2=CC=CC=C2)C(COCC2=CC=CC=C2)C(COCC2=CC=CC=C2)C1COCC1=CC=CC=C1 |c:9,11,20,22,31,33,43,45,t:7,18,29,41|


[Na+]


OCC1=CC=CC=C1 |c:4,6,t:2|


OCC1C(C[F,Cl,Br,I])C(COCC2=CC=CC=C2)C(COCC2=CC=CC=C2)C1COCC1=CC=CC=C1 |c:12,14,23,25,35,37,t:10,21,33|


[Na+]


OCC1=CC=CC=C1 |c:4,6,t:2|


OCC1C(COCC2=CC=CC=C2)C(C[F,Cl,Br,I])C(COCC2=CC=CC=C2)C1COCC1=CC=CC=C1 |c:9,11,23,25,35,37,t:7,21,33|


[Na+]


OCC1=CC=CC=C1 |c:4,6,t:2|


OCC1C(CO)C(COCC2=CC=CC=C2)C(COCC2=CC=CC=C2)C1C[F,Cl,Br,I] |c:12,14,23,25,t:10,21|


[Na+]


OCC1=CC=CC=C1 |c:4,6,t:2|


OCC1C(CO)C(COCC2=CC=CC=C2)C(C[F,Cl,Br,I])C1COCC1=CC=CC=C1 |c:12,14,27,29,t:10,25|


[Na+]


OCC1=CC=CC=C1 |c:4,6,t:2|


OCC1C(C[F,Cl,Br,I])C(CO)C(COCC2=CC=CC=C2)C1COCC1=CC=CC=C1 |c:15,17,27,29,t:13,25|


[Na+]


OCC1=CC=CC=C1 |c:4,6,t:2|


OCC1C(C[F,Cl,Br,I])C(COCC2=CC=CC=C2)C(CO)C1COCC1=CC=CC=C1 |c:12,14,27,29,t:10,25|


[Na+]


OCC1=CC=CC=C1 |c:4,6,t:2|


OCC1C(CO)C(C[F,Cl,Br,I])C(COCC2=CC=CC=C2)C1CO |c:15,17,t:13|


[Na+]


OCC1=CC=CC=C1 |c:4,6,t:2|


OCC1C(CO)C(COCC2=CC=CC=C2)C(CO)C1C[F,Cl,Br,I] |c:12,14,t:10|


[Na+]


OCC1C(CO)C(CO)C(CO)C1CO


[F,Cl,Br,I]CC1=CC=CC=C1 |c:4,6,t:2|


[Na+]


OCC1=CC=CC=C1 |c:4,6,t:2|


OCC1C(CO)C(CO)C(C[F,Cl,Br,I])C1CO


[Na+]


$ ./src/test/run_reactor.sh "C(OCC1=CC=CC=C1)C1C(COCC2=CC=CC=C2)C(COCC2=CC=CC=C2)C(COCC2=CC=CC=C2)C1COCC1=CC=CC=C1" -r "[#6:1][OH:2].[#6:3]-[F,Cl,Br,I:4].[Na+]>>[#6:1][O:2][#6:3]" --reverse -f cxsmarts --ratio 10:1:10


SEVERE: 1  [main|chemaxon.reaction.ConcurrentReactorProcessor.main|12/19/2011 11:27:11] 


chemaxon.reaction.ReactionException: chemaxon.util.concurrent.processors.WorkUnitException: java.lang.ArrayIndexOutOfBoundsException: 1


Caused by:


java.lang.ArrayIndexOutOfBoundsException: 1


Caused by:


1


at chemaxon.reaction.ConcurrentReactorProcessor.react(ConcurrentReactorProcessor.java:556)


at chemaxon.reaction.ConcurrentReactorProcessor.run(ConcurrentReactorProcessor.java:696)


at chemaxon.reaction.ConcurrentReactorProcessor.main(ConcurrentReactorProcessor.java:1223)


at chemaxon.reaction.Reactor.main(Reactor.java:1372)


Caused by: chemaxon.util.concurrent.processors.WorkUnitException: java.lang.ArrayIndexOutOfBoundsException: 1


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:441)


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.ArrayIndexOutOfBoundsException: 1


at chemaxon.reaction.ReactantRatioHandlerEnumerator.createNextReactantSet(ReactantRatioHandlerEnumerator.java:213)


at chemaxon.reaction.ReactantRatioHandlerEnumerator.reactAll(ReactantRatioHandlerEnumerator.java:192)


at chemaxon.reaction.ReactantRatioHandlerEnumerator.reactRatio(ReactantRatioHandlerEnumerator.java:167)


at chemaxon.reaction.ReactantRatioHandlerEnumerator.react(ReactantRatioHandlerEnumerator.java:87)


at chemaxon.reaction.Reactor.react(Reactor.java:1289)


at chemaxon.reaction.ConcurrentReactorProcessor$ReactorWorkUnit.call(ConcurrentReactorProcessor.java:366)


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


... 13 more


 


ERROR: An error occured, check the log for details. Use --ignore-error option to ignore errors during reaction processing.




User 7a4bd58ff0

19-12-2011 16:55:49

Could I get a patch fixing this?

ChemAxon afdac7b783

21-12-2011 10:15:27

Hello,

My colleague who can answer your question is on holiday; he will answer to you as soon as he is back.

Regards,
Viktoria

ChemAxon d76e6e95eb

21-12-2011 10:21:29

In the meantime you might consider emulating the automatic ratio option by "manually" feeding back the products as reactants to the same reaction again. Actually, the ratio option does the same. It's less convenient, I admit, but it lets you keep going until you get a full solution.

ChemAxon e08c317633

02-01-2012 15:50:20

Reaction schema:


reactant1 + reactant2 + reactant3 -> product1


In reverse mode:


product1 ->  reactant1 + reactant2 + reactant3


In reverse mode there is only one reactant, so the --ratio n1:n2:n3 ratio setting will not work, the correct format is --ratio n1.


Example:


react "C(OCC1=CC=CC=C1)C1C(COCC2=CC=CC=C2)C(COCC2=CC=CC=C2)C(COCC2=CC=CC=C2)C1COCC1=CC=CC=C1" -r "[#6:1][OH:2].[#6:3]-[F,Cl,Br,I:4].[Na+]>>[#6:1][O:2][#6:3]" --reverse -f cxsmarts --ratio 2
OCC1=CC=CC=C1 |c:4,6,t:2|
[F,Cl,Br,I]CC1C(COCC2=CC=CC=C2)C(COCC2=CC=CC=C2)C(COCC2=CC=CC=C2)C1COCC1=CC=CC=C1 |c:9,11,20,22,31,33,43,45,t:7,18,29,41|
[Na+]
OCC1C(CO)C(COCC2=CC=CC=C2)C(COCC2=CC=CC=C2)C1COCC1=CC=CC=C1 |c:12,14,23,25,35,37,t:10,21,33|
[F,Cl,Br,I]CC1=CC=CC=C1 |c:4,6,t:2|
[Na+]
OCC1=CC=CC=C1 |c:4,6,t:2|
OCC1C(C[F,Cl,Br,I])C(COCC2=CC=CC=C2)C(COCC2=CC=CC=C2)C1COCC1=CC=CC=C1 |c:12,14,23,25,35,37,t:10,21,33|
[Na+]
OCC1C(COCC2=CC=CC=C2)C(CO)C(COCC2=CC=CC=C2)C1COCC1=CC=CC=C1 |c:9,11,23,25,35,37,t:7,21,33|
[F,Cl,Br,I]CC1=CC=CC=C1 |c:4,6,t:2|
[Na+]
OCC1=CC=CC=C1 |c:4,6,t:2|
OCC1C(COCC2=CC=CC=C2)C(C[F,Cl,Br,I])C(COCC2=CC=CC=C2)C1COCC1=CC=CC=C1 |c:9,11,23,25,35,37,t:7,21,33|
[Na+]

Zsolt