Diels-Alder reaction

User 870ab5b546

11-07-2007 19:45:19

I'm trying hard to write a selectivity rule for a Diels-Alder reaction, but I am making absolutely no headway.





The reaction is defined:





Code:
[C:4]=[C:3][C:2]=[C:1].[C:5]=[C:6]>>[C:5]1[C:6][C:1][C:2]=[C:3][C:4]1 |c:7|






Good enough. Here are three examples:





Code:
COC(=C)C=C.C=CC=O>>COC1=CCC(CC1)C=O |t:10|


CO\C=C\C=C.O=C1CCC(=O)C=C1>>[H][C@@]12CC=C[C@H](OC)[C@]1([H])C(=O)CCC2=O |r,c:11,16|


C1C=CC=C1.CCOC(=O)\C=C\C(=O)OCC>>CCOC(=O)[C@@H]1[C@H]2C[C@H](C=C2)[C@H]1C(=O)OCC |r,c:1,3,25|






Now, I'm trying to write a selectivity rule that will give me only the ortho and para products. It seems to me that the rule should be,





Code:
charge(ratom(6), "pi") && -charge(ratom(1), "pi")






But I keep getting both ortho/para and meta products.





Furthermore, I calculated the charges inside MarvinSketch, this time looking at C=CC=O.CNC(=C)C=C so as to emphasize the charge distribution. When I calculate the charge, type pi, taking resonant structures, I get 0.034 and 0.021 for C(1) and C(4) of the diene (N is attached to C(2)), and -0.064 and 0.061 for C(2) and C(3) of the dienophile (the carbonyl C is C(1)). Now, the charges for the dienophile seem correct, with the beta-carbon more positively charged than the alpha-carbon, but the charges on the diene seem wrong: C(1) should have a more negative charge than C(4) due to resonance from N.





If I turn off the "take resonant structures" option, the diene charges seem more correct (0.009 and 0.018), but the dienophile charges are wrong (0.034 and 0.035).





If I go to total charge, taking resonant structures, the diene charges are wrong again: -0.131 for C(1) and -0.139 for C(4). The dienophile charges are bad again if I turn off the "take resonant structures" option.





So, I have two problems. The first is that I cannot figure out how to get one regioisomer in the Diels-Alder reaction. And the second is that I cannot figure out what function to use to get the proper charge distribution. And I'm not even beginning to try to address the stereoselectivity issues.





Any help would be most welcome. I tried to use the selectivity rule of your Baeyer-Villiger and Friedel-Crafts examples as the bases for my selectivity rule, but no joy.

ChemAxon d76e6e95eb

16-07-2007 12:53:25

Designing a new selective reaction is not often easy, especially if molecular orbital calculations are not available. Our reaction designers will check the possibilities with the Diels-Alder reactions and will get back to you soon.

User 3330d0418f

19-07-2007 07:56:50

Dear Bob,





please let me separate the problems with the Diels-Alder reaction into three basic fields:





1. writing selectivity rule for each reactants in multicomponent reactions.





2. chosing the suitable plugin and creating the appropriate selectivity rule to resolve the regioselectivity of the Diels-Alder reaction.





3. resolving the stereoselectivity of the Diels-Alder reaction.











1. Application of more than one selectivity rule.





If we want to set a selectivity rule for each reactants in a multicomponent reaction than we must use the following syntax:





rule1(for 1rst reactant); rule2(for 2nd reactant); rule3(for 3rd reactant)...





As the general example shows we must use semicolon (;) instead of any logical operators (eg. and, &&) beacause we must not connect not-logical expressions with logical operators.





Let me explain:


If we used the 'and' operator between two selectivity rule in a two component reaction the reactor makes the following:


- I: the reactor chooses the best reaction centre in the first reactant according to the first rule and reacts with ALL of the reaction centers in the second reactant which are suitable for the query.


- II: the reactor chooses the best reaction centre in the second reactant according to the second rule and reacts with ALL of the reaction centers in the first reactant which are suitable for the query.


- III: duplication filtering removes duplicated products.


Now it is understandable that this way all of the possible products are generated without any regioselectivity at all.





If we used semicolon between the two selectivity rule in a two component reaction the reactor chooses the best reaction centre in the first reactant according to the first rule and the best reaction centre in the second reactant according to the second rule and creates only one regioisomer pruduct.











2. Finding the regioselectivity rule for the Diels-Alder reaction.





This is the most complicated problem. Electrocyclization reactions (like Diels-Alder) can be modelled well with the Frontal Orbital (FO) Theory.


According to this theory the HOMO (Highest Occupied Molecular Orbital) of the dien interacts with the LUMO (Lowest Unoccupied Molecular Orbital) of the dienofil (filodien, olefin) and the most preferred spacial orientation of the reactants in the transition state of the reaction is where the hihgest HOMO-LUMO overlapping occures (this results regioselectivity).


We must seek this optimal HOMO-LUMO combination.





Now we can not calculate molecular orbitals quickly in lack of fast ab initio calculating methods but we can approach the real shape of the HOMO-LUMO by Linear Combination of Atomic Orbitals (LCAO). Unfortunately Chemaxon doesn't have such a plugin yet that calculates these linear combination coefficients but we have been already talked about the need of this kind of a calculation with the developers.





So we have to approach this calculation with that tool what we already have and charge calculation plugin seems to be suitable for this purpose.





Using the calculation of the charge of the reaction center atom is a rough approach to the linear combination coefficient of the HOMO on this atom because the electron density of the reaction center atom is added together from the HOMO and all other molecular orbitals under it. Using 'pi' charge calculation may resolve this problem because in case of the C=C double bonds there is usually one MO under HOMO which is usually the sigma skeleton of the molecule.


Calculating the 'pi' charge we can choose that atom in the dien for reaction center which has the highest 'pi' electron density thus the lowest 'pi' charge, like this:





-charge(rarom(1), "pi")





The problem is that the dienofil's LUMO is a virtual molecular orbital, it is an abstract representation of the willingness of the atoms to adopt electrons from the other molecule. This willingness can be more or less modelled with their charge but in different way as in case of the dien. The total charge should be calculated and the atom bearing the most positive total charge should be choosen for reaction center, like this:





charge(ratom(6))





And yes! There is one more big simplification in the application of the FO theory to the Diels-Alder reaction. It's a temperature activated 4+2 electrocyclization, so we always handle the dien and the filodien partner as a separated dien and an isolated olefin even if they were conjugated. The substituents on these separated olefins will rise or decrease the energy level of the HOMO and the LUMO and they can make the shape of these orbitals asymmetric with their electronic pushing or withrawing effects. The energy level difference between the HOMO and the LUMO will influence the speed of the reaction and the shape of these orbitals will influence the regioselectivity.





This is the reason why should we predict the regioselectivity of the Diels-Alder reaction more or less correctly by using the charge plugin differently on both reactants. As this approach is wery rough there is a high possibility to find some example reactions which will generate incorrect regioisomer product. The solution for this problem is to narrowing the validity of the reaction with drawing more exact querys and creating more than one Diels-Alder reactions each for one specific type of starting materials. In this case the exclude rules could be useful too. The other solution is fine tuning the calculation in the selectiviti rule by using ratom(4) and ratom(5) too because they are reaction centers too.








Now the more simpliest selectivity rule for the 4+2 Diels-Alder cycloaddition which works:


-charge(ratom(1), "pi"); charge(ratom(6))














3. resolving the stereoselectivity of the Diels-Alder reaction.





We have already been talking a lot about resolving this problem by Chemaxon.





One suggestion was that we should predefine the stereocenters on the product query with wedged bonds, and the reactor should generate only these stereoisomers. In those case when the starting materials are symmetric so the product is aciral, the reactor should replace vedged bonds with simple bonds.


Now it works wit more or less succes. This method may be fine tuned with using some selectivity or exclude or reactivity rules written up to the product molecule.





The other suggestion was that we should write the reaction so that it should be the most general: without any stereo information, but we should have define and map the ligands on patoms 1, 4, 5 and 6 because we must refer on them in the pruduct selectivity rules. These atoms can become new stereocenters.


To succesfully use this suggestion the reactor should generate all of the possible stereoisomers of the product and we should select from them the correct products with selectivity or exclude rules which are written up to patoms.





I hope that I could help you.


I would appreciate any suggestions and if you had some questios please don't hesitate to ask me.


Jeno Varga

User 870ab5b546

19-07-2007 18:17:24

Wow, that's quite a response.





With your suggestion, the regioselectivity rule is now working very well. Thanks!





Related to the issue of the syntax for independent selectivity rules, I have this question: Is there a way to say, "Use as a screen for ratom(1) selectivity rule 1 first, and then selectivity rule 2 second." Selectivity rule 2 should come into play only if selectivity rule 1 fails to make a decision between two or more possibilities.





With respect to stereochemistry: I think your second suggestion is satisfactory and better than the first. I tried adding Any atoms to the SMs and the product with map numbers and appropriate stereochemistry:





Code:
[*:13]\[C:1]([*:14])=[CH:2]\[CH:3]=[C:4](/[*:7])[*:8].[*:9]\[C:5]([*:10])=[C:6](/[*:11])[*:12]>>[*:14][C:1]1([*:13])[CH:2]=[CH:3][C:4]([*:8])([*:7])[C:5]([*:9])([*:10])[C:6]1([*:12])[*:11] |c:15,@:15,19,22,25|






but Reaction Editor didn't like it. If Reaction Editor accepted this formula, it would be an ideal situation. Then we could write a selectivity rule for the endo rule.

User 3330d0418f

23-07-2007 16:28:11

Regarding to your first question: "Related to the issue of the syntax for independent selectivity rules, I have this question: Is there a way to say, "Use as a screen for ratom(1) selectivity rule 1 first, and then selectivity rule 2 second." Selectivity rule 2 should come into play only if selectivity rule 1 fails to make a decision between two or more possibilities."





Yes, you're right. Let me show an example.





Let's stay by our original Diels-Alder reaction:


[C:1]=[C:2][C:3]=[C:4].[C:5]=[C:6]>>[C:5]1[C:6][C:1][C:2]=[C:3][C:4]1





Expand our selectivity rule with an additional condition: hCount(ratom(1)). This condition is a simple expression of the steric effect coming from the substituents on the terminal atoms of the dien.


If hcount is high than it is preferred. Now let's see three examples:





1: [#6]OC(=C)C=C.C=CC=O>>


2: [#6]OC(=C)\C=C\[#6].C=CC=O>>


3: [#6]O\C=C(O[#6])\C=C\[#6].C=CC=O>>





The selectivity rule is the following:


hCount(ratom(1)); -charge(ratom(1), "pi"); charge(ratom(6))





In case of the first example the reactor can not decide between the two terminal atoms of the dien according to the hcount expression because hcount is equal on the two atoms. Here -charge(ratom(1), "pi") makes the decision. So the reaction is:


[#6]OC(=C)C=C.C=CC=O>>[#6]OC1=CCC(CC1)C=O





In case of the second example hcount makes the decision and -charge(ratom(1), "pi") has no role, so the reaction is:


[#6]OC(=C)\C=C\[#6].C=CC=O>>[#6]OC1=CC([#6])CC(C1)C=O





In case of the third reaction hcount is equal again on the two terminal atoms of the dien and -charge(ratom(1), "pi") makes the decision again:


[#6]O\C=C(O[#6])\C=C\[#6].C=CC=O>>[#6]OC1C(CC([#6])C=C1O[#6])C=O





Consequently: if the first expression in the selectivity rule leaves more than one possibility the second expression will choose among them. But if the first expression leaves only one choice the second expression won't have any effect.











On the score of your second question about the product's stereochemistry I think that we should talk about the possible solutions with the program developers. I will ask them about their opinion.

User 870ab5b546

23-07-2007 17:09:56

Wonderful. Thanks!





If you want to talk about stereochemistry, perhaps we can do it by Skype. I've done that with György before.

User 3330d0418f

27-07-2007 10:12:19

The solution for the product's stereochemistry problem is under development now. There are plenty of comments about this job in Chemaxon's internal notification system. I hope that the solution comes soon.


Best regards


Jeno

ChemAxon d76e6e95eb

27-07-2007 10:50:55

Unfortunately the solution will not come soon as we focus our resources on other developments right now.

User 870ab5b546

27-07-2007 13:12:00

Oh, that's disappointing news.





Even for a simple reaction such as addition of Br2 across an alkene, I can't define the relative stereochemistry of the product in Reactor.





I'm not sure why this would be so difficult for you. SMARTS already enables encoding of stereochemistry.





Well, let me urge you to solve this problem as quickly as possible.

ChemAxon d76e6e95eb

27-07-2007 17:54:48

I hear you, and agree that this is a missing feature. We will consult with the management to set the priority accourding to our possibilities.

ChemAxon d76e6e95eb

06-08-2007 10:13:33

We consulted. The request is on out internal feature request system, but no deadline fixed for the development. It seems, however, that we will not implement it in this year.

User 870ab5b546

08-08-2007 16:22:16

Oh, I've figured out a workaround.





For each stereochemical possibility in the starting materials, you need a separate reaction definition.





So, for bromination of an alkene, first you subject your substrates to:





Code:
      <reactantList>


        <molecule molID="m1">


          <atomArray


              atomID="a1 a2 a3 a4"


              elementType="C C C C"


              mrvMap="1 2 3 4"


              mrvQueryProps="0 0 A: A:"


              x2="-0.30241796163212165 -1.8424518427502026 -2.612451842750202 0.4675820383678785"


              y2="6.695844328841227 6.695844328841227 8.029523450669263 5.3621652070131915"


              />


          <bondArray>


            <bond atomRefs2="a1 a4" order="1" />


            <bond atomRefs2="a1 a2" order="2" />


            <bond atomRefs2="a2 a3" order="1" />


          </bondArray>


        </molecule>


      </reactantList>


      <productList>


        <molecule molID="m2">


          <atomArray>


            <atom id="a1" elementType="C" mrvMap="1"


                  x2="11.378104480231892" y2="6.440502322157878" />


            <atom id="a2" elementType="C" mrvMap="2"


                  x2="9.838070599113811" y2="6.440502322157878" />


            <atom id="a3" elementType="Br" mrvMap="6"


                  x2="12.647774670393204" y2="7.3203244427562195" />


            <atom id="a4" elementType="Br" mrvMap="5"


                  x2="8.548327263755079" y2="5.623584241072391" />


            <atom id="a5" elementType="C" mrvMap="3" mrvQueryProps="A:"


                  x2="9.068070599113812" y2="7.774181443985913" />


            <atom id="a6" elementType="C" mrvMap="4" mrvQueryProps="A:"


                  x2="12.148104480231892" y2="5.106823200329842" />


          </atomArray>


          <bondArray>


            <bond atomRefs2="a1 a6" order="1" />


            <bond atomRefs2="a1 a2" order="1" />


            <bond atomRefs2="a1 a3" order="1">


              <bondStereo>H</bondStereo>


            </bond>


            <bond atomRefs2="a2 a5" order="1" />


            <bond atomRefs2="a2 a4" order="1">


              <bondStereo>W</bondStereo>


            </bond>


          </bondArray>


        </molecule>


      </productList>






and then to:





Code:
      <reactantList>


        <molecule molID="m1">


          <atomArray


              atomID="a1 a2 a3 a4"


              elementType="C C C C"


              mrvMap="1 2 3 4"


              mrvQueryProps="0 0 A: A:"


              x2="-0.30241796163212165 -1.8424518427502026 -2.612451842750202 0.5283498677860609"


              y2="6.695844328841227 6.695844328841227 8.029523450669263 7.995437854870858"


              />


          <bondArray>


            <bond atomRefs2="a1 a4" order="1" />


            <bond atomRefs2="a1 a2" order="2" />


            <bond atomRefs2="a2 a3" order="1" />


          </bondArray>


        </molecule>


      </reactantList>


      <productList>


        <molecule molID="m2">


          <atomArray>


            <atom id="a1" elementType="C" mrvMap="1"


                  x2="11.378104480231892" y2="6.440502322157878" />


            <atom id="a2" elementType="C" mrvMap="2"


                  x2="9.838070599113811" y2="6.440502322157878" />


            <atom id="a3" elementType="Br" mrvMap="6"


                  x2="12.222399685651993" y2="5.375753901374384" />


            <atom id="a4" elementType="Br" mrvMap="5"


                  x2="8.79139786617207" y2="5.3400006000201445" />


            <atom id="a5" elementType="C" mrvMap="3" mrvQueryProps="A:"


                  x2="9.068070599113812" y2="7.774181443985913" />


            <atom id="a6" elementType="C" mrvMap="4" mrvQueryProps="A:"


                  x2="12.16836052271236" y2="7.578048462018074" />


          </atomArray>


          <bondArray>


            <bond atomRefs2="a1 a6" order="1" />


            <bond atomRefs2="a1 a2" order="1" />


            <bond atomRefs2="a1 a3" order="1">


              <bondStereo>H</bondStereo>


            </bond>


            <bond atomRefs2="a2 a5" order="1" />


            <bond atomRefs2="a2 a4" order="1">


              <bondStereo>W</bondStereo>


            </bond>


          </bondArray>


        </molecule>


      </productList>






and then, for cases where one side is just =CH2, to:





Code:
      <reactantList>


        <molecule molID="m1">


          <atomArray


              atomID="a1 a2"


              elementType="C C"


              mrvMap="1 2"


              x2="-0.30241796163212165 -1.8424518427502026"


              y2="6.695844328841227 6.695844328841227"


              />


          <bondArray>


            <bond atomRefs2="a1 a2" order="2" />


          </bondArray>


        </molecule>


      </reactantList>


      <productList>


        <molecule molID="m2">


          <atomArray


              atomID="a1 a2 a3 a4"


              elementType="C C Br Br"


              mrvMap="1 2 4 3"


              x2="11.378104480231892 9.838070599113811 12.918090794355606 8.298805054587598"


              y2="6.440502322157878 6.440502322157878 6.446994803321405 6.3929462138812285"


              />


          <bondArray>


            <bond atomRefs2="a1 a3" order="1">


              <bondStereo>H</bondStereo>


            </bond>


            <bond atomRefs2="a1 a2" order="1" />


            <bond atomRefs2="a2 a4" order="1">


              <bondStereo>W</bondStereo>


            </bond>


          </bondArray>


        </molecule>


      </productList>






The whole process would be made much easier if there were an "any or H" button, which Szabolcs said will be included in the next release. Writing out three different possibilities for addition across a pi bond is one thing; doing it for a Diels-Alder reaction, which would require 18 different reaction definitions, is something else entirely.





I tried using undefined R groups in place of "any or H" atoms, as Szabolcs suggested, but Reactor threw an error:





Code:
java.lang.ArrayIndexOutOfBoundsException: -1


        at chemaxon.marvin.modules.AutoMapper.setInternalMap(AutoMapper.java:852)


        at chemaxon.marvin.modules.AutoMapper.calcScore(AutoMapper.java:1011)


        at chemaxon.marvin.modules.AutoMapper.map(AutoMapper.java:464)


        at chemaxon.marvin.modules.AutoMapper.setReaction(AutoMapper.java:430)


        at chemaxon.marvin.modules.AutoMapper.map(AutoMapper.java:663)


        at chemaxon.reaction.Reaction.setReaction(Reaction.java:895)


        at chemaxon.reaction.Reactor.createReactionObject(Reactor.java:1248)


        at chemaxon.reaction.Reactor.createReactionObject(Reactor.java:1218)


        at chemaxon.reaction.Reactor.createReactionObject(Reactor.java:1177)


        at chemaxon.reaction.Reactor.createReactionObject(Reactor.java:1157)


        at chemaxon.reaction.Reactor.setReaction(Reactor.java:1009)


        at com.prenhall.epoch.synthesis.SynthSolver.getProducts(SynthSolver.java:148)








Here was the reaction definition that caused the error to be thrown. The substrate was cyclohexene.





Code:
<?xml version="1.0" ?>


<cml>


<MDocument>


  <MChemicalStruct>


    <reaction>


      <propertyList>


        <property dictRef="NAME" title="NAME">


          <scalar>bromination</scalar>


        </property>


        <property dictRef="REAGENTS" title="REAGENTS">


          <scalar>X2</scalar>


        </property>


        <property dictRef="EXPLAIN_REACTIVITY" title="EXPLAIN_REACTIVITY">


          <scalar></scalar>


        </property>


        <property dictRef="EXPLAIN_EXCLUDE" title="EXPLAIN_EXCLUDE">


          <scalar></scalar>


        </property>


        <property dictRef="EXPLAIN_SELECTIVITY" title="EXPLAIN_SELECTIVITY">


          <scalar></scalar>


        </property>


        <property dictRef="TOLERANCE" title="TOLERANCE">


          <scalar></scalar>


        </property>


        <property dictRef="EXPLAIN_TOLERANCE" title="EXPLAIN_TOLERANCE">


          <scalar></scalar>


        </property>


        <property dictRef="STANDARDIZATION" title="STANDARDIZATION">


          <scalar><![CDATA[<?xml version="1.0" encoding="UTF-8"?>


<!-- Standardizer configuration file -->


<!-- This configuration file is created with ChemAxon Config Builder -->





<StandardizerConfiguration Version ="1.0">


<Actions>


</Actions>


</StandardizerConfiguration>


]]></scalar>


        </property>


        <property dictRef="EXAMPLE" title="EXAMPLE">


          <scalar><![CDATA[<?xml version="1.0" ?>


<cml>


<MDocument>


  <MChemicalStruct>


    <reaction>


      <reactantList>


        <molecule molID="m1">


          <atomArray


              atomID="a1 a2 a3 a4"


              elementType="C C C C"


              x2="-8.283333778381348 -8.283333778381348 -9.617012900209383 -6.949654656553312"


              y2="2.9166667461395264 1.3766667461395263 0.6066667461395263 3.6866667461395264"


              />


          <bondArray>


            <bond atomRefs2="a1 a4" order="1" />


            <bond atomRefs2="a1 a2" order="2" />


            <bond atomRefs2="a2 a3" order="1" />


          </bondArray>


        </molecule>


      </reactantList>


      <productList>


        <molecule molID="m2">


          <atomArray>


            <atom id="a1" elementType="C"


                  x2="2.0416667461395264" y2="2.694999952316284" />


            <atom id="a2" elementType="C"


                  x2="2.0416667461395264" y2="1.1549999523162842" />


            <atom id="a3" elementType="C"


                  x2="0.7079876243114906" y2="0.38499995231628414" />


            <atom id="a4" elementType="C"


                  x2="3.375345867967562" y2="3.464999952316284" />


            <atom id="a5" elementType="Br"


                  x2="0.7079876243114911" y2="3.4649999523162847" />


            <atom id="a6" elementType="Br"


                  x2="3.375345867967562" y2="0.38499995231628426" />


          </atomArray>


          <bondArray>


            <bond atomRefs2="a1 a5" order="1">


              <bondStereo>W</bondStereo>


            </bond>


            <bond atomRefs2="a1 a2" order="1" />


            <bond atomRefs2="a1 a4" order="1" />


            <bond atomRefs2="a2 a6" order="1">


              <bondStereo>H</bondStereo>


            </bond>


            <bond atomRefs2="a2 a3" order="1" />


          </bondArray>


        </molecule>


      </productList>


    </reaction>


  </MChemicalStruct>


</MDocument>


<MDocument>


  <MChemicalStruct>


    <reaction>


      <reactantList>


        <molecule molID="m3">


          <atomArray


              atomID="a1 a2 a3 a4"


              elementType="C C C C"


              x2="-8.283333778381348 -8.283333778381348 -9.617012900209383 -9.749654370451017"


              y2="2.9166667461395264 1.3766667461395263 0.6066667461395263 3.6866667461395264"


              />


          <bondArray>


            <bond atomRefs2="a1 a4" order="1" />


            <bond atomRefs2="a1 a2" order="2" />


            <bond atomRefs2="a2 a3" order="1" />


          </bondArray>


        </molecule>


      </reactantList>


      <productList>


        <molecule molID="m4">


          <atomArray>


            <atom id="a1" elementType="C"


                  x2="2.0416667461395264" y2="2.694999952316284" />


            <atom id="a2" elementType="C"


                  x2="2.0416667461395264" y2="1.1549999523162842" />


            <atom id="a3" elementType="C"


                  x2="0.7079876243114906" y2="0.38499995231628414" />


            <atom id="a4" elementType="C"


                  x2="3.375345867967562" y2="3.464999952316284" />


            <atom id="a5" elementType="Br"


                  x2="0.7079876243114911" y2="3.4649999523162847" />


            <atom id="a6" elementType="Br"


                  x2="3.375345867967562" y2="0.38499995231628426" />


          </atomArray>


          <bondArray>


            <bond atomRefs2="a1 a5" order="1">


              <bondStereo>H</bondStereo>


            </bond>


            <bond atomRefs2="a1 a2" order="1" />


            <bond atomRefs2="a1 a4" order="1" />


            <bond atomRefs2="a2 a6" order="1">


              <bondStereo>H</bondStereo>


            </bond>


            <bond atomRefs2="a2 a3" order="1" />


          </bondArray>


        </molecule>


      </productList>


    </reaction>


  </MChemicalStruct>


</MDocument>


</cml>


]]></scalar>


        </property>


      </propertyList>


      <reactantList>


        <molecule molID="m1">


          <atomArray


              atomID="a1 a2 a3 a4 a5 a6"


              elementType="C C R R R R"


              mrvMap="1 2 0 0 0 0"


              rgroupRef="0 0 1 2 3 4"


              x2="-0.30241796163212165 -1.8424518427502026 -2.612451842750202 0.5270361277386774 -2.612451842750202 0.4675820383678786"


              y2="6.695844328841227 6.695844328841227 8.029523450669263 7.993382734294437 5.3621652070131915 5.3621652070131915"


              />


          <bondArray>


            <bond atomRefs2="a1 a6" order="1" />


            <bond atomRefs2="a1 a2" order="2" />


            <bond atomRefs2="a1 a4" order="1" />


            <bond atomRefs2="a2 a5" order="1" />


            <bond atomRefs2="a2 a3" order="1" />


          </bondArray>


        </molecule>


      </reactantList>


      <productList>


        <molecule molID="m2">


          <atomArray>


            <atom id="a1" elementType="C" mrvMap="1"


                  x2="11.378104480231892" y2="6.440502322157878" />


            <atom id="a2" elementType="C" mrvMap="2"


                  x2="9.838070599113811" y2="6.440502322157878" />


            <atom id="a3" elementType="Br"


                  x2="12.917983271923973" y2="6.459823473700652" />


            <atom id="a4" elementType="Br"


                  x2="8.298071788171717" y2="6.442416035023731" />


            <atom id="a5" elementType="R" rgroupRef="1"


                  x2="9.068070599113812" y2="7.774181443985913" />


            <atom id="a6" elementType="R" rgroupRef="2"


                  x2="12.256734125141502" y2="7.705259194875323" />


            <atom id="a7" elementType="R" rgroupRef="3"


                  x2="9.085134411257492" y2="5.090781057881941" />


            <atom id="a8" elementType="R" rgroupRef="4"


                  x2="12.148104480231892" y2="5.106823200329842" />


          </atomArray>


          <bondArray>


            <bond atomRefs2="a1 a8" order="1" />


            <bond atomRefs2="a1 a3" order="1">


              <bondStereo>H</bondStereo>


            </bond>


            <bond atomRefs2="a1 a2" order="1" />


            <bond atomRefs2="a1 a6" order="1" />


            <bond atomRefs2="a2 a7" order="1" />


            <bond atomRefs2="a2 a4" order="1">


              <bondStereo>W</bondStereo>


            </bond>


            <bond atomRefs2="a2 a5" order="1" />


          </bondArray>


        </molecule>


      </productList>


    </reaction>


  </MChemicalStruct>


</MDocument>


</cml>

User 870ab5b546

08-08-2007 20:50:38

Correction: The workaround fails for tri- and tetrasubstituted alkenes. For example, with 1-methylcyclohexene CC1=CCCCC1, the product is incorrectly calculated as C[C@]1(Br)CCCC[C@H]1Br (with both the trans and cis alkene definitions), even though cyclohexene C1CCC=CC1 is correctly calculated as Br[C@H]1CCCC[C@@H]1Br (with the cis alkene definition only).





I took care in the reaction definition to map the cis and trans groups in the starting material to the appropriate stereochemical positions in the product. But apparently, Reactor ignored the need to put the mapped atoms in the appropriate places.





I think this illustrates even more the need to put stereobonds in the products wherever they are in the reaction definition. Honestly, I don't see why this is so difficult. You have to construct the appropriate bonds anyway; why is it so hard to put in their stereochemistry?





I could easily write a method to do it myself, except that Reactor cleans up the products (rearranges the atoms), making it difficult to tell whether the new bonds should be wedged or hashed.

User 870ab5b546

09-08-2007 03:32:58

Here's another interesting discovery: The bromination reaction described below gives a stereochemical outcome opposite to what is defined for both the E and Z isomers of a trisubstituted alkene such as 3-methyl-3-hexene. However, if you take those same products and then run the reaction in reverse, the reverse reaction gives the correct stereochemical outcome -- the stereoisomers opposite to what you started with in the first place! (It is irrelevant whether your reaction definition has cis or trans Any groups in the reactant -- the same behavior is observed.)





And here's another discovery: replace the two Br atoms below with H and OH, add a selectivity rule based on pi charge, and you have hydroboration. But now the stereochemistry of the H atom is not indicated at all in the product, even though the H atom is explicit in the product.





I cannot possibly design a workaround for every one of these odd and inconsistent behaviors.





Code:
<?xml version="1.0" ?>


<MDocument>


  <MChemicalStruct>


    <reaction x1="1.865180540215619" y1="6.6287993590130485" x2="6.201179308056571" y2="6.529839194803556">


      <propertyList>


        <property dictRef="NAME" title="NAME">


          <scalar><![CDATA[bromination]]></scalar>


        </property>


        <property dictRef="EXPLAIN_REACTIVITY" title="EXPLAIN_REACTIVITY">


          <scalar></scalar>


        </property>


        <property dictRef="EXPLAIN_EXCLUDE" title="EXPLAIN_EXCLUDE">


          <scalar></scalar>


        </property>


        <property dictRef="TOLERANCE" title="TOLERANCE">


          <scalar></scalar>


        </property>


        <property dictRef="EXPLAIN_TOLERANCE" title="EXPLAIN_TOLERANCE">


          <scalar></scalar>


        </property>


        <property dictRef="STANDARDIZATION" title="STANDARDIZATION">


          <scalar><![CDATA[<?xml version="1.0" encoding="UTF-8"?>


<!-- Standardizer configuration file -->


<!-- This configuration file is created with ChemAxon Config Builder -->





<StandardizerConfiguration Version ="1.0">


<Actions>


</Actions>


</StandardizerConfiguration>


]]></scalar>


        </property>


      </propertyList>


      <reactantList>


        <molecule molID="m1">


          <atomArray


              atomID="a1 a2 a3 a4"


              elementType="C C C C"


              mrvMap="1 2 6 7"


              mrvQueryProps="0 0 A: A:"


              x2="-0.30241796163212165 -1.8424518427502026 -2.612451842750202 0.4675820383678786"


              y2="6.695844328841227 6.695844328841227 5.3621652070131915 5.3621652070131915"


              />


          <bondArray>


            <bond atomRefs2="a1 a4" order="1" />


            <bond atomRefs2="a1 a2" order="2" />


            <bond atomRefs2="a2 a3" order="1" />


          </bondArray>


        </molecule>


      </reactantList>


      <productList>


        <molecule molID="m2">


          <atomArray>


            <atom id="a1" elementType="C" mrvMap="1"


                  x2="11.290092738593708" y2="6.440502322157878" />


            <atom id="a2" elementType="C" mrvMap="2"


                  x2="9.750058857475628" y2="6.440502322157878" />


            <atom id="a3" elementType="Br" mrvMap="3"


                  x2="12.77504997583736" y2="6.44640501194856" />


            <atom id="a4" elementType="Br" mrvMap="4"


                  x2="8.367238232170452" y2="6.395336705979322" />


            <atom id="a5" elementType="C" mrvMap="6" mrvQueryProps="A:"


                  x2="8.980058857475628" y2="5.106823200329842" />


            <atom id="a6" elementType="C" mrvMap="7" mrvQueryProps="A:"


                  x2="12.060092738593708" y2="5.106823200329842" />


          </atomArray>


          <bondArray>


            <bond atomRefs2="a1 a6" order="1" />


            <bond atomRefs2="a1 a2" order="1" />


            <bond atomRefs2="a1 a3" order="1">


              <bondStereo>W</bondStereo>


            </bond>


            <bond atomRefs2="a2 a5" order="1" />


            <bond atomRefs2="a2 a4" order="1">


              <bondStereo>H</bondStereo>


            </bond>


          </bondArray>


        </molecule>


      </productList>


    </reaction>


  </MChemicalStruct>


</MDocument>


ChemAxon e08c317633

09-08-2007 12:22:10

bobgr wrote:



I tried using undefined R groups in place of "any or H" atoms, as Szabolcs suggested, but Reactor threw an error:





Code:
java.lang.ArrayIndexOutOfBoundsException: -1


        at chemaxon.marvin.modules.AutoMapper.setInternalMap(AutoMapper.java:852)


        at chemaxon.marvin.modules.AutoMapper.calcScore(AutoMapper.java:1011)


        at chemaxon.marvin.modules.AutoMapper.map(AutoMapper.java:464)


        at chemaxon.marvin.modules.AutoMapper.setReaction(AutoMapper.java:430)


        at chemaxon.marvin.modules.AutoMapper.map(AutoMapper.java:663)


        at chemaxon.reaction.Reaction.setReaction(Reaction.java:895)


        at chemaxon.reaction.Reactor.createReactionObject(Reactor.java:1248)


        at chemaxon.reaction.Reactor.createReactionObject(Reactor.java:1218)


        at chemaxon.reaction.Reactor.createReactionObject(Reactor.java:1177)


        at chemaxon.reaction.Reactor.createReactionObject(Reactor.java:1157)


        at chemaxon.reaction.Reactor.setReaction(Reactor.java:1009)


        at com.prenhall.epoch.synthesis.SynthSolver.getProducts(SynthSolver.java:148)





Try using the


Code:
-a changing



reactor command line option.





See this topic for more: http://www.chemaxon.com/forum/ftopic2925.html





Zsolt

ChemAxon e08c317633

09-08-2007 13:16:42

bobgr wrote:
Correction: The workaround fails for tri- and tetrasubstituted alkenes. For example, with 1-methylcyclohexene CC1=CCCCC1, the product is incorrectly calculated as C[C@]1(Br)CCCC[C@H]1Br (with both the trans and cis alkene definitions), even though cyclohexene C1CCC=CC1 is correctly calculated as Br[C@H]1CCCC[C@@H]1Br (with the cis alkene definition only).





I took care in the reaction definition to map the cis and trans groups in the starting material to the appropriate stereochemical positions in the product. But apparently, Reactor ignored the need to put the mapped atoms in the appropriate places.





I think this illustrates even more the need to put stereobonds in the products wherever they are in the reaction definition. Honestly, I don't see why this is so difficult. You have to construct the appropriate bonds anyway; why is it so hard to put in their stereochemistry?





I could easily write a method to do it myself, except that Reactor cleans up the products (rearranges the atoms), making it difficult to tell whether the new bonds should be wedged or hashed.
If only one ligand is attached to both sides of the double bond in your reaction definition, then the double bond of 1-methylcyclohexene CC1=CCCCC1 can be recognised as cis and as trans double bond too. See the attached images.





Bob: please always attach your input reaction as mrv file, include in your posts the exact command line call you used and list the results you get (if you use the Reactor GUI, then list the options). It can help us to answer or reproduce the error, and helps other forum users to understand the problem and gather useful information from our forum.





Regards,


Zsolt

User 870ab5b546

09-08-2007 14:19:27

Zsolt wrote:
If only one ligand is attached to both sides of the double bond in your reaction definition, then the double bond of 1-methylcyclohexene CC1=CCCCC1 can be recognised as cis and as trans double bond too. See the attached images.
Yes, of course. But look at the table of results below. The bromination reaction definitions are for bromination of a trans alkene (substrate defined as A/C=C/A) or a cis alkene (A\C=C/A). They are attached below. Correct and incorrect refer to the stereochemical results.





Code:
substrate             trans rxn   cis rxn


trans-2-hexene        correct     no rxn


cis-2-hexene          no rxn      correct


E-3-methyl-2-hexene   incorrect   incorrect


Z-3-methyl-2-hexene   incorrect   incorrect






You are right that E- and Z-3-methyl-2-hexene (or 3-methylcyclohexene) should be able to react under either reaction definition, but they should not give the wrong stereochemical results under both definitions. Furthermore, if you take any of the dibrominated products of the trisubstituted alkene and run the same reaction that produced it in reverse, the stereochemistry of the alkene that is obtained is opposite to what started.
Zsolt wrote:
Bob: please always attach your input reaction as mrv file, include in your posts the exact command line call you used and list the results you get (if you use the Reactor GUI, then list the options). It can help us to answer or reproduce the error, and helps other forum users to understand the problem and gather useful information from our forum.
The reaction definitions are attached. I am not using the command line interface, I am using Java calls from this JSP page. The key parts of the Java code are:





Code:
            Molecule reactionmol =


                  new MolHandler(thisReactionDef).getMolecule();


            RxnMolecule reaction = RxnMolecule.getReaction(reactionmol);


            if (reaction == null) {


               System.out.println("SynthSolver: reaction "


                     + "definition molecule is null.");


               if (lastReactionDef) break;


               else continue;


            } // if reaction is null


            Reactor reactor = new Reactor();


            reactor.setOutputReactionMappingStyle(Reactor.MAPPING_STYLE_COMPLETE);


            if (reaction != null) reactor.setReaction(reaction);


            if (reverse) {


               reactor.setReverse(true);


               println("Running reaction in reverse!!!");


            }


...


                        ArrayList<Molecule[]> allPerms =


                           getPermutations(resizedArray);


                        int numPerms = allPerms.size();


                  


                        // Submit each permutation to Reactor.


                        Molecule[] reactorProds = null;


                        for (int perm = 0; perm < numPerms; perm++) {


                           reactor.setReactants(allPerms.get(perm));


                           reactorProds = reactor.react();


...








There's a lot more to the code than that, due to the need to loop, to duplicate and permute the reactants, to connect several reactions in a sequence, etc., but no other reactor parameters are set. I can send you the entire Java file privately if you like. Duplication, permutation, and looping are not relevant in the present case.





-- Bob

User 870ab5b546

09-08-2007 15:14:24

Here's one other example of strange stereochemical behavior, and then I will leave you alone. The reaction file is attached. I submitted E- and Z-2-methylhexene to the reaction, then the reverse reaction, and got the results shown in the figure. Note that the stereochemistry of the H atom is not given in the products, and both products give a single alkene stereoisomer, not one with a wavy bond, upon reverse.