Peptide coupling reaction in reaction library

User 52dceca74d

09-05-2009 22:03:56

Hi,


I have a quick question about the reaction library.  I am trying to use
the reactor API to programmatically do library enumeration, and I
was wondering if you provide any other (larger) reaction libraries.  I
am trying to do a simple peptide coupling reaction (amide bond
formation) and a colleague of mind told me that none of the Reactor Pro
library reactions would work for it.



Thanks

ChemAxon d76e6e95eb

10-05-2009 07:55:30

That's true, our synthetic library currently contain no peptide reactions, but if you just need a simple amide bond formation reaction to enumerate peptide libraries, that's fairly easy. If you would like to model protection/deprotection steps, reactivity and selectivity issues, than you might need more reactions and rules.


For a general amide formation using amines and carboxylic acids, however, you can use something like this:


[#6X4:1]-[NX3:2][H:7].[#6:2][C:3]([O:4][H:8])=[O:5]>>[#6:1][N:2][C:3]([#6:2])=[O:5]

User 52dceca74d

11-05-2009 21:58:33

We would like to create a product library for the reactyion of different amino acids using Jchem Reactor.


For example, if you react Glycine and Alanine together we should expect four product (with no amine or carboxyl protection); the four expected products are: Ala-Ala, Ala-Gly, Gly-Ala, Gly-Gly.


when i used the amide bond formation reaction you sent to us, we got only one product and that product depend on wich amino acid is reactant #1 and which is reactant#2.


Please let us know how to run the reactor to creat a library like that.


Sincerely,


R

ChemAxon d76e6e95eb

12-05-2009 07:38:52

You can use GUI, API and the command line interface as well in combinatorial mode, here is the documentation. Here is a command line example using recursive calls to increase the peptide size:


First:
react -r peptideformation aminoacids.sdf aminoacids.sdf -o results.sdf -m comb

After:
react -r peptideformation results.sdf aminoacids.sdf -o results1.sdf -m comb


And so on. You can certaily easily write a script or a small program with or API to generate the entire library in one step. However, I think, that you most probably only need a small text tool combining the "Ala" "Gly" and other aminoacid literals in all permutations. Then you can use Molconvert (included in Marvin) to convert the resulting "AlaAlaGlySerHys" strings to any file formats you prefer.

User 52dceca74d

18-05-2009 19:29:16

The reaction:


[#6X4:1]-[NX3:2][H:7].[#6:2][C:3]([O:4][H:8])=[O:5]>>[#6:1][N:2][C:3]([#6:2])=[O:5]



Is not working combinatorially when I react serine and tyrosine together, but it works well otherwise.  The problem is that I am looking for a tool to react all of these molecules computationally and derive all the products in their proper proportions, using many reactants in one mix.  Is there another tool, not reactor, but perhaps the metabolizer, which will do this?  I tried the above reaction in metabolizer and it threw an error for having more than one reactant.


Thanks for the help.

ChemAxon d76e6e95eb

20-05-2009 09:31:35

It works well for me, I tested it wth the command line script.


react -r '[#6X4:1]-[NX3:2][H:7].[#6:2][C:3]([O:4][H:8])=[O:5]>>[#6:1][N:2][C:3]([#6:2])=[O:5]' aminoacids.smiles aminoacids.smiles -m comb


Comments:


- The reaction is bimolecular, so I specified the same input file twice
- The switch "-m comb" activates the combinatorial mode
- The switch "-t reaction" would generate reaction schemes in the output
- Depending on your goals, you can consider improving the reaction scheme to include larger parts (the alpha amino acid groups) to avoid side reactions caused by other amino or carboxylic groups.


 

User 870ab5b546

20-05-2009 13:51:46

Is there a way to set combinatorial mode via the API?  I don't see anything in the API documentation.  I want both substrate arrays {C[O-], C[Br]} and {C[Br], C[O-]} to react to give COC.  Currently, I have to permute them manually.  I want Reactor to permute them for me.  

ChemAxon d76e6e95eb

20-05-2009 14:03:42

Combinatorial permutation is provided by application level, not by the core Reactor API. I do not think, that it would be too difficult to implement permutations with the API, you just need to take the first reactant of the first set and react it with all reactants of the second set, and so on. However, we plan to add a huigher layer of API providing combinatorial mode and other new features like stoichiometry handling. It can come in a future release version.

User 870ab5b546

20-05-2009 14:06:28

I don't mean combinatorial permutation.  I mean that Reactor provides products regardless of the order of the substrates, as long as one permutation of the substrates matches the reaction definition.  Currently we generate the permutations ourselves, but I think it would be faster if Reactor did it.  

ChemAxon d76e6e95eb

20-05-2009 14:15:04

Yes, I agree, that it could be more efficient within reactor and make life easier in some cases, but the order of the substrates can be important sometimes when you are building libraries and do not care to much about chemistry. However, we can add the automatic permutation of reactant order to the new higher level API. That will be a perfect place for that.

User 870ab5b546

20-05-2009 14:21:14

What is a "higher level API"?  Anyway, I agree that it should be an option (call it PERMUTE), because some users may not want it.  Please add it to your request list.  


Here's my code for generating permutations of substrates, in case you (or anyone else) wants it:


    /** Get list of N! permutations of the substrates.
* This method is adapted from
* http://www.cs.princeton.edu/introcs/23recursion/Permutations.java.html.
* @param substrates an array of Molecules
* @return a list of all possible orderings of these Molecules
*/
public static ArrayList<Molecule[]> getPermutations(Molecule[] substrates) {
int n = substrates.length;
ArrayList<Molecule[]> allPerms = new ArrayList<Molecule[]>();
permute(substrates, n, allPerms);
return allPerms;
} // getPermutations(Molecule[])

/** Recursively permute progressively shorter collections.
* This method is adapted from
* http://www.cs.princeton.edu/introcs/23recursion/Permutations.java.html.
* @param substrates an array of Molecules
* @param n the number of Molecules in each array
* @param allPerms list of permutations of Molecules
*/
private static void permute(Molecule[] substrates, int n,
ArrayList<Molecule[]> allPerms) {
if (n == 1) {
// System.out.println("permute: Adding " + printMolArray(substrates));
allPerms.add((Molecule[]) substrates.clone());
return;
} // if n == 1
for (int itemNum = 0; itemNum < n; itemNum++) {
swap(substrates, itemNum, n - 1);
permute(substrates, n - 1, allPerms);
swap(substrates, itemNum, n - 1);
} // for each itemNum
} // permute(Molecule[], int, ArrayList<Molecule[]>)

/** Swap the Molecules at substrates pos1 and pos2.
* This method is adapted from
* http://www.cs.princeton.edu/introcs/23recursion/Permutations.java.html.
* @param substrates an array of Molecules
* @param pos1 position of Molecule to swap
* @param pos2 position of other Molecule to swap
*/
private static void swap(Molecule[] substrates, int pos1, int pos2) {
Molecule tmp1 = substrates[pos1];
substrates[pos1] = substrates[pos2];
substrates[pos2] = tmp1;
} // swap(Molecule[], int, int)

ChemAxon d76e6e95eb

20-05-2009 15:00:58

Oops, I was mistaken, we already have API for the reactant combination provided by the ConcurrentReactorProcessor class. Thank you Zsolt for the info! This handles the combinatoral mode, but not the automatic permutation you would like to have. That will be provided by a new class in the future.

User 52dceca74d

24-05-2009 06:11:17

So I may have discovered why I've been confused about your comments.  I just realized that you have been using multiple molecules within the same files and reacting said files with themselves.  From my trial reactions, it seems that ConcurrentReactionProcessor as well as Reactor's combinatorial mode only seem to combinatorially react all of the reaction centers a set of two files.  This is why I always get the error of having more than 2 reactants when it should be working fine.  I have implemented my own itereator that uses algorithms similar to the old Synthesizer which has been deprecated.  Could someone describe in a little more detail how ConcurrentReactorProcessor works after all, because I can't derive enough information from the documentation.


Also, I really need a second reaction.  I need to be able to react an NHS-ester with an amino acid, but I am having trouble producing the reaction for it.  Does anyone else have it on hand?


Thanks!

ChemAxon e08c317633

25-05-2009 11:09:54










rafiou wrote:

So I may have discovered why I've been confused about your comments.  I just realized that you have been using multiple molecules within the same files and reacting said files with themselves.  From my trial reactions, it seems that ConcurrentReactionProcessor as well as Reactor's combinatorial mode only seem to combinatorially react all of the reaction centers a set of two files.  This is why I always get the error of having more than 2 reactants when it should be working fine.  I have implemented my own itereator that uses algorithms similar to the old Synthesizer which has been deprecated.  Could someone describe in a little more detail how ConcurrentReactorProcessor works after all, because I can't derive enough information from the documentation.



I'm not sure I completely understand what you want to do. Could you give us an example?


Yes, you are right, ConcurrentReactionProcessor works exactly as Reactor, the additional features it provides are concurrent processing (can utilitize all CPU cores) and handling of processing modes.


In more details:


ConcurrentReactionProcessor clones Reactor objects that were set using the setReactor(Reactor) method, and uses these reactors to process - in concurrent mode - the reaction with the reactant sets provided by the ReactantSetEnumerator. setReactantSetEnumerator(ReactantSetEnumeration) can be used to set the reactant set enumerator, and there is also a setReactantIterators(MoleculeIterator[], int) method, which uses the default ReactantSetEnumerator implementation (it provides sequential and combinatorial mode processing). For other processing modes (e.g. random enumeration of reactant sets) a new ReactantSetEnumeration has to be implemented.


I hope this helps.


Zsolt

ChemAxon d76e6e95eb

25-05-2009 12:19:36

Here is a reaction for NCS esters and amines in SMARTS, and I attached and MRV version as well, and for the sake of easier understanding, a screenshot. The recursive SMARTS part defines, that the nitrogen is not an amide nor an amino group in alpha position to a carboxyl group. I hope, that it will do.


[#6:4][C:5](=[O:6])[O:7][N:8]1[C:9](=[O:10])[C:11][C:12][C:13]1=[O:14].[H:3]-[N;X3;!$(NC~[!#1!#6])!$(NCC~[!#1!#6]):2]-[#6:1]>>[#6:1][N:2][C:5]([#6:4])=[O:6]

User 870ab5b546

26-05-2009 16:42:09










Gyuri wrote:

Yes, I agree, that it could be more efficient within reactor and make life easier in some cases, but the order of the substrates can be important sometimes when you are building libraries and do not care to much about chemistry. However, we can add the automatic permutation of reactant order to the new higher level API. That will be a perfect place for that.



While we're on the subject of substrate array restrictions...  


Consider the reaction of a RLi with an ester.  Two equivalents of the R group from RLi are incorporated into the product, so the reaction definition includes three starting materials: Two RLi, plus the ester.  However, the convention among organic chemists is to draw RLi just once.  As a result, when I want to apply the ester reaction to the two substrates that a user drew in an MRV document, I need to do the following:


(1) Double each of the substrates in turn, to give the arrays {RLi, ester, RLi} and {RLi, ester, ester} OR {ester, RLi,  ester} and {ester, RLi, RLi}.


(2) Permute each array to generate, {RLi, ester, RLi}, {RLi, ester, ester}, {RLi, RLi, ester}, {ester,  RLi, ester}, {ester, RLi, ester}, {ester, ester, RLi}.  (That's omitting duplicate permutations.)


(3) Submit each array to Reactor and see if it generates products.  


I have similar problems if a user draws an excess number of substrates.  Then I have to generate all of the possible arrays with fewer substrates.  


There has GOT to be a faster way of doing this internally in Reactor.  

ChemAxon d76e6e95eb

01-06-2009 07:35:26

I am sorry, but we do not support that kind of reactions at the moment. We plan to support reactant excess in the future, however.

User 52dceca74d

03-08-2009 07:59:53

Hi,


Sorry but the reaction you gave me doesn't seem to be working.


[#6:4][C:5](=[O:6])[O:7][N:8]1[C:9](=[O:10])[C:11][C:12][C:13]1=[O:14].[H:3]-[N;X3;!$(NC~[!#1!#6])!$(NCC~[!#1!#6]):2]-[#6:1]>>[#6:1][N:2][C:5]([#6:4])=[O:6]


 


I am trying to react an NHS ester


CCCCCC(=O)ON1C(=O)CCC1=O


with an amino acid


N[C@@H](CCCNC(N)=N)C(O)=O


And the reactor doesn't produce a result.


Thank you


 

ChemAxon d76e6e95eb

03-08-2009 12:47:19

That's OK. According to the example SMARTS reaction definition it does not react with alpha amino groups of amino acids and nitrogens that are connected to a carbon that is connected to another hetero atom like amides, or guanidines.


You need to modify the scheme if it is too restrictive. You can find a tutorial for SMARTS here and many examples here.

User 3af65074b3

18-08-2010 20:25:14










Gyuri wrote:

I am sorry, but we do not support that kind of reactions at the moment. We plan to support reactant excess in the future, however.



I have a reaction where A and B reactant gives two products, C1 and C2. The products are different as only the attachment point is different eg., Diels Alder rxns giving 1,4 and 1,5 product in a ring. I have defined rules for the reactant only, using SMARTS. When I run the reaction supplying reactant data files, the reactor gives Alchemist Error detailing it as "Unsupported Mapping Style", I was wondering what i did wrong or what could be done to avoid it. Thanks.

ChemAxon d76e6e95eb

19-08-2010 14:22:02

This kind of error usually occurs, when there is an error with the mapping. For example, in this case, the same map number is used more than once on one side of a reaction arrow.


Please check your scheme, anyway, because, I would generally expect substituted cycohexene as the product of a Diiels-Alder reaction, not substituted benzene.


For example, this SMARTS expression can be used as a simple Diels-Alder scheme:


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

Here is the command line execution result:


$ react -r '[C:1]=[#6:2][#6:3]=[C:4].[C:6]=[C:5]>>[#6:3]1=,:[#6:2][C:1][C:6][C:5][C:4]1' 'C\C=C\C(Cl)=C' 'BrC=C'
CC1C=C(Cl)CCC1Br
CC1CC(Br)CC(Cl)=C1

User 3af65074b3

19-08-2010 18:42:42

OK, that was a hypothetical one, and for the rxn provided its a cyclohexene, sorry for that. Yes the CH3 is also not mapped. But the zist of my question is:


How two same products (C1 and C2, which are different only in attachment point) obtained from the 2 different reactants (A and B) can be mapped differently. Or in a way reactor can read it.


Your example of diels alder gives only one product. what about the rxn giving two different products as represented in the picture file. e.g 1,4 and 1,5 addition products.


You said "the same map number is used more than once on one side of a reaction arrow"


Ans: Its true, as they are originated from the same atoms of the reactant. What can be done to represent two products which are different only in the attachment point.


P.S.: I havenot mapped the product but only the reactants as follows and Scheme shows the product. Thanks.



match(ratom(1),"[C:1]=[#6:2][#6:3]=[C:4]",1)
match(ratom(5),"[C:6]=[C:5]",5)

ChemAxon d76e6e95eb

19-08-2010 19:30:12

If you look at carefully, my Diels Alder reaction gave two products. Reactor always generates all possible isomers according to the scheme, unless additional rules make the reaction selective.


If you haven't done it yet, I think, that reading these Reactor materials could be useful:


Slides with a example reaction design:
https://www.chemaxon.com/products/reactor/


A quite recent presentation about reaction design:
https://www.chemaxon.com/library/scientific-presentations/reactor/virtual-reaction-design-for-chemists/


There are some other materials on our site as well, but I think, that these two might do.

ChemAxon e08c317633

19-08-2010 20:10:05










bhhataba wrote:

Your example of diels alder gives only one product. what about the rxn giving two different products as represented in the picture file. e.g 1,4 and 1,5 addition products.



Use the "-t fusedreaction" option if you want to get all products in one reaction. The "fused reaction" option is also available in Reactor application (GUI).


$ react -r '[C:1]=[#6:2][#6:3]=[C:4].[C:6]=[C:5]>>[#6:3]1=,:[#6:2][C:1][C:6][C:5][C:4]1' 'C\C=C\C(Cl)=C' 'BrC=C' -t fusedreaction
C\C=C\C(Cl)=C.BrC=C>>CC1C=C(Cl)CCC1Br.CC1CC(Br)CC(Cl)=C1

Zsolt

User 3af65074b3

19-08-2010 22:07:56

Could you tell me what is wrong with this.i tried fused reaction also.


I am not defining the product but the error which i get is the same. thanks a bunch.


chemaxon.reaction.ReactionException: chemaxon.util.concurrent.processors.WorkUnitException: chemaxon.reaction.ReactionException: Unsupported mapping style:


match(ratom(1),"[#6;$([#6H1][N-:2][N+:3]#[N:4]),$([#6H1][N:2]=[N+:3]=[N-:4]):1]",1) &&
match(ratom(7),"[CH:5]#[#6:6][A,a;$([CH1][C]#[CH]):7]",7)


 




ChemAxon d76e6e95eb

26-08-2010 09:56:24

Where do you have that combine match(...) expresssion? Does the image
illustrate the reaction you would like to get (reactants and products) or your generic scheme?


As above, the mapping error seems to be related to incorrect mapping of the generic scheme. For example, the map numbers cannot be duplicated on one side of the reaction arrow.

User 3af65074b3

26-08-2010 16:14:12

thankyou for the response.


The match expression is in the 'Reactivity' tab of the 'Rules'.  And yes the image drawn on 'Scheme' represents the exact reaction that i want to have.


I understand that the mapping number cannot be duplicated on one side of arrow. but if i choose a database with azide and alkyne with different substitution, how can i have two products as shown in scheme.


I hope i am clear to explain the problem.

ChemAxon d76e6e95eb

31-08-2010 15:27:48

You need no rule for that. Please see the attached image of the generic reaction scheme (triazoleformation.png). Reactor will try to match the reactants from the generic scheme as substructures in the corresponding input molecules. All combinations are reacted, so all regioisomers are generated automatically unless you limit that with some rules.

So the generic scheme is:
[N:1]=[N+:2]=[#7-:3].[C:5]#[C:4]>>[N:1]1[C:4]=[C:5][N:3]=[N:2]1


The reaction executed in command line using mapped SMARTS for the generic reaction scheme (following -r) with two specific reactants in SMILES results two products (see triazoleformationresult.png):

$ react -r '[N:1]=[N+:2]=[#7-:3].[C:5]#[C:4]>>[N:1]1[C:4]=[C:5][N:3]=[N:2]1' 'CC(C)CN=[N+]=[N-]' 'C#CCC1=CC=CC=C1'
CC(C)CN1N=NC=C1CC1=CC=CC=C1
CC(C)CN1C=C(CC2=CC=CC=C2)N=N1


And the same reaction with result type is fused reaction (-t fused), a single specific reaction scheme showing the input reactants and all of their products on the right side of the arrow.

$ react -r '[N:1]=[N+:2]=[#7-:3].[C:5]#[C:4]>>[N:1]1[C:4]=[C:5][N:3]=[N:2]1' 'CC(C)CN=[N+]=[N-]' 'C#CCC1=CC=CC=C1' -t fused
CC(C)CN=[N+]=[N-].C#CCC1=CC=CC=C1>>CC(C)CN1N=NC=C1CC1=CC=CC=C1.CC(C)CN1C=C(CC2=CC=CC=C2)N=N1

User e87f0be5e1

09-09-2010 15:38:11

Hi, in this Huisgen reaction,  how can I add a rule that in presence of Cu(I) condition the only product is the 1,3 triazole substituted?


thank you


Nicola


 

ChemAxon d76e6e95eb

13-09-2010 18:26:58

I suggest to create a separate reaction in where Cu(I) is the catalyst. In tha reaction, you migh probably want to add a selectivity rule, that calculates a property of the aceylene carbons to differeniate them. You migh choose the calculation depending on the mechanism on the reaction. You might many examples to be able to choose the most relevant calculation function.


I know not much about the mechanism of the Huigens reaction and do no have examples available at the momen, so I just guess, hat the negaively charged nitrogen(mapped 3) migh prefer the most positively charged end of the acetylene. So I would try this selectivity rule:


charge(ratom(5))


This is the execution from command line:


$ react -r '[N:1]=[N+:2]=[#7-:3].[C:5]#[C:4]>>[N:1]1[C:4]=[C:5][N:3]=[N:2]1..s:charge(ratom(5))' 'CC(C)CN=[N+]=[N-]' 'C#CCC1=CC=CC=C1'
CC(C)CN1C=C(CC2=CC=CC=C2)N=N1

ChemAxon e08c317633

14-09-2010 08:02:05










nicolag wrote:

Hi, in this Huisgen reaction,  how can I add a rule that in presence of Cu(I) condition the only product is the 1,3 triazole substituted?












Gyuri wrote:

I suggest to create a separate reaction in where Cu(I) is the catalyst.



 Another solution is to "switch on" the selectivity rule in presence of Cu(I):


(matchCount(reactant(0),"[Cu+]")+matchCount(reactant(1),"[Cu+]"))*charge(ratom(5))

This selectivity rule will return a value different from 0 only if Cu(I) is present. If the selectivity rule returns the same value for both products, then reactor will not select between them, will generate them both. See Reactor documentation for more.


Results:


$ react -r '[N:1]=[N+:2]=[#7-:3].[C:5]#[C:4]>>[N:1]1[C:4]=[C:5][N:3]=[N:2]1..s:(matchCount(reactant(0),"[Cu+]")+matchCount(reactant(1),"[Cu+]"))*charge(ratom(5))' 'CC(C)CN=[N+]=[N-]' 'C#CCC1=CC=CC=C1'
CC(C)CN1N=NC=C1CC1=CC=CC=C1
CC(C)CN1C=C(CC2=CC=CC=C2)N=N1

$ react -r '[N:1]=[N+:2]=[#7-:3].[C:5]#[C:4]>>[N:1]1[C:4]=[C:5][N:3]=[N:2]1..s:(matchCount(reactant(0),"[Cu+]")+matchCount(reactant(1),"[Cu+]"))*charge(ratom(5))' '[Cu+].CC(C)CN=[N+]=[N-]' 'C#CCC1=CC=CC=C1'
[Cu+].CC(C)CN1C=C(CC2=CC=CC=C2)N=N1

$ react -r '[N:1]=[N+:2]=[#7-:3].[C:5]#[C:4]>>[N:1]1[C:4]=[C:5][N:3]=[N:2]1..s:(matchCount(reactant(0),"[Cu+]")+matchCount(reactant(1),"[Cu+]"))*charge(ratom(5))' 'CC(C)CN=[N+]=[N-]' '[Cu+].C#CCC1=CC=CC=C1'
[Cu+].CC(C)CN1C=C(CC2=CC=CC=C2)N=N1

$ react -r '[N:1]=[N+:2]=[#7-:3].[C:5]#[C:4]>>[N:1]1[C:4]=[C:5][N:3]=[N:2]1..s:(matchCount(reactant(0),"[Cu+]")+matchCount(reactant(1),"[Cu+]"))*charge(ratom(5))' '[Cu+].CC(C)CN=[N+]=[N-]' '[Cu+].C#CCC1=CC=CC=C1'
[Cu+].[Cu+].CC(C)CN1C=C(CC2=CC=CC=C2)N=N1

Zsolt

User e87f0be5e1

14-09-2010 08:40:31

thank you... but I found the .mrv  file of Huisgen reaction in another topic.


bye