This is a variation of a question asked on October 30, 2021 here, but it is different enough that I think it warrants a new post. I'm also trying to use RDKit.
Is it possible to convert a SMILES notation of a cyclopeptide into a list of masses, rather than a list of amino acid names? For example, Tyrocidine B1 has the following isomeric SMILES format:
CC(C)C[C@H]1C(=O)N[C@@H](C(=O)N2CCC[C@H]2C(=O)N[C@H](C(=O)N[C@@H](C(=O)N[C@H](C(=O)N[C@H](C(=O)N[C@H](C(=O)N[C@H](C(=O)N[C@H](C(=O)N1)CCCCN)C(C)C)CC3=CC=C(C=C3)O)CCC(=O)N)CC(=O)N)CC4=CC=CC=C4)CC5=CNC6=CC=CC=C65)CC7=CC=CC=C7
The above question would try to write out the specific amino acids. Tyrocidine B1 would look something like the following:
cyclo[Asn-Gln-Tyr-Val-Lys-Leu-D-Phe-Pro-Trp-D-Phe]
I believe the cyclic nature of the peptide invalidates the answers provided in the above question. Furthermore, rather than listing the amino acids by name, I was hoping to obtain a list of amino acid masses. For Tyrocidine B1 it would look something like the following in python:
[114.04, 128.06, 163.06, 99.07, 128.09, 113.08, 147.07, 97.05, 186.08, 147.07]
I'm thinking that, because I'm focusing on the masses specifically and may deal with unknown amino acids in the future, it may be more straightforward to identify the peptide bonds and add up the mass of atoms in between them to achieve this goal. For example, if I found peptide bond 1 and peptide bond 2, I would add up all carbon, hydrogen, and nitrogen atoms (and possibly others) between those bonds to obtain the mass of that amino acid. I've been researching how best to do so, and feel like I've come close with the below code. However, I'm struggling with understanding the output of running a Mol
object through GetSubstructMatches
, and don't know how to use that to obtain amino acid masses.
from rdkit import Chem
tyroB1 = 'CC(C)C[C@H]1C(=O)N[C@@H](C(=O)N2CCC[C@H]2C(=O)N[C@H](C(=O)N[C@@H](C(=O)N[C@H](C(=O)N[C@H](C(=O)N[C@H](C(=O)N[C@H](C(=O)N[C@H](C(=O)N1)CCCN)C(C)C)CC3=CC=C(C=C3)O)CCC(=O)N)CC(=O)N)CC4=CC=CC=C4)CC5=CNC6=CC=CC=C65)CC7=CC=CC=C7'
m = Chem.MolFromSmiles(tyroB1)
# identify peptide bonds
substructure = Chem.MolFromSmarts('NCC(=O)N')
print(m.GetSubstructMatches(substructure))
output:
((7, 8, 9, 10, 11), (11, 15, 16, 17, 18), (18, 19, 20, 21, 22), (22, 23, 24, 25, 26), (26, 27, 28, 29, 30), (30, 31, 32, 33, 34), (34, 35, 36, 37, 38), (38, 39, 40, 41, 42), (42, 43, 44, 45, 46), (46, 4, 5, 6, 7))
I'm optimistic in that the above code clearly identifies the correct number of peptide bonds (and does so with the different cyclopeptides I've tried), but I've stuggled moving from there to assembling a list of amino acid masses.
Would you have recommendations or ideas on how best to move forward, either in the direction I'm going or somewhere new? I would be obtaining information like SMILES formatting from PubChem, so anything that appears on cyclopeptide pages (like Tyrocidine B1 above) is fair game for use.