reaction stoichiometry

User 870ab5b546

09-03-2010 19:19:53




Is there any progress on allowing reaction definitions to specify stoichiometry?


For example, when defining the reaction of RMgBr with RCO2Et, I have to define the reaction as RMgBr + RMgBr + RCO2Et -> R2C(R)OH.  If a user enters only RMgBr + RCO2Et into MarvinSketch, I have to duplicate each of the reactants in turn and then submit every permutation of the three reagents to Reactor.  


Previously you said you were working on adding support for stoichiometry, so the reaction definition would be 2RMgBr + RCO2Et -> R2C(R)OH.  This feature would reduce the maximum number of calls to Reactor from 12 to 2.  



 

ChemAxon d76e6e95eb

10-03-2010 09:12:26

Yes, we call it rectant ratio, and it is supported in the latest release. You can specify it in the form of "2:1" for example. Reactor will react with the first Grignard compound with your ester and then will react the product with a second Grignard compound.


Please see this forum topic for more details about command line options, and the APIDoc if you would like to use it from code.

User 870ab5b546

10-03-2010 14:32:21

Hm, looking at your example of primary amine + epoxide -> tertiary amine, I don't think it fits what we need.  In that case, the reaction definition for the reaction of the first equivalent of epoxide is the same as the reaction definition for the second equivalent of epoxide.  However, in a case like the reaction of a carbanion with an ester, we must use both equivalents of the carbanion to define the product.  The following reaction definition is an example of what I would like to see supported.  Note that the product includes two C(3) atoms.


<?xml version="1.0" ?>
<cml>
<MDocument>
<MChemicalStruct>
<reaction>
<arrow type="DEFAULT" x1="-2.5360386878252745" y1="0.4030827127735858" x2="1.2092233981732754" y2="0.398454966329136" />
<propertyList>
<property dictRef="NAME" title="NAME">
<scalar><![CDATA[C(-) to ester]]></scalar>
</property>
<property dictRef="REACTIVITY" title="REACTIVITY">
<scalar><![CDATA[
dynamicpKb(reactant(0), "1") > 15
&& dynamicpKb(reactant(1), "1") > 15
&& ((dynamicpKb(reactant(0), "1") < 30
&& dynamicpKb(reactant(1), "1") < 30)
|| min(dynamicpKa(reactant(2), filter(ratom(5), "match('[C:1][H]', 1)"))) > 15
|| dynamicpKa(ratom(5)) == "NaN")
&& !match(ratom(3), "[C:1]C=O", 1)
&& !match(ratom(3), "[C:1]C=,#N", 1)
]]></scalar>
</property>
<property dictRef="EXCLUDE" title="EXCLUDE">
<scalar><![CDATA[
totalCharge(reactant(2)) < 0
]]></scalar>
</property>
</propertyList>
<reactantList>
<molecule molID="m1">
<atomArray
atomID="a1"
elementType="C"
formalCharge="-1"
mrvMap="3"
x2="-12.033082008361816"
y2="1.1227853298187256"
/>
<bondArray>
</bondArray>
</molecule>
<molecule molID="m2">
<atomArray
atomID="a1 a2 a3 a4 a5"
elementType="O C H O C"
mrvMap="2 1 5 4 0"
mrvQueryProps="0 0 L,H,C: 0 0"
x2="-7.075778961181641 -7.075778961181641 -8.409458083009676 -5.742099839353605 -4.408420717525569"
y2="2.1469244956970215 0.6069244956970214 -0.1630755043029789 -0.16307550430297846 0.6069244956970214"
/>
<bondArray>
<bond atomRefs2="a1 a2" order="2" />
<bond atomRefs2="a2 a4" order="1" />
<bond atomRefs2="a2 a3" order="1" />
<bond atomRefs2="a4 a5" order="1" />
</bondArray>
</molecule>
</reactantList>
<productList>
<molecule molID="m3">
<atomArray
atomID="a1 a2 a3 a4 a5"
elementType="O C H C C"
mrvMap="2 1 5 3 3"
mrvQueryProps="0 0 L,H,C: 0 0"
x2="4.414802551269531 4.414802551269531 3.0811234294414955 5.748481673097567 4.414802551269531"
y2="2.1145290517807007 0.5745290517807007 -0.19547094821929978 -0.1954709482192989 -0.9654709482192994"
/>
<bondArray>
<bond atomRefs2="a1 a2" order="1" />
<bond atomRefs2="a2 a5" order="1" />
<bond atomRefs2="a2 a3" order="1" />
<bond atomRefs2="a2 a4" order="1" />
</bondArray>
</molecule>
<molecule molID="m4">
<atomArray
atomID="a1 a2"
elementType="O C"
mrvMap="4 0"
x2="8.112862784676569 9.446541906504603"
y2="0.3240132162560405 1.0940132162560405"
/>
<bondArray>
<bond atomRefs2="a1 a2" order="1" />
</bondArray>
</molecule>
</productList>
</reaction>
</MChemicalStruct>
</MDocument>
</cml>

The definition of this reaction that we use right now has two equivalents of the carbanion in the reactants, mapped as atoms 3 and 4, each incorporated separately into the product.  When we grab two reactants from Marvin and test them to see if they will undergo the reaction, we need to clone one of the reactants, then try each permutation of the three molecules to see if any of them will fit the definition.  If they don't we duplicate the other reactant and repeat.  Obviously, it would be a lot easier for us if Reactor would duplicate the carbanion AFTER it determined that the two reactants fit the reaction definition, because it would already know at that point which reactant was the carbanion.

ChemAxon d76e6e95eb

12-03-2010 09:19:02

I understand, that you can handle that the calculations in the rules can cover the two mechanisms merged in a single scheme, but the main problem is purely technical. We do not support multiple occurences of the same map number on one side of the reaction arrow. The issue leads far affecting not just reactor, but automapping and reaction searching as well. I am not saying, that we will not implement it in the future, but probably not in the near future.